对于常规的安装说明,请阅读快速入门指南。如果在阅读完之后你需要更多的详细信息,你可以阅读更详细的的安装 Grunt指南。
在安装 Grunt指南中介绍了如何安装已发布的和未发布的开发版本的Grunt。
Grunt可以很好的在windows上工作,因为Node.js和npm都能够很好的在windows上工作。通常情况下,问题在于Cygwin,因为它捆绑着一个较老版本的Node.js。
避免这个问题最好的办法是使用msysGit installer安装二进制的git
和使用Node.js installer去安装二进制的node
和npm
,然后使用内置的Windows command prompt或 PowerShell去替代Cygwin。
这是因为你忘记调用 this.async方法来告知Grunt你的task是异步执行的。为了简化模型,Grunt采用同步模式的编码风格,你可以通过在任务中调用 this.async()
切换到异步模式。
注意,如果task执行失败,可以传递 false
给 done()
函数告知Grunt。
案例:
grunt.registerTask('asyncme', 'My asynchronous task.', function() {
var done = this.async();
doSomethingAsync(done);
});
为了给grunt增加tab键自动补功能,可以在你的~/.bashrc
文件中添加下面一行代码:
eval "$(grunt --completion=bash)"
当然,假设你已经使用npm install -g grunt
在全局安装好了Grunt。因为Grunt目前仅仅支持bash命令。
虽然每个任务可以使用它自己的参数,但是,这里有几个方法允许你在多个task中共享参数。
这是多个任务共享参数的首选方法
鉴于任务别名是很简单的,一个普通的task可以使用grunt.task.run让一个函数作为“动态的”任务别名。在下面这个案例中,在命令行中执行grunt build:001
,最终效果是执行foo:001
、bar:001
和 baz:001
这三个task。
grunt.registerTask('build', 'Run all my build tasks.', function(n) {
if (n == null) {
grunt.warn('Build num must be specified, like build:001.');
}
grunt.task.run('foo:' + n, 'bar:' + n, 'baz:' + n);
});
多个任务共享参数的方式是使用grunt.option。在这里有一个例子,在命令行中执行grunt deploy --target=staging
会让grunt.option('target')
返回"staging"
。
grunt.registerTask('upload', 'Upload code to specified target.', function(n) {
var target = grunt.option('target');
// do something useful with target here
});
grunt.registerTask('deploy', ['validate', 'upload']);
注意,布尔类型的参数可以使用一个没有值的键。例如,在命令行中执行grunt deploy --staging
会让grunt.option('staging')
返回true
。
在其他情况下,你可能希望暴露一个设置配置或者全局的值方法。 在这种情况下,可以在注册任务时设置其参数作为一个全局对象的或者项目配置的值。
在下面的例子中,在命令行运行grunt set_global:name:peter set_config:target:staging deploy
会导致global.name
的值为"peter"
以及grunt.config('target')
将会返回"staging"
。由此推断,deploy
任务就可以使用这些值。
grunt.registerTask('set_global', 'Set a global variable.', function(name, val) {
global[name] = val;
});
grunt.registerTask('set_config', 'Set a config property.', function(name, val) {
grunt.config.set(name, val);
});
使用 --stack
参数就可以看到调用栈的追踪信息了。例如:grunt task --stack
。
你可能是为某个任务创建的别名和其他任务重名了。 例如:grunt.registerTask('uglify', ['uglify:my_target']);
应该是grunt.registerTask('myUglify', ['uglify:my_target']);
。
至少有两种方法。一种方法时利用 npm uninstall [GRUNT_PLUGIN] --save-dev
指令,这将从package.json
文件和 node_modules
目录下同时移除指定的插件。另一种方法时手工从 package.json
文件中删除依赖项,然后执行 npm prune
指令。
请确保安装了最新稳定版本的 NPM 和 Node.JS。
如果你在Gruntfile所在的目录中时,当你输入grunt时Windows会尝试去执行那个文件。因此你需要输入grunt.cmd
。
另一个选择是使用DOSKEY
命令去创建一个Grunt宏,请参考这篇文章。这样就可以使用grunt
替代grunt.cmd
了。
可以使用所示如下的DOSKEY
命令:
DOSKEY grunt=grunt.cmd $*