在Sails.js中使用load-grunt-config
上下文
我已经写了一些咕噜的任务,我想用一个我在Sails.js中编写的新项目来使用它们。
使用Sails.js,你可以添加一个JS文件到/tasks/register
文件夹来增加额外的grunt任务。 在我们添加文件之前,让我们来讨论一下这个问题。
问题
帆不会抬起。 debugging器显示:
debug: -------------------------------------------------------- error: ** Grunt :: An error occurred. ** error: ------------------------------------------------------------------------ ERROR >> Unable to process task. Warning: Required config property "clean.dev" missing.
有问题的问题显然是咕噜,所以然后我尝试grunt build
(自动运行与sails lift
):
Running "clean:dev" (clean) task Verifying property clean.dev exists in config...ERROR >> Unable to process task. Warning: Required config property "clean.dev" missing. Use --force to continue.
由此,我已经认识到这是一个path问题。 我们来看看我添加的文件。
/tasks/register/customTask.js
这里的任务加载load-grunt-config ,这是我的问题的来源:
module.exports = function(grunt) { // measures the time each task takes require('time-grunt')(grunt); // This require statement below causes my issue require('load-grunt-config')(grunt, { config: '../../package.json', scope: 'devDependencies', overridePath: require('path').join(process.cwd(), '/asset-library/grunt') }); grunt.registerTask('customTask', [ 'newer:jshint', 'newer:qunit', 'newer:concat', 'newer:cssmin', 'newer:uglify' ]); };
我假设使用overridePath
而不是configPath
将解决我的问题,但是,唉,这不是那么简单。 有什么办法让我可以使用我自己的自定义任务文件夹的load-grunt-config
像我在其他项目中做的,或者有一些神奇的条件,我可以包装require
语句?
我只需要它运行与grunt customTask
,而不是运行与grunt *
(别的)。
好吧,这其实很简单。 我所要做的就是改变我的customTask.js文件中的grunt.registerTask
调用:
grunt.registerTask('customTask', [ 'newer:jshint', 'newer:qunit', 'newer:concat', 'newer:cssmin', 'newer:uglify' ]);
对此:
grunt.registerTask('customTask', 'My custom tasks', function() { // The require statement is only run with "grunt customTask" now! require('load-grunt-config')(grunt, { config: '../../package.json', scope: 'devDependencies', overridePath: require('path').join(process.cwd(), '/asset-library/grunt') }); grunt.task.run([ 'newer:jshint', 'newer:qunit', 'newer:concat', 'newer:cssmin', 'newer:uglify' ]); });
如果不清楚,我不得不移动require('load-grunt-config')
调用,所以如果你复制粘贴,确保删除grunt.registerTask
调用之外的require语句。
你可以在这里find更多关于定制Grunt任务的信息 。