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

标签 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'
    ]);
};

当我尝试抬起 sails 应用程序时,我收到“找不到任务“copy-tests:dev””

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

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

当此语句记录时,我可以在其他任务中看到复制测试

任何人都可以帮忙解释为什么 grunt 声称找不到 copy-tests:dev 吗?

或者,也许我的处理方式是错误的。我想要实现的是有两个复制任务,一个将我的主要构建内容复制到 .tmp 文件夹,第二个将我的客户端测试复制到 .tmp 文件夹。稍后我将确保只有我的开发版本运行这两个复制任务,我的产品版本只会运行第一个任务。我认为最好的方法是在配置文件夹中使用两个 grunt 任务,但也许还有另一种方法......

最佳答案

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

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 任务。

关于javascript - sails.js 中的 Grunt 无法识别新任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33791567/

相关文章:

java - 在弹出窗口中获取值

javascript - grunt-concat 分隔符选项?

php - 如何在PHP项目中使用grunt-usemin?

node.js - sails.js(v0.11) openshift 需要的墨盒

javascript - 删除任何记录时出现 Sails.js 错误问题

javascript - 什么更有效率 : listeners or functions in jquery

javascript - 使用 Javascript AJAX 发布请求调用任何 PHP 函数

gruntjs - grunt-contrib-jshint 不会提示 console.log

sails.js - HTML PUT sails-filemaker

javascript - javascript 中的正则表达式,格式非常特殊