常见问题解答
如何安装 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()
将其切换为异步。
请注意,将false
传递给done()
函数会告诉 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
全局安装。目前,唯一支持的 shell 是 bash。
如何在多个任务之间共享参数?
虽然每个任务都可以接受自己的参数,但有一些选项可用于在多个任务之间共享参数。
“动态”别名任务
这是在多个任务之间共享参数的首选方法。
虽然别名任务必然很简单,但常规任务可以使用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');
// 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 安装失败,错误:找不到兼容版本”
确保您拥有NPM 和 Node.JS的最新稳定版本
Grunt 0.3 问题
在 Windows 上使用 Grunt 0.3 时,为什么当我尝试运行 Grunt 时会打开我的 JS 编辑器?
如果您位于与Gruntfile相同的目录中,则当您键入 grunt 时,Windows 会尝试执行该文件。所以您需要改用grunt.cmd
。
另一种方法是按照这些说明,使用DOSKEY
命令创建一个 Grunt 宏。这将允许您使用grunt
而不是grunt.cmd
。
这是您将使用的DOSKEY
命令
DOSKEY grunt=grunt.cmd $*