grunt --version
grunt-cli v0.1.8
grunt v0.4.1
$ npm -v
1.2.18
$ node -v
v0.10.6
当我运行grunt init
来创建Gruntfile.js
时,我收到错误:
$ grunt init
A valid Gruntfile could not be found. Please see the getting started guide for
more information on how to configure grunt: http://gruntjs.com/getting-started
Fatal error: Unable to find Gruntfile.
我搜索了Grunfile.js,我得到了:
/home/ka/.npm/grunt-cli/0.1.8/package/Gruntfile.js
/home/ka/tmp/npm-1464/1368671910572-0.38816986070014536/package/Gruntfile.js
/usr/local/lib/node_modules/grunt/Gruntfile.js
/usr/local/lib/node_modules/grunt/node_modules/findup-sync/Gruntfile.js
/usr/local/lib/node_modules/grunt-cli/Gruntfile.js
/usr/local/lib/node_modules/grunt-cli/node_modules/findup-sync/Gruntfile.js
/ex/co/www/dev/htdocs/unittest/node_modules/grunt/node_modules/findup-sync/Gruntfile.js
/ex/co/www/dev/htdocs/unittest/node_modules/grunt/Gruntfile.js
/root/.npm/findup-sync/0.1.2/package/Gruntfile.js
/root/.npm/grunt/0.4.1/package/Gruntfile.js
/root/.npm/grunt-cli/0.1.8/package/Gruntfile.js
我可以将其中一个grunt文件复制到/ ex / co / www / dev / htdocs / unittest(Javascript / quint测试的地方)吗?或者还有其他我想念的东西?
我正试图在Centos 6.4上运行grunt。另外,为什么不grunt init
创建Gruntfile.js
?
cp /root/.npm/grunt/0.4.1/package/Gruntfile.js /ex/co/www/dev/htdocs/unittest/
我按原样复制了它,现在我得到了更好的错误:
grunt
>> Local Npm module "grunt-contrib-jshint" not found. Is it installed?
>> Local Npm module "grunt-contrib-nodeunit" not found. Is it installed?
>> Local Npm module "grunt-contrib-watch" not found. Is it installed?
Warning: Task "jshint" not found. Use --force to continue.
Aborted due to warnings.
模式进展....
grunt
Running "jshint:gruntfile" (jshint) task
Warning: Cannot call method 'forEach' of undefined Use --force to continue.
Aborted due to warnings.
kahmed@vm-devqa01 /ex/co/www/dev/htdocs/unittest $ grunt --force
Running "jshint:gruntfile" (jshint) task
Warning: Cannot call method 'forEach' of undefined Used --force, continuing.
Warning: Cannot call method 'forEach' of undefined Used --force, continuing.
Running "jshint:libs_n_tests" (jshint) task
Warning: Cannot call method 'forEach' of undefined Used --force, continuing.
Warning: Cannot call method 'forEach' of undefined Used --force, continuing.
Running "jshint:subgrunt" (jshint) task
Warning: Cannot call method 'forEach' of undefined Used --force, continuing.
Warning: Cannot call method 'forEach' of undefined Used --force, continuing.
Running "nodeunit:all" (nodeunit) task
Warning: Cannot call method 'map' of undefined Used --force, continuing.
Warning: Cannot call method 'map' of undefined Used --force, continuing.
Running "subgrunt:all" (subgrunt) task
Warning: Cannot read property 'length' of undefined Used --force, continuing.
Warning: Cannot read property 'length' of undefined Used --force, continuing.
Done, but with warnings.
我的Gruntfile.js:
/*
* grunt
* http://gruntjs.com/
*
* Copyright (c) 2013 "Cowboy" Ben Alman
* Licensed under the MIT license.
* https://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
*/
'use strict';
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
nodeunit: {
all: ['test/{grunt,tasks,util}/**/*.js']
},
jshint: {
gruntfile: ['Gruntfile.js'],
libs_n_tests: ['lib/**/*.js', '<%= nodeunit.all %>'],
subgrunt: ['<%= subgrunt.all %>'],
options: {
curly: true,
eqeqeq: true,
immed: true,
latedef: true,
newcap: true,
noarg: true,
sub: true,
undef: true,
unused: true,
boss: true,
eqnull: true,
node: true,
es5: true
}
},
watch: {
gruntfile: {
files: ['<%= jshint.gruntfile %>'],
tasks: ['jshint:gruntfile']
},
libs_n_tests: {
files: ['<%= jshint.libs_n_tests %>'],
tasks: ['jshint:libs_n_tests', 'nodeunit']
},
subgrunt: {
files: ['<%= subgrunt.all %>'],
tasks: ['jshint:subgrunt', 'subgrunt']
}
},
subgrunt: {
all: ['test/gruntfile/*.js']
},
});
// These plugins provide necessary tasks.
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-nodeunit');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-qunit');
grunt.registerTask('test', 'qunit:src');
// "npm test" runs these tasks
grunt.registerTask('test', ['jshint', 'nodeunit', 'subgrunt']);
// Default task.
grunt.registerTask('default', ['test']);
// Run sub-grunt files, because right now, testing tasks is a pain.
grunt.registerMultiTask('subgrunt', 'Run a sub-gruntfile.', function() {
var path = require('path');
grunt.util.async.forEachSeries(this.filesSrc, function(gruntfile, next) {
grunt.util.spawn({
grunt: true,
args: ['--gruntfile', path.resolve(gruntfile)],
}, function(error, result) {
if (error) {
grunt.log.error(result.stdout).writeln();
next(new Error('Error running sub-gruntfile "' + gruntfile + '".'));
} else {
grunt.verbose.ok(result.stdout);
next();
}
});
}, this.async());
});
};
答案 0 :(得分:13)
我遇到了同样的错误,事实证明我只需要先运行npm install。虽然我之前已经安装了npm,但是安装后某些东西已经损坏了。快速重新安装工作;我只需要这两个命令:
npm install
grunt jshint
答案 1 :(得分:12)
我认为您正在寻找的是Project Scaffolding文档中的实际命令行工具grunt-init
。
您当前的命令grunt init
正在寻找Gruntfile.js
及其中的任务init
。显然无法找到您的Gruntfile.js
,因此会抛出该错误。
您的新错误是因为您复制了Gruntfile.js
文件而default
任务(如果要打开它,则位于底部附近)将调用这些模块。通常,您将使用bower
之类的东西将它们安装到本地目录中。
我上面提到的默认任务看起来像这样:
grunt.registerTask('default', ['jshint', 'qunit', 'concat', 'uglify']);
这基本上是说:当我在命令行运行grunt
时,按顺序运行任务jshint
,qunit
,concat
和uglify
。这些任务早先已在Gruntfile
中指定。要了解该文件,请查看sample Gruntfile。
我建议您查看Yeoman,因为它是为您的应用提供脚手架的好工具(包括工作Gruntfile.js
)。
了解发生的事情非常重要。您复制的Gruntfile.js
看起来就是在调用“subgrunt”任务。即子项目中的grunt
个任务。这是你想要的吗?
完成Gruntfile.js
之后 - 当您运行grunt
时,它会调用以下订单:'jshint', 'nodeunit', 'subgrunt'
。
理想情况下,你想自己写这个而不是复制它,因为我不熟悉jshint
调用的一些选项。如果您阅读jshint documentation,则不会提及前三个选项。
我认为你应该尝试这样的事情:
jshint: {
options: {
curly: true,
eqeqeq: true,
immed: true,
latedef: true,
newcap: true,
noarg: true,
sub: true,
undef: true,
unused: true,
boss: true,
eqnull: true,
node: true,
es5: true
}
files: {
src: ['path/to/your/*.js', 'another/path/to/your/*.js']
}
}
您应该仔细阅读每个任务的文档,并确保了解所传递的选项。
另一个暗示。如果您看到如下文件引用:
<%= jshint.gruntfile %>
这是对Gruntfile.js
中特定文件/属性集的引用。在这种情况下,这来自watch
任务,并指向jshint.gruntfile
属性作为要监视的文件。
答案 2 :(得分:0)
我有类似的问题,我使用了以下命令,它对我有用
grunt -f
grunt server
希望它也适合你。
答案 3 :(得分:0)
Grunt文件应位于根目录中,而不应位于文件夹内的某个位置,并且应拼写“ Gruntfile.js” 。
示例
对于asp.net Core角度项目,其位置应为
。如果您将此文件放在ClientApp或其他位置,直到您定义某种方法来执行此操作,否则将无法正常工作。
答案 4 :(得分:-1)
检查你是否正在和你一起工作 运行npm install那里可能会解决你的问题