sails.js中的Grunt无法识别新任务

时间:2015-11-18 22:20:46

标签: javascript gruntjs sails.js

我正在尝试在sails.js应用程序中添加一个新的grunt任务。

为了保持我的测试用例简单,我已将复制任务复制到新文件copy-tests.js,该文件也位于tasks / config文件夹中。

我修改了copy-tests.js以将set方法的第一个参数更新为'copy-tests',所以它现在读取

module.exports = function(grunt) {
    grunt.config.set('copy-tests', {
        dev: {
            files: [{
                expand: true,
                cwd: './assets',
                src: ['**/*.!(coffee|less)'],
                dest: '.tmp/public'
            }]
        },
        build: {
            files: [{
                expand: true,
                cwd: '.tmp/public',
                src: ['**/*'],
                dest: 'www'
            }]
        }
    });
    grunt.loadNpmTasks('grunt-contrib-copy');
};

我已经更新了compileAssets.js以添加我的新任务,所以它现在读取

module.exports = function (grunt) {
    grunt.registerTask('compileAssets', [
        'clean:dev',
        'jst:dev',
        'less:dev',
        'copy:dev',
        'copy-tests:dev',
        'coffee:dev',
        'jade:dev'
    ]);
};

当我尝试举起帆应用程序时,我得到'任务'复制测试:开发“未找到”

我知道grunt可以看到我的文件,因为我已经向Gruntfile.js添加了一个日志语句,如下所示

var taskConfigurations = loadTasks('./tasks/config'),
    registerDefinitions = loadTasks('./tasks/register');
    console.log(taskConfigurations);

当此语句记录

时,我可以在其他任务中看到复制测试

任何人都可以帮助解释为什么grunt声称找不到复制测试:dev?

或许也许我会以错误的方式解决这个问题。我想要实现的是有两个复制任务,一个是将我的主构建内容复制到.tmp文件夹,另一个是将我的客户端测试复制到.tmp文件夹。稍后我将确保只有我的开发版本运行两个复制任务,我的prod只运行第一个。我认为最好的方法是使用config文件夹中的两个grunt任务,但也许有另一种方式......

1 个答案:

答案 0 :(得分:2)

我需要按照以下方式添加到复制任务

,而不是定义第二个任务以获得备用副本
module.exports = function(grunt) {

    grunt.config.set('copy', {
        dev: {
            files: [{
                expand: true,
                cwd: './assets',
                src: ['**/*.!(coffee|less)'],
                dest: '.tmp/public'
            }]
        },
        devTests: {
            files: [{
                expand: true,
                cwd: './tests',
                src: ['**/*.*'],
                dest: '.tmp/public/tests'
            }]
        },          
        build: {
            files: [{
                expand: true,
                cwd: '.tmp/public',
                src: ['**/*'],
                dest: 'www'
            }]
        }
    });

    grunt.loadNpmTasks('grunt-contrib-copy');
};

我的compileAssets看起来像

module.exports = function (grunt) {
    grunt.registerTask('compileAssets', [
        'clean:dev',
        'jst:dev',
        'less:dev',
        'copy:dev',
        'copy:devTests',
        'coffee:dev',
        'jade:dev'
    ]);
};

当我查看sails-linker.js任务并看到有多少目标时,我意识到了这一点。我一直在考虑将目标作为构建目标,并假设它们具有dev,test,prod等值,但似乎它们是一个更广泛的概念,我可能想要做的每种类型的副本应该是副本中的目标.js任务。