我可以告诉UglifyJS只压缩和破坏所有文件,除了一些我只想连接的文件吗?

时间:2014-03-20 13:31:13

标签: gruntjs uglifyjs

是否可以指定我想要压缩和破坏的文件和数组(默认的Uglify行为),还有一个不应该被触及的文件列表,只是连接在一起?

感谢。

2 个答案:

答案 0 :(得分:11)

您可以通过不同方式解决此问题。我发布了一个扩展示例来说明可以做什么:

uglify: {
    doAll: {
        options: {
            banner: '// <%= pkg.name %> - v<%= pkg.version %> - ' + '<%= grunt.template.today("yyyy-mm-dd HH:mm:ss") %>\n\n',
            mangle: {
                except: [ // mangle is true for all else besides the specified exceptions
                    'src/input-d.js',
                    'src/input-e.js',
                    'src/input-f.js'
                ]
            },
            preserveComments: 'some'
        },
        files: 'dest/output.min.js': [ // concatenation, uglification (mangle) with exceptions, block comments preserved, minification and a banner
            'src/input-a.js',
            'src/input-b.js',
            'src/input-c.js',
            'src/input-d.js',
            'src/input-e.js',
            'src/input-f.js'
        ]
    },
    concatenateOnly: {
        options: {
            compress: false,
            mangle: false,
            preserveComments: 'all'
        },
        files: 'dest/output.js': [ // only concatenation
            'src/input-a.js',
            'src/input-b.js',
            'src/input-c.js',
            'src/input-d.js',
            'src/input-e.js',
            'src/input-f.js'
        ]
    }
}

concatenateOnly任务完全符合您的要求,只能连接。您可以指定哪些文件将在那里连接。您可以使用concatenateAll任务同时运行doAllwatch

watch: {
    js: {
        files: ['config/*.js', 'app/js/**/*.js'],
        tasks: ['jshint', 'jasmine', 'uglify:concatenateOnly', 'uglify:doAll']
    }
}

...或者您可以通过组合我上面粘贴的一些设置来执行单个任务,例如使用options.mangle.except为您带来好处。

答案 1 :(得分:0)

我相信你需要两个数组,一个是要压缩和破坏的文件列表,另一个是连接的。

压缩和受损的数组将用于Uglify。

连接数组将用于Grunt Contrib Concat。