2013-10-02 16 views
16

sto ottenendo questo strano errore nel tentativo di eseguire grugnito: TypeError: Object Gruntfile.js has no method 'flatten'Ottenere un errore strano con grugnito: Oggetto Gruntfile.js non ha un metodo 'appiattire'

Sono nuovo di node.js, NPM, grugnito, ecc. Pensavo di aver fatto un'installazione decente di nodo, npm, grugnito ma potrebbe essermi perso qualcosa. C'è un modo per verificare l'installazione ??

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

La linea incriminata/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; 
}; 

uscita di 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 

uscita di 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] 
│ ├─┬ [email protected] 
│ │ └─┬ [email protected] 
│ │ └── [email protected] 
│ └── [email protected] 
└─┬ [email protected] 
    └── [email protected] 

uscita di 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" 
    } 
} 

uscita di 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

Potete si prega di inviare l'intero contenuto di quella linea incriminata (findup-sync.js: 33) – ksimons

+0

@ksimons Grazie per aver seguito Questo. ho postato la riga incriminata + altre informazioni che potrebbero essere utili – necromancer

+0

@ksimons qualche altra informazione: gruntfile.js e package.json – necromancer

risposta

9

Come è stato scritto in https://github.com/gruntjs/grunt/issues/888dist nel vostro .gitignore

Speranza che aiuta

+0

+1 grazie, questa sembra essere la risposta corretta – necromancer

+0

Per chiarire: non mettere semplicemente 'dist' nel tuo .gitignore. Metti qualcosa di specifico come hai bisogno di essere. Per me, era './Dist /' –

2

Che assomiglia a uno dei moduli grugnito sta cercando di utilizzare underscore.js, ma non è installato. Questo dovrebbe risolvere il problema:

npm install underscore 

O, meglio ancora, aggiungere sottolineatura come una dipendenza di sviluppo nel vostro package.json:

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

non ha aiutato, ma +1 in ogni caso – necromancer

+0

Provate a installarlo globalmente con: npm install -g underscore – ksimons

+0

@ksmimons non ha funzionato neanche .. – necromancer

19

provare a reinstallare i moduli di nodo.

  1. eliminare la cartella node_modules
  2. Non npm cache clean
  3. fare npm install

Speranza che aiuta :)

+0

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

Problemi correlati