我正在尝试在 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/