it-swarm.com.de

Schwerwiegender Fehler: Gruntfile konnte nicht gefunden werden

grunzen - Version

grunt-cli v0.1.8
grunt v0.4.1

$ npm -v

1.2.18

$ node -v

v0.10.6

Wenn ich grunt init zum Erstellen des Gruntfile.js starte, erhalte ich eine Fehlermeldung:

$ 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.

Ich habe nach Grunfile.js gesucht und erhalte:

/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

Kann ich einfach eine dieser grunt-Dateien nach/ex/co/www/dev/htdocs/unittest kopieren (wo der Javascript/quint-Test ist)? Oder fehlt mir noch etwas?

Ich versuche auf Centos 6.4 grunzig zu sein. Warum erstellt grunt init auch nicht den Gruntfile.js?

cp /root/.npm/grunt/0.4.1/package/Gruntfile.js /ex/co/www/dev/htdocs/unittest/

Ich habe es AS-IS kopiert und jetzt bekomme ich bessere Fehler:

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.

modusfortschritt ....

grunt 
Running "jshint:gruntfile" (jshint) task
Warning: Cannot call method 'forEach' of undefined Use --force to continue.

Aborted due to warnings.
[email protected] /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.

Meine 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());
  });

};
11
kamal

Ich denke, was Sie suchen, ist das eigentliche Befehlszeilentool grunt-init, das in der Dokumentation Project Scaffolding zu finden ist.

Ihr aktueller Befehl grunt init sucht nach einem Gruntfile.js und der Aufgabe init darin. Es ist offensichtlich nicht möglich, Ihren Gruntfile.js zu finden, so dass dieser Fehler ausgegeben wird.

Bearbeiten:

Ihr neuer Fehler liegt darin, dass Sie eine Gruntfile.js-Datei kopiert haben und die default-Task (die sich unten befindet, wenn Sie sie öffnen möchten) diese Module aufruft. Normalerweise haben Sie etwas wie bower verwendet, um sie in Ihrem lokalen Verzeichnis zu installieren.

Ihre Standardaufgabe, auf die ich oben hingewiesen habe, sieht etwa so aus:

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

Dies bedeutet im Wesentlichen: Wenn ich grunt in der Befehlszeile ausführen, führen Sie die Aufgaben jshint, qunit, concat und uglify in dieser Reihenfolge aus. Diese Aufgaben wurden zuvor in der Gruntfile angegeben. Um die Datei besser zu verstehen, checken Sie eine sample-Gruntdatei aus.

Ich schlage Ihnen vor, einen Blick auf Yeoman zu werfen, da es ein großartiges Werkzeug ist, um Ihnen ein Gerüst für Ihre Apps zur Verfügung zu stellen (einschließlich eines funktionierenden Gruntfile.js).

Edit 2:

Es ist wichtig, dass Sie verstehen, was passiert. Der Gruntfile.js, den Sie kopiert haben, sieht so aus, dass er "Subgrunt" -Tasks aufruft. grunt Aufgaben in Unterprojekten. Ist es das, was du willst?

Wenn Sie Gruntfile.js ausführen, wird beim Aufruf von grunt die folgende Reihenfolge aufgerufen: 'jshint', 'nodeunit', 'subgrunt'.

Idealerweise möchten Sie dies selbst schreiben, anstatt es zu kopieren, da einige Optionen von jshint aufgerufen werden, mit denen ich nicht vertraut bin. Wenn Sie die jshint-Dokumentation lesen, werden die ersten drei Optionen nicht erwähnt.

Ich denke, du solltest so etwas versuchen:

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']
  }
}

Sie sollten die Dokumentation für jede Aufgabe durchlesen und sicherstellen, dass Sie die Optionen verstehen, die Sie durchlaufen. 

Noch ein Hinweis. Wenn Sie einen Dateiverweis wie folgt sehen:

 <%= jshint.gruntfile %>

Dies ist ein Verweis auf eine bestimmte Datei/Eigenschaft in Gruntfile.js. In diesem Fall stammt diese von der watch-Task und zeigt auf die jshint.gruntfile-Eigenschaft als zu überwachende Datei. 

12
Ewan

Ich hatte den gleichen Fehler, und es stellte sich heraus, dass ich zunächst nur npm installieren musste. Obwohl ich npm bereits zuvor installiert hatte, wurde durch die Installation etwas beschädigt. Eine schnelle Neuinstallation hat funktioniert; Alles was ich brauchte waren diese zwei Befehle:

npm install
grunt jshint
13
WEFX

Die Grunt-Datei sollte sich im Stammverzeichnis befinden und nicht irgendwo in einem Ordner. Außerdem sollte sie "Gruntfile.js" lauten.

Beispiel

Im Falle von asp.net Core angular project sollte sein Standort sein.

enter image description here

Es funktioniert nicht, wenn Sie diese Datei in ClientApp oder an einem anderen Ort ablegen, bis Sie eine Methode dafür definiert haben.

0

Ich hatte ein ähnliches Problem, ich verwendete die folgenden Befehle und es funktionierte für mich

grunt -f 
grunt server

Ich hoffe es funktioniert auch für dich. 

0
darhamid