我目前正在使用 Grunt,当我尝试 Gulp 时,我第一次遇到的 Grunt 问题也发生在我身上。
我正在尝试处理一些 js 文件(concat、uglify 和缩小它们),但我不希望所有这些文件都编译成一个大文件,我想要多个输出文件,每个文件都来自一些输入文件的处理:
scripts =
firstOutput:
outputFilename: 'first.min.js',
inputFiles: ['one.js', 'two.js']
secondOutput:
outputFilename: 'second.min.js',
inputFiles: ['three.js']
thirdOutput:
outputFilename: 'third.min.js',
inputFiles: ['four.js', 'five.js']
我发现(目前)使用 Grunt 实现这一目标的唯一方法是使用多个手表和多个 uglify 任务(或一个 uglify 任务和一个监听器更改以动态修改 uglify 任务 src 和 dest):
module.exports = (grunt) ->
grunt.loadNpmTasks 'grunt-contrib-watch'
grunt.loadNpmTasks 'grunt-contrib-uglify'
grunt.initConfig
watch:
firstOutput:
files: scripts.firstOutput.inputFiles
tasks: ['uglify:firstOutput']
options :
spawn : false
secondOutput:
files: scripts.secondOutput.inputFiles
tasks: ['uglify:secondOutput']
options :
spawn : false
thirdOutput:
files: scripts.thirdOutput.inputFiles
tasks: ['uglify:thirdOutput']
options :
spawn : false
uglify:
firstOutput:
files: scripts.firstOutput.inputFiles
dest: scripts.firstOutput.outputFilename
secondOutput:
files: scripts.secondOutput.inputFiles
dest: scripts.secondOutput.outputFilename
thirdOutput:
files: scripts.thirdOutput.inputFiles
dest: scripts.thirdOutput.outputFilename
grunt.registerTask 'default', 'watch'
而且,您可以想象,这只是一个示例,在我的大型 Web 应用程序的情况下,不仅仅是三个输出 js 文件,而且我还将少一些文件处理成一些 css 文件
我的 Gruntfile 真的很大,我发现它有很多重复的代码,有没有办法让这个代码重构为一个 watch 和一个 uglify 任务,自动猜测 src 和 dest 有某种依赖(知道如果four.js文件被修改,它必须处理第三个输出)?
如果你有办法用 Gulp 来做这件事,我会很高兴地接受它,因为我想在我通常的工作流程中测试它。