好的,我已经将 Grunt 设置为 concat 并最小化我的所有 JS 文件,我还设置了它来运行我的 sass 文件。这工作正常,我设置了监视调用来监视所有 .js 和 .scss 文件,然后它运行为每个文件设置的任务。
我正在玩backbone.js,因此每次我对其中一个文件进行更改时都有很多库文件要联系,这本身不是问题,但是当任何sass文件发生更改时,它都会运行我的闭包编译器,即使我的任何 js 文件都没有更改。
所以我做了一些研究,从这里找到的一些问题/答案中,看起来我可以设置两个监视功能来监视不同的文件夹并在每个监视文件夹上的文件发生更改时运行设置任务。简单吧?如果是这样我不确定出了什么问题,但它只会看第一个任务,第二个它不会同时看?
我知道 JavaScript 是非阻塞的,但是 watch 任务是阻塞任务,从我的理解来看(如果我错了,请纠正我)当我的第一个 watch 调用开始时,它会停止 grunt 运行第二个 watch 调用?
然后我发现了并发,我认为这可以解决我的问题。但它只是做同样的事情,第一个 watch 调用似乎停止了第二个调用,而 grunt 正在查看我的第一组文件夹。
这是当前的 grunt 文件代码:
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concurrent: {
options: {
logConcurrentOutput: true
},
target1: ['watch:ScssFiles'],
target2: ['watch:JSFiles']
}, //End of Concurrent
'closure-compiler': {
frontend: {
closurePath: '/usr/lib',
cwd: 'raw_assets/javascript/',
js: ['jquery-2.1.0.js','underscore.js','backbone.js','vars.js','bb_models.js','bb_collections.js','bb_views.js','master.js'],
jsOutputFile: 'assets/js/showcase_master.js',
options: {
compilation_level: 'SIMPLE_OPTIMIZATIONS',
language_in: 'ECMASCRIPT5_STRICT',
}//End of Options
} //End of frontend
}, //End of Closure Compiler
sass: {
dist: {
options: {
style: 'compressed'
}, //End of Options
files: {
'assets/css/Master.css': 'raw_assets/sass/main.scss'
} //End of Files
} //End of Dist.
}, //End of SASS
watch: {
'JSFiles': {
files: [ 'raw_assets/javascript/*.js' ],
tasks: ['closure-compiler'],
options: {
spawn: false,
},
}, //End of Watch call for JS Files
'ScssFiles': {
files: ['raw_assets/sass/*.scss'],
tasks: ['sass'],
options: {
spawn: false,
},
} //End of Watch SCSS Files
} //End of Watch
});
// Load the plugins
grunt.loadNpmTasks('grunt-closure-compiler');
grunt.loadNpmTasks('grunt-contrib-sass');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-concurrent');
//When 'Grunt' is run perform watch function
grunt.registerTask('default', ['concurrent:target2', 'concurrent:target1']);#
}; //End of GruntFile
所以我真正想要的是,这个 grunt 文件是否可以同时监视两个文件夹,并且只在该组中的文件发生更改时执行我需要的操作/任务,这可行吗?
我确实有(或至少认为我有)有一个解决方法,我正在 Windows 上开发,但有一个运行 Ubuntu 服务器的虚拟机。我在腻子终端内运行我的 grunt 文件。在这种情况下,我可以有两个腻子终端,一个设置为一个监视 js 文件的调用,另一个用于监视我的 scss 文件。这种设置只是更简单的方法吗?
欢迎所有帮助。
格伦。
PS。抱歉,如果我的拼写错误,我有阅读障碍,也可能没有正确解释事情,所以请告诉我,我会改进我的措辞,谢谢。