Gruntjs Grunt.js-同时运行两个监视任务?
好的,我已经将Grunt设置为concat和min我所有的JS文件,我还将它设置为运行我的sass文件。这很好,我设置了watch调用来监视所有的.js和.scss文件,然后它运行为每个文件设置的任务 我在玩backbone.js,因此每次我对其中一个文件进行更改时都会联系很多库文件,这本身不是问题,但当任何sass文件更改时,它会同时运行我的闭包编译器,即使我的任何js文件都没有更改 所以我做了一些研究,从这里找到的一些问题/答案来看,我可以设置两个监视功能来监视不同的文件夹,并在每个监视文件夹上的文件发生更改时运行set任务。简单对吧?如果是这样,我不确定哪里出了问题,但它只会观看第一组任务,而第二组任务不会同时观看 我知道JavaScript是非阻塞的,但watch任务是一个阻塞任务,从我的理解来看(如果我错了,请纠正我),当我的第一个watch调用启动时,它阻止grunt运行第二个watch调用 然后我发现了concurrent,我认为它可以解决我的问题。但它只是做同样的事情,第一个监视调用似乎停止了第二个运行,而grunt正在监视我的第一组文件夹 以下是当前的grunt文件代码:Gruntjs Grunt.js-同时运行两个监视任务?,gruntjs,grunt-contrib-watch,Gruntjs,Grunt Contrib Watch,好的,我已经将Grunt设置为concat和min我所有的JS文件,我还将它设置为运行我的sass文件。这很好,我设置了watch调用来监视所有的.js和.scss文件,然后它运行为每个文件设置的任务 我在玩backbone.js,因此每次我对其中一个文件进行更改时都会联系很多库文件,这本身不是问题,但当任何sass文件更改时,它会同时运行我的闭包编译器,即使我的任何js文件都没有更改 所以我做了一些研究,从这里找到的一些问题/答案来看,我可以设置两个监视功能来监视不同的文件夹,并在每个监视文件
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文件。在这种情况下,我可以有两个putty终端,一个设置为一个监视js文件调用,另一个监视我的scss文件。这样的设置会更简单吗
欢迎大家帮忙
格伦
注:抱歉,如果我的拼写不正确,我有诵读困难,也可能没有正确解释,请告诉我,我会改进我的措辞,谢谢。
grunt concurrent
没有必要,grunt contrib watch
可以按照您定义的方式查看多个目录。我删掉了你的文件来尝试一下,发现了两个问题
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
watch: {
'JSFiles': {
files: [ 'raw_assets/javascript/*.js' ],
tasks: ['closure_compiler'],
options: {
spawn: true,
},
}, //End of Watch call for JS Files
'ScssFiles': {
files: ['raw_assets/sass/*.scss'],
tasks: ['sass'],
options: {
spawn: true,
},
} //End of Watch SCSS Files
} //End of Watch
});
// Load the plugins
grunt.loadNpmTasks('grunt-contrib-watch');
//When 'Grunt' is run perform watch function
grunt.registerTask('closure_compiler', function() {
grunt.log.writeln("in closure_compiler");
});
grunt.registerTask('sass', function() {
grunt.log.writeln("in sass");
});
}; //End of GruntFile
然后我运行了npm install grunt grunt cli grunt contrib watch
,并用javascript
和sass
子目录创建了raw\u assets
目录。然后,我创建了一个空的JS文件和SCSS文件,并运行了GruntWatch
两个子目录中的任何修改都会运行正确的任务
$ grunt watch
Running "watch" task
Waiting...OK
>> File "raw_assets/sass/foo2.scss" added.
Running "sass" task
in sass
Done, without errors.
Completed in 0.381s at Mon Mar 03 2014 00:21:46 GMT+0100 (CET) - Waiting...
OK
>> File "raw_assets/javascript/new.js" added.
Running "closure_compiler" task
in closure_compiler
Done, without errors.
Completed in 0.381s at Mon Mar 03 2014 00:27:50 GMT+0100 (CET) - Waiting...
非常感谢,这似乎对我有用:)-我没怎么用咕噜。我一直认为你必须打电话询问你想要执行的操作。在这里,您只注册我要运行的两个任务。所以,当我使用JQuery/JavaScript(现在正在学习主干)时,使用JSHint或JsLint之类的东西不会成为问题吗?我是否将其注册为新任务?在它运行之前或之后运行我的关闭?再加上你推荐什么?因为他们看着我彼此非常接近?没问题。通常,您可以定义新任务,也可以使用插件中的任务。如果调用
grunt.loadNpmTasks('grunt-contrib-jshint')
您将加载jshint
任务。要使用它,请将jshint
部分添加到initConfig
以配置任务,并将jshint
添加到JStasks
数组中。我对jshint vs jslint不太熟悉,不知道该使用哪一种,我只是更经常地亲自遇到jshint。非常感谢-我也看到jshint比jslint多得多谢谢你,格伦。