无法将自定义任务添加到Sails.js Gruntfile

时间:2013-11-10 04:33:23

标签: gruntjs sails.js

我是Sails.js的新手,我在向gruntfile添加额外任务时遇到了问题。我想要做的是使用带有Less的自动修复器,但是每当我调用“sails lift”时,我都会收到以下错误:

error: Grunt :: Warning: Task "autoprefixer:multiple_files" not found. Use --force to continue.

>> Tasks directory "grunt-autoprefixer" not found.

这是我添加到gruntfile的行:

grunt.loadTasks('grunt-autoprefixer');

grunt.initConfig({
  autoprefixer: {
    options: {
      browsers: ['last 2 version', 'ie 8', 'ie 7']
    },
    multiple_files: {
      expand: true,
      flatten: true,
      src: 'assets/linker/styles/*.css',
      dest: 'assets/linker/styles/'
    },
    concat: {
      src: 'assets/linker/styles/*.css',
      dest: 'assets/linker/styles/s.css'
    }
  },
//Rest of initConfig...

//compileAssets task
grunt.registerTask('compileAssets', [
  'clean:dev',
  'jst:dev',
  'less:dev',
  'autoprefixer:multiple_files',
  'copy:dev',    
  'coffee:dev'
 ]);

我尝试从compileAssets任务中删除“multiple_files”。我已尝试在本地和全局安装autoprefixer但没有骰子,总是出现相同的错误。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

使用loadNpmTasks而非loadTasks

loadNpmTasksnode_modules加载本地安装的模块。这是您需要使用的。

loadTasks加载来自指定目录的代码,并且不执行读取package.json,递归模块依赖性以及loadNpmTasks处理的其他好东西之类的操作。

这就是您看到错误的原因:loadTasks正在寻找名为'grunt-autoprefixer'的目录。

如果您喜欢阅读源代码,可以在line之前看到代码中发生了什么。 :)

另请注意: grunt模块需要安装本地,因为loadNpmTasks的工作方式。这是by design。当我第一次开始使用grunt时,我被这个抓住了因为我假设加载功能如何工作。糟糕。

答案 1 :(得分:1)

你错过了三个字母。

grunt.loadTasks('grunt-autoprefixer');

应该是:

grunt.loadNpmTasks('grunt-autoprefixer');

前者从您指定的目录加载任务,后者从node_modules中的目录加载任务。