2013-10-02 6 views
16

Ich erhalte diese seltsame Fehler versucht Grunzen auszuführen: TypeError: Object Gruntfile.js has no method 'flatten'Wie Sie einen seltsamen Fehler mit Grunzen: Object Gruntfile.js keine Methode ‚abzuflachen‘ hat

Ich bin neu in node.js, npm, grunzen, usw. Ich dachte, ich hätte eine ordentliche Installation von Node, Npm, Grunt aber vielleicht habe ich etwas verpasst. Gibt es eine Möglichkeit, die Installation zu überprüfen?

$ cat xx 
$ grunt 

/home/cl/node_modules/grunt/node_modules/findup-sync/lib/findup-sync.js:33 
    }).flatten().uniq().value(); 
    ^
TypeError: Object Gruntfile.js has no method 'flatten' 
    at Object.module.exports [as findup] (/home/cl/node_modules/grunt/node_modules/findup-sync/lib/findup-sync.js:33:8) 
    at Task.task.init (/home/cl/node_modules/grunt/lib/grunt/task.js:414:16) 
    at Object.grunt.tasks (/home/cl/node_modules/grunt/lib/grunt.js:113:8) 
    at Object.module.exports [as cli] (/home/cl/node_modules/grunt/lib/grunt/cli.js:38:9) 
    at Object.<anonymous> (/usr/lib/node_modules/grunt-cli/bin/grunt:41:20) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 

Die Codezeile/file:

/* 
* findup-sync 
* https://github.com/cowboy/node-findup-sync 
* 
* Copyright (c) 2013 "Cowboy" Ben Alman 
* Licensed under the MIT license. 
*/ 

'use strict'; 

// Nodejs libs. 
var path = require('path'); 

// External libs. 
var glob = require('glob'); 
var _ = require('lodash'); 

// Search for a filename in the given directory or all parent directories. 
module.exports = function(patterns, options) { 
    // Normalize patterns to an array. 
    if (!Array.isArray(patterns)) { patterns = [patterns]; } 
    // Create globOptions so that it can be modified without mutating the 
    // original object. 
    var globOptions = Object.create(options || {}); 
    globOptions.maxDepth = 1; 
    globOptions.cwd = path.resolve(globOptions.cwd || '.'); 

    var files, lastpath; 
    do { 
    // Search for files matching patterns. 
    files = _(patterns).map(function(pattern) { 
     return glob.sync(pattern, globOptions); 
    }).flatten().uniq().value(); // <--------- OFFENDING LINE 
    // Return file if found. 
    if (files.length > 0) { 
     return path.resolve(path.join(globOptions.cwd, files[0])); 
    } 
    // Go up a directory. 
    lastpath = globOptions.cwd; 
    globOptions.cwd = path.resolve(globOptions.cwd, '..'); 
    // If parentpath is the same as basedir, we can't go any higher. 
    } while (globOptions.cwd !== lastpath); 

    // No files were found! 
    return null; 
}; 

Ausgabe von ls -l node_modules/:

$ ls -l node_modules/ 
total 20 
drwxrwxr-x. 6 a a 4096 Oct 2 00:42 grunt 
drwxrwxr-x. 4 a a 4096 Oct 2 00:42 grunt-contrib-compass 
drwxrwxr-x. 6 a a 4096 Oct 2 00:42 grunt-contrib-jshint 
drwxrwxr-x. 6 a a 4096 Oct 2 00:42 grunt-contrib-watch 
drwxrwxr-x. 4 a a 4096 Oct 2 00:42 grunt-dustjs 

Ausgabe von npm list:

$ npm list 
[email protected] /home/a/prep/main/web/client 
├─┬ [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├─┬ [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ ├── [email protected] 
│ ├── [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ └─┬ [email protected] 
│ ├─┬ [email protected] 
│ │ └─┬ [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ ├─┬ [email protected] 
│ │ ├── [email protected] 
│ │ └── [email protected] 
│ ├── [email protected] 
│ └── [email protected] 
├─┬ [email protected] 
│ ├─┬ [email protected] 
│ │ └─┬ [email protected] 
│ │ ├─┬ [email protected] 
│ │ │ ├── [email protected] 
│ │ │ └── [email protected] 
│ │ ├── [email protected] 
│ │ └─┬ [email protected] 
│ │  ├── [email protected] 
│ │  └── [email protected] 
│ └─┬ [email protected] 
│ ├── [email protected] 
│ ├── [email protected].4 
│ ├─┬ [email protected] 
│ │ └─┬ [email protected] 
│ │ └── [email protected] 
│ └── [email protected] 
└─┬ [email protected] 
    └── [email protected] 

Ausgabe von cat package.json:

$ cat package.json 
{ 
    "name": "prepscholar", 
    "version": "0.0.0", 
    "devDependencies": { 
    "grunt": "~0.4.1", 
    "grunt-contrib-jshint": "~0.6.4", 
    "grunt-dustjs": "~1.1.1", 
    "grunt-contrib-watch": "~0.5.3", 
    "grunt-contrib-compass": "~0.5.0" 
    } 
} 

Ausgabe von cat Gruntfile.js:

$ cat Gruntfile.js 

module.exports = function(grunt) { 

    grunt.initConfig({ 
    pkg: grunt.file.readJSON('package.json'), 
    jshint: { 
     files: ['Gruntfile.js', 'app/js/**/*.js', '!app/js/lib/**/*.js'] 
    }, 
    dustjs: { 
     compile: { 
     src: ['app/templates/**/*.html'], 
     dest: 'app/js/templates.js' 
     } 
    }, 
    compass: { 
     dev: { 
     options: { 
      sassDir: 'app/sass', 
      cssDir: 'app/css', 
      imagesDir: 'app/img', 
      fontsDir: 'app/fonts', 
      javascriptsDir: 'app/js/app', 
      outputStyle: 'compressed' 
     } 
     } 
    }, 
    watch: { 
     gruntfile: { 
     files: 'Gruntfile.js', 
     tasks: ['compile'] 
     }, 
     css: { 
     files: 'app/sass/**/*.scss', 
     tasks: ['compass:dev'] 
     }, 
     livereload: { 
     options: { livereload: true }, 
     files: ['app/css/**/*'] 
     }, 
     dust: { 
     files: 'app/templates/**/*.html', 
     tasks: ['dustjs'] 
     } 
    } 
    }); 

    grunt.loadNpmTasks('grunt-contrib-jshint'); 
    grunt.loadNpmTasks('grunt-contrib-compass'); 
    grunt.loadNpmTasks('grunt-contrib-watch'); 
    grunt.loadNpmTasks('grunt-dustjs'); 
    grunt.loadNpmTasks('underscore'); 

    grunt.registerTask('default', ['compile', 'watch']); 
    grunt.registerTask('compile', ['dust', 'compass']); 
    grunt.registerTask('dust', ['dustjs']); 
    grunt.registerTask('lint', ['jshint']); 
}; 
+0

hilft Können Sie bitte den gesamten Inhalt dieser Codezeile (findup-sync.js: 33) abgeben – ksimons

+0

@ksimons Dank für folgende Dies. Ich habe die Codezeile + andere Informationen geschrieben, die – necromancer

+0

@ksimons einige weitere Informationen nützlich sein könnten: gruntfile.js und package.json – necromancer

Antwort

9

Wie in https://github.com/gruntjs/grunt/issues/888dist in Ihrem .gitignore

Hoffnung geschrieben, die

+0

+1 Danke, das scheint die richtige Antwort zu sein – necromancer

+0

Um zu verdeutlichen: nicht einfach "dist" in Ihrem .gitignore. Setzen Sie etwas so spezifisch wie Sie es brauchen. Für mich war es "./Dist /' –

2

, die wie eine Ihrer Grunzen Module sieht versucht underscore.js zu verwenden, aber es ist nicht installiert. Dies sollte Ihr Problem beheben:

npm install underscore 

Oder noch besser, fügen Sie Strich als Entwicklungs Abhängigkeit in Ihrem package.json:

{ 
    <your existing stuff here> 
    "devDependencies": { 
    "underscore": "~1.5.2" 
    } 
} 
+0

es half nicht, aber ein ohnehin – necromancer

+0

Probieren sie es global mit der Installation: npm installieren -g unterstreichen – ksimons

+0

@ksmimons auch nicht .. – necromancer

19

Versuchen Sie Knotenmodule neu zu installieren.

  1. den node_modules Ordner löschen
  2. Sie npm cache clean
  3. npm install

hoffen, es hilft :)

+0

rm -rf node_modules && npm cache sauber && npm i –

Verwandte Themen