javascript - 将 load-grunt-config 与 Sails.js 结合使用

标签 javascript node.js gruntjs sails.js

上下文

我已经编写了一些繁重的任务,我想将它们用于我在 Sails.js 中编写的新项目。

使用 Sails.js,您可以通过将 JS 文件添加到 /tasks/register 文件夹来添加其他 grunt 任务。在讨论我添加的文件之前,让我们先讨论一下问题。

问题

sails 无法升起。调试器显示:

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

问题显然与 grunt 有关,因此我尝试 grunt build (它会自动与 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'
    ]);
});

如果不清楚,我确实必须移动 require('load-grunt-config') 调用,因此,如果您进行复制+粘贴,请确保删除 grunt.registerTask 调用之外的 require 语句。

You can find more information about custom Grunt tasks here .

关于javascript - 将 load-grunt-config 与 Sails.js 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30007359/

相关文章:

gruntjs - 语法错误: Unexpected token ) in Gruntfile

css - 即使输出 css 为空也写入文件

javascript - FireFox 的 headless 浏览器(类似于 Chrome 的 PhantomJS)

javascript - KeystoneJS post 请求不起作用

javascript - Firestore : Multiple conditional where clauses

javascript - 如何创建不带 "new"关键字的类的实例

c# - 加载javascript和速度问题

javascript - 单击具有指定功能的按钮时,如何在输出框中的下拉菜单中显示选项的值?

javascript - 与 javascript 正则表达式完全匹配的字符串

javascript - 最快的 tr :hover method