我正在尝试在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任务,但也许有另一种方式......
答案 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任务。