您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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 $*

联系我
置顶