Grunt 常见问题
Grunt常见问题主要整理一些刚学习Grunt的会遇到的Grunt问题点,希望可以帮到你。
如何安装grunt?
对于常规的安装说明,请阅读入门指南。如果在阅读完之后你需要更多的详细信息,你可以阅读更详细的的安装 Grunt指南。
什么时候我将可以使用开发中的'某某'特性?
在安装 Grunt指南中介绍了如何安装已发布的和未发布的开发版本的Grunt。
Grunt可以在Windows上工作吗?
Grunt可以很好的在windows上工作,因为和都能够很好的在windows上工作。通常情况下,问题在于,因为它捆绑着较老版本的Node.js。
避免这个问题最好的办法是使用安装二进制的git和使用去安装二进制的node和npm,然后使用内置的 或 去替代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); });
如何启用shell中的tab键补全?
为了给grunttab键补,可以在你的~/.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_con:target:staging deploy会导致global.name的值为"peter"以及grunt.con('target')将会返回"staging"。由此推断,deploy任务就可以使用这些值。
grunt.registerTask('set_global', 'Set a global variable.', function(name, val) { global[name] = val; }); grunt.registerTask('set_con', 'Set a con property.', function(name, val) { grunt.con.set(name, val); });
当出现时如何栈的追踪信息?
使用 --stack 参数就可以看到栈的追踪信息了。例如:grunt task --stack 。
为什么出现 "Maximum call stack size exceeded(超出最大栈大小)" 的?
你可能是为某个任务创建的别名和其他任务重名了。 例如: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 指令。
出现 "Fail to install with npm error: No compatible version found"
请确保安装了最新稳定版本的 。
在Windows的 Grunt 0.3中,为什么当我尝试运行grunt时我的JS编辑器会打开?
如果你在Gruntfile所在的目录中时,当你输入grunt时Windows会尝试去执行那个。因此你需要输入grunt.cmd。
另选择是使用DOSKEY命令去创建Grunt宏,请参考。这样就可以使用grunt替代grunt.cmd了。
可以使用所示如下的DOSKEY命令:
DOSKEY grunt=grunt.cmd $*