web-dev-qa-db-ja.com

致命的なエラー:Gruntfileが見つかりません

うなり声-バージョン

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

これらのうっとうしいファイルの1つを/ ex/co/www/dev/htdocs/unittest(Javascript/quintテストがある)にコピーできますか?それとも、私が行方不明になっている何か他のものがありますか?

Centos 6.4でイサキを実行しようとしています。また、なぜgrunt initGruntfile.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());
  });

};
12
kamal

あなたが探しているのは、 Project Scaffolding ドキュメンテーションにある実際のコマンドラインツール_grunt-init_であると思います。

現在のコマンド_grunt init_は_Gruntfile.js_とその中のタスクinitを探しています。明らかに_Gruntfile.js_が見つからないため、そのエラーがスローされます。

編集:

新しいエラーは、_Gruntfile.js_ファイルをコピーし、defaultタスク(開く場合は下部近くにあります)がそれらのモジュールを呼び出しているためです。通常、bowerのようなものを使用して、ローカルディレクトリにインストールします。

上記で参照したデフォルトのタスクは次のようになります。

_grunt.registerTask('default', ['jshint', 'qunit', 'concat', 'uglify']);
_

これは基本的に言っています:コマンドラインでgruntを実行すると、タスクjshintqunitconcatuglifyを実行しますその順序。これらのタスクは、Gruntfileで以前に指定されています。ファイルをさらに理解するには、 サンプルGruntfile を確認してください。

Yeoman をご覧になることをお勧めします。アプリの足場を提供するのに最適なツールです(作業中の_Gruntfile.js_を含む)。

編集2:

何が起こっているのかを理解することが重要です。コピーした_Gruntfile.js_は、「subgrunt」タスクを呼び出しているように見えます。つまり、サブプロジェクトのgruntタスク。これはあなたが望んでいるものですか?

_Gruntfile.js_をたどる-gruntを実行すると、_'jshint', 'nodeunit', 'subgrunt'_という順序が呼び出されます。

jshintで呼び出されるいくつかのオプションがあるので、コピーするのではなく、自分で作成するのが理想的です。 jshint documentation を読んだ場合、最初の3つのオプションについては言及していません。

このようなことを試してみるべきだと思います:

_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_プロパティを指します。

13
Ewan

これと同じエラーが発生したため、最初にnpm installを実行するだけで済みました。以前にnpmをインストールしていたのに、インストールで何かが壊れていました。迅速な再インストールが機能しました。必要なのは、次の2つのコマンドだけです。

npm install
grunt jshint
13
WEFX

Gruntファイルは、フォルダの内部ではなくルートディレクトリにある必要があります。また、スペル "Gruntfile.js"である必要があります。

Asp.net Core angularプロジェクトの場合、その場所は次のようになります。

enter image description here

これを行うメソッドを定義するまで、このファイルをClientAppまたは他の場所に配置しても機能しません。

0

同様の問題があり、以下のコマンドを使用しましたが、うまくいきました

grunt -f 
grunt server

それがあなたにも役立つことを願っています.

0
darhamid