使用 load-grunt-config 和 Sails.js

Using load-grunt-config with Sails.js

上下文

我已经编写了一些 g运行t 任务,我想将它们用于我正在编写的新项目 Sails.js。

使用 Sails.js,您可以通过将 JS 文件添加到 /tasks/register 文件夹来添加额外的 g运行t 任务。在我们到达我添加的文件之前,让我们谈谈问题。

问题

风帆不会升起。调试器显示:

debug: --------------------------------------------------------
error: ** Grunt :: An error occurred. **
error: 
------------------------------------------------------------------------
ERROR
>> Unable to process task.
Warning: Required config property "clean.dev" missing. 

问题显然出在 g运行t 上,所以我尝试 grunt build(自动 运行s 与 sails lift):

Running "clean:dev" (clean) task
Verifying property clean.dev exists in config...ERROR
>> Unable to process task.
Warning: Required config property "clean.dev" missing. Use --force to continue.

据此判断是路径问题。让我们看看我添加的文件。

/tasks/register/customTask.js

这里的任务加载load-grunt-config,这是我问题的根源:

module.exports = function(grunt) {

    // measures the time each task takes
    require('time-grunt')(grunt);
    
    // This require statement below causes my issue
    require('load-grunt-config')(grunt, {
        config: '../../package.json',
        scope: 'devDependencies',
        overridePath: require('path').join(process.cwd(), '/asset-library/grunt')
    });
    
    grunt.registerTask('customTask', [
        'newer:jshint',
        'newer:qunit',
        'newer:concat',
        'newer:cssmin',
        'newer:uglify'
    ]);

};

我原以为使用 overridePath 而不是 configPath 可以解决我的问题,但是,唉,事情并没有那么简单。有什么方法可以使我可以像在其他项目中那样使用我自己的自定义任务文件夹和 load-grunt-config,或者是否有一些神奇的条件我可以将 require 语句包装起来?

我只需要 运行 和 grunt customTask 不需要 运行 和 grunt *(其他任何东西)。

好吧,这其实很简单。我所要做的就是更改 customTask.js 文件中的 grunt.registerTask 调用:

grunt.registerTask('customTask', [
    'newer:jshint',
    'newer:qunit',
    'newer:concat',
    'newer:cssmin',
    'newer:uglify'
]);

对此:

grunt.registerTask('customTask', 'My custom tasks', function() {
    // The require statement is only run with "grunt customTask" now!
    require('load-grunt-config')(grunt, {
        config: '../../package.json',
        scope: 'devDependencies',
        overridePath: require('path').join(process.cwd(), '/asset-library/grunt')
    });
    grunt.task.run([
        'newer:jshint',
        'newer:qunit',
        'newer:concat',
        'newer:cssmin',
        'newer:uglify'
    ]);
});

如果不清楚,我 did 必须移动 require('load-grunt-config') 调用,所以如果你是复制 + 粘贴,请确保删除 require 语句那是在 grunt.registerTask 调用之外。

You can find more information about custom Grunt tasks here.