我有一个通过npm taskA
安装的grunt任务(不是实际名称)
taskA有一个依赖项:grunt-contrib-stylus,它在taskA的package.json中指定并安装。出于某种原因,当从主Gruntfile.js运行 grunt default 时,它会出错。
Warning: Task "stylus" not found. Use --force to continue.
修复是在主项目中需要grunt-contrib-stylus。我想避免这种情况。我的任务是不是在node_modules /中使用grunt-contrib-stylus的原因是什么?
任务A
module.exports = function(grunt) {
'use strict';
grunt.loadNpmTasks('grunt-contrib-stylus');
...
主要Gruntfile.js
...
grunt.loadNpmTasks('taskA');
...
答案 0 :(得分:3)
grunt.loadNpmTasks
加载[cwd]/node_modules/[modulename]/tasks/
。您可以通过更改cwd
:
<强>任务A 强>
module.exports = function(grunt) {
var parentcwd = process.cwd();
process.chdir(__dirname);
grunt.loadNpmTasks('grunt-contrib-stylus');
process.chdir(parentcwd);
};
请务必在最后将cwd
设置回父级。
答案 1 :(得分:0)
使用node-isms找到了一个看似简单的方法。即使有kyle-robinson-young的答案,如果你的任务依赖于通过peerDependencies的另一个任务或者是嵌套结构,你仍然会收到警告。
这是解决这个问题的方法!
在 taskA :
中module.exports = function(grunt) {
require('grunt-contrib-stylus/tasks/stylus')(grunt);
// Other stuff you need to do as part of your task
}
Grunt似乎并不关心任务是否通过registerMultiTask
或registerTask
多次附加。