【发布时间】:2015-11-18 22:20:46
【问题描述】:
我正在尝试在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 应用程序时,我得到'Task "copy-tests:dev" not found'
我知道 grunt 可以看到我的文件,因为我在 Gruntfile.js 中添加了一条日志语句,如下所示
var taskConfigurations = loadTasks('./tasks/config'),
registerDefinitions = loadTasks('./tasks/register');
console.log(taskConfigurations);
当此语句记录时,我可以在其他任务中看到复制测试
谁能帮助解释为什么 grunt 声称它找不到 copy-tests:dev ?
另外,也许我会以错误的方式解决这个问题。我想要实现的是有两个复制任务,一个将我的主要构建内容复制到 .tmp 文件夹,第二个将我的客户端测试复制到 .tmp 文件夹。稍后我将确保只有我的开发版本运行两个复制任务,我的生产版本只运行第一个。我认为最好的方法是在 config 文件夹中使用两个 grunt 任务,但也许还有另一种方法......
【问题讨论】:
-
您是否也在tasks/register文件夹中定义了
copy-tests? -
它是如上所述的compileAssets.js,位于tasks/register文件夹中。您认为注册文件夹中是否还有其他地方需要它?
-
编辑我的问题以使我的意图更清晰,因为我不想定义新类型的 grunt 任务,只需重用现有的任务
-
我唯一能想到的就是你调用
grunt.loadNpmTasks('grunt-contrib-copy');两次——一次用于复制任务,一次用于复制测试任务。尝试删除第二个。或者,尝试扩展复制任务,看看是否可以让它工作。 -
删除第二个 grunt.loadNpmTasks('grunt-contrib-copy');没有任何区别。请参阅我的答案以获得最终解决方案,感谢乔纳森的指点。
标签: javascript gruntjs sails.js