我正在尝试将现有的Grunt文件转换为更小的文件,以使概览更容易。但是我碰到了一个凹凸。我正在使用bower.install来安装我的项目依赖项。 我的文件夹结构如下所示:
package.json
bower.json
config
--install.js
--default.js //Empty for now
gruntfile.js
我的Gruntfile现在看起来像这样:
'use strict';
module.exports = function(grunt) {
var npmDependencies = require('./package.json').devDependencies;
require('load-grunt-tasks')(grunt);
var configs = {
config : {
paths : {
"build" : ["grunts/*.js*", "package.json", "bower.json", "Gruntfile.js"],
}
}
};
var loadConfigs = require( 'load-grunt-configs' );
configs = loadConfigs( grunt, configs );
// Project configuration.
grunt.initConfig( configs );
}
我的install.js看起来像这样:
module.exports = function(grunt) {
var done = grunt.async();
var bower = require('bower').commands;
bower.install().on('end', function(data) {
done();
}).on('data', function(data) {
console.log(data);
}).on('error', function(err) {
console.error(err);
done();
});
}
然而,这不起作用,因为我收到错误:
>> TypeError: Object #<Object> has no method 'async'
如果我删除所有async-clutter(我最终想保留),那么文件看起来要简单得多:
module.exports = function(grunt) {
var bower = require('bower').commands;
bower.install();
}
我仍然收到以下错误:
>> TypeError: Cannot call method 'hasOwnProperty' of undefined
我对这个话题相当新,到目前为止(将所有内容都放在一个文件中)它运行良好。现在的大问题:我如何回到那一点;)
答案 0 :(得分:0)
install.js
存在一些问题:
1)grunt对象不公开异步函数,这是第一个错误的原因。 async函数可用于grunt任务,因此应该从任务中调用它 2)当using node modules for configuration时, load-grunt-configs 需要一个返回对象的函数,例如:
//config/jshint.js
module.exports = function(grunt, options){
return {
gruntfile : {
src : "Gruntfile.js"
}
}
}
在你的情况下,函数不返回任何内容, load-grunt-configs 失败并出现Cannot call method 'hasOwnProperty' of undefined
错误。
以下内容应该有效:
module.exports = function(grunt) {
return grunt.registerTask("bower", function() {
var done = this.async();
var bower = require('bower').commands;
bower.install().on('end', function(data) {
done();
}).on('data', function(data) {
console.log(data);
}).on('error', function(err) {
console.error(err);
done();
});
});
}