了解gruntjs registerTask冒号

我目前正在尝试学习开发和生产版本的gruntjs。

我想分配一个全局configurationvariables来确定的东西。 我有一个简单的initConfig

 grunt.initConfig({ foo: { bar: {GLOBAL: true}, baz: {GLOBAL: false} } }); grunt.registerTask('one', ['foo:bar']); grunt.registerTask('two', ['foo:baz']); 

我的问题是:

我的任务中究竟冒着什么结肠? ( foo:bar or foo:baz

冒号和简单点之间有什么区别?

我的目标是将全局variables设置为truefalse以便进一步处理:

 grunt.initConfig({ foo: { bar: {GLOBAL: true}, baz: {GLOBAL: false} }, awesomestuff: { smth: GLOBAL ? 'yes' : 'no', another: !Global ? 'DoDebug' : 'MakeRelease' } }); grunt.registerTask('one', ['foo:bar', 'awesomestuff']); grunt.registerTask('two', ['foo:baz', 'awesomestuff']); 

我将如何实现这一目标?


更新

我以某种方式得到了全局variables。 通过使用参数注册一个名为init新任务,我可以在其他任务中调用它。

 grunt.registerTask('init', 'Init', function(param) { grunt.config('GLOBAL', param) }); grunt.registerTask('one', ['init:true', 'foo:bar', 'awesomestuff']); 

在这种情况下, init任务将被调用,可设置param设置为true 。 但问题仍然是:

为什么我会用一个点的冒号引用一个对象?

为什么我会用冒号而不是点来引用对象?

要理解为什么,你首先需要了解咕噜的 任务configuration和目标 。

单个目标

为了帮助您进一步理解这个概念和术语,请看一下名为grunt-contrib-copygrunt插件的示例configuration。 这是一个复制文件的插件。 以下是该代码的一个片段:

 grunt.initConfig({ copy: { // <-- Task main: { // <-- Target // ... <-- other configurations go here. } } }); 

在上面的这个例子中, Task被命名为copy ,它包含一个名为main Target

要注册这个任务,你可以这样做:

 grunt.registerTask('copyFiles', ['copy:main']); 

你可以通过命令行input以下命令来运行它:

$ grunt copyFiles

多个目标

Grunt 任务也可以包含多个目标 。 考虑以下代码示例:

 grunt.initConfig({ copy: { js: { // ... <-- Additional configurations for this Target go here. }, css: { // ... <-- Additional configurations for this Target go here. } } }); 

你可以注册上面的例子如下:

 grunt.registerTask('copyJavaScriptFiles', ['copy:js']); grunt.registerTask('copyCssFiles', ['copy:css']); 

所以,通过命令行:

  1. 运行$ grunt copyJavaScriptFiles会根据指定的configuration复制所有的JS文件。

  2. 运行$ grunt copyCssFiles会根据指定的configuration复制所有的CSS文件。

如果你想复制JS和CSS文件,你可以注册一个任务,如下所示:

 grunt.registerTask('copyAll', ['copy']); 

你可以通过在你的命令行中input$ grunt copyAll来运行它。

注意在最后一个例子中它不包含任何冒号: 。 此时的Grunt将运行copy Task中的所有Targets ,即js one和css one。


冒号和简单点之间有什么区别?

结肠

希望现在你可以看到冒号是什么。 它用于引用任务中的特定目标 ,通常仅在任务具有多个目标时使用,并且要特别引用其中的一个。

简单的点

简单点是访问对象属性的JavaScript标准符号。 谷歌“JavaScript符号”,以了解更多关于点符号方括号表示法

Gruntfile.js的上下文中,点符号通常用于调用grunt对象的functions / methods / properties。 例如:

 grunt.initConfig({...}); grunt.loadNpmTasks(...); grunt.registerTask(...); 

编辑1更新原始post/问题后更新答案。