Grunt任务依赖

时间:2013-07-11 08:22:28

标签: javascript npm gruntjs

我有一个通过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');
...

2 个答案:

答案 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似乎并不关心任务是否通过registerMultiTaskregisterTask多次附加。