如何忽略Grunt Uglify中的文件

53

背景

我刚使用grunt约30分钟。请给我一些时间。

但是我有一个非常简单的脚本,它将查看我的js,然后将其全部压缩成一个文件。

代码

"use strict";
module.exports = function (grunt) {

    // load all grunt tasks
    require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        uglify: {
            options: {
                beautify: true,
                report: 'gzip'
            },
            build: {
                src: ['docroot/js/*.js', 'docroot/components/pages/*.js', 'docroot/components/plugins/*.js'],
                dest: 'docroot/js/main.min.js'
            }
        },
        watch: {
            options: {
                dateFormat: function(time) {
                    grunt.log.writeln('The watch finished in ' + time + 'ms at' + (new Date()).toString());
                    grunt.log.writeln('Waiting for more changes...');
                }
            },
            js: {
                files: '<%= uglify.build.src %>',
                tasks: ['uglify']
            }
        }
    });

    grunt.registerTask('default', 'watch');

}

问题

我的 main.min.js 每次都会被编译包含进去。这意味着我的 min.js 文件会被重复 2 倍、4 倍、8 倍、16 倍等等。最好的解决方法是添加一个例外并忽略 main.min.js 吗?

1个回答

124
在src数组的末尾添加。
'!docroot/js/main.min.js'

这将排除它。"!"符号将其转换为排除操作。

http://gruntjs.com/api/grunt.file#grunt.file.expand

以"!"开头的模式匹配路径将被排除在返回的数组之外。模式按顺序处理,因此包含和排除的顺序很重要。

这不仅适用于grunt uglify,任何使用Grunt约定指定文件的任务都将按此方式工作。

总的来说,我建议将构建后的文件放在源文件之外的其他地方,例如根目录下的dist文件夹中。


非常感谢,我本来就是这么想的。但还是很好知道 :) - Jamie Hutber
1
只是想再次强调“结束”位的重要性。 - tarikakyol
这里的结束非常重要。同意 @trkaky - Ozil
你好,这似乎无法使用src文件掩码 path/to/files/**/*js。因此,src:['web/js/**/*.js','!web/js/bin/file1.js','!web/js/bin/file2.js'] 不会忽略file1.js和file2.js。你是否遇到过这个问题?是因为我试图忽略子文件夹中的文件吗? - Fed
1
@FedericoCapaldo 当使用src文件掩码时,要排除多个文件,只需将要排除的文件放入src末尾的数组中即可。 src:['web/js/**/*.js',['!web/js/bin/file1.js','!web/js/bin/file2.js']] 对我来说这很有效。 - Rmalmoe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接