Frequently Asked Questions
如何安装 Grunt?
有关常规安装说明,请阅读新手入门指南。如果阅读后需要更具体的信息,请阅读全面的安装 Grunt指南。
我什么时候能使用开发中的功能 'X'?
关于安装 Grunt 的已发布和未发布开发版本,请参考安装 Grunt指南。
Grunt 能在 Windows 上工作吗?
Grunt 在 Windows 上运行良好,因为 Node.js 和 npm 都能在 Windows 上正常工作。通常有问题的部分是 Cygwin,因为它捆绑了一个过时的 Node.js 版本。
避免此问题的最佳方法是使用 msysGit 安装程序安装 git
二进制文件,使用 Node.js 安装程序安装 node
和 npm
二进制文件,并使用内置的 Windows 命令提示符或 PowerShell,而不是 Cygwin。
为什么我的异步任务没有完成?
很可能是因为你忘记调用 this.async 方法来告诉 Grunt 你的任务是异步的。为了简单起见,Grunt 使用同步编码风格,可以通过在任务体内调用 this.async()
切换到异步。
请注意,向 done()
函数传递 false
告诉 Grunt 任务已失败。
例如:
grunt.registerTask('asyncme', 'My asynchronous task.', function() {
var done = this.async();
doSomethingAsync(done);
});
如何启用 shell 选项卡自动完成?
要为 Grunt 启用 bash 选项卡自动完成,请在你的 ~/.bashrc
文件中添加以下行:
eval "$(grunt --completion=bash)"
这假设 Grunt 已使用 npm install -g grunt
全局安装。目前,仅支持 bash shell。
如何在多个任务间共享参数?
虽然每个任务可以接受自己的参数,但有几种方法可以在多个任务间共享参数。
"动态"别名任务
这是跨多个任务共享参数的首选方法。
与别名任务不同,常规任务可以使用 grunt.task.run 使其有效地作为"动态"别名任务。在此示例中,在命令行上运行 grunt build:001
将导致运行 foo:001
、bar:001
和 baz:001
任务。
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() {
var target = grunt.option('target');
// 在这里对目标做一些有用的事情
});
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 安装:未找到兼容版本"
确保你已安装 NPM 和 Node.JS 的最新稳定版本
Grunt 0.3 问题
在 Windows 上使用 Grunt 0.3 时,为什么我的 JS 编辑器在我尝试运行 Grunt 时打开?
如果你在与 Gruntfile 相同的目录中,Windows 会在你输入 grunt 时尝试执行该文件。因此你需要输入 grunt.cmd
。
另一种方法是使用 DOSKEY
命令创建 Grunt 宏,按照这些说明。这将允许你使用 grunt
而不是 grunt.cmd
。
你将使用的 DOSKEY
命令是:
DOSKEY grunt=grunt.cmd $*