sails.js 无法识别新任务

Grunt in sails.js failing to recognise new task

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

为了保持我的测试用例简单,我将复制任务复制到一个新文件 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'
    ]);
};

当我尝试升起风帆应用程序时,我得到 'Task "copy-tests:dev" not found'

我知道 g运行t 可以看到我的文件,因为我已将日志语句添加到 Gruntfile.js,如下所示

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

当这条语句记录时,我可以在其他任务中看到 copy-tests

任何人都可以帮助解释为什么 g运行t 声称找不到 copy-tests:dev 吗?

或者,也许我的做法不对。我想要实现的是有两个复制任务,一个是将我的主要构建内容复制到 .tmp 文件夹,另一个是将我的客户端测试复制到 .tmp 文件夹。稍后我将确保只有我的开发人员构建 运行 两个复制任务,我的产品只会 运行 第一个。我认为最好的方法是在配置文件夹中使用两个 g运行t 任务,但也许还有另一种方法...

我不需要定义第二个任务来拥有替代副本,而是需要按如下方式添加到复制任务

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 任务并看到其中有多少目标时,我意识到了这一点。我一直将目标视为构建目标,并假设它们具有开发、测试、生产等值,但它们似乎是一个更广泛的概念,我可能想做的每种类型的复制都应该是 copy.js任务。