用grunt得到一个奇怪的错误:Object Gruntfile.js没有方法'flatten'

我得到这个奇怪的错误试图运行grunt: TypeError: Object Gruntfile.js has no method 'flatten'

我是node.js,npm,grunt等的新手。我以为我做了一个像样的安装节点,npm,咕噜,但可能是我错过了一些东西。 有没有办法validation安装?

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

有问题的行/文件:

 /* * 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; }; 

ls -l node_modules/输出:

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

npm list输出:

 $ npm list prepscholar@0.0.0 /home/a/prep/main/web/client ├─┬ grunt@0.4.1 │ ├── async@0.1.22 │ ├── coffee-script@1.3.3 │ ├── colors@0.6.2 │ ├── dateformat@1.0.2-1.2.3 │ ├── eventemitter2@0.4.13 │ ├─┬ findup-sync@0.1.2 │ │ └── lodash@1.0.1 │ ├─┬ glob@3.1.21 │ │ ├── graceful-fs@1.2.3 │ │ └── inherits@1.0.0 │ ├── hooker@0.2.3 │ ├── iconv-lite@0.2.11 │ ├─┬ js-yaml@2.0.5 │ │ ├─┬ argparse@0.1.15 │ │ │ ├── underscore@1.4.4 │ │ │ └── underscore.string@2.3.3 │ │ └── esprima@1.0.4 │ ├── lodash@0.9.2 │ ├─┬ minimatch@0.2.12 │ │ ├── lru-cache@2.3.1 │ │ └── sigmund@1.0.0 │ ├─┬ nopt@1.0.10 │ │ └── abbrev@1.0.4 │ ├─┬ rimraf@2.0.3 │ │ └── graceful-fs@1.1.14 │ ├── underscore.string@2.2.1 │ └── which@1.0.5 ├─┬ grunt-contrib-compass@0.5.0 │ ├── async@0.2.9 │ ├── dargs@0.1.0 │ └── tmp@0.0.21 ├─┬ grunt-contrib-jshint@0.6.4 │ └─┬ jshint@2.1.10 │ ├─┬ cli@0.4.5 │ │ └─┬ glob@3.2.6 │ │ └── inherits@2.0.1 │ ├── console-browserify@0.1.6 │ ├─┬ minimatch@0.2.12 │ │ ├── lru-cache@2.3.1 │ │ └── sigmund@1.0.0 │ ├── shelljs@0.1.4 │ └── underscore@1.4.4 ├─┬ grunt-contrib-watch@0.5.3 │ ├─┬ gaze@0.4.2 │ │ └─┬ globule@0.1.0 │ │ ├─┬ glob@3.1.21 │ │ │ ├── graceful-fs@1.2.3 │ │ │ └── inherits@1.0.0 │ │ ├── lodash@1.0.1 │ │ └─┬ minimatch@0.2.12 │ │ ├── lru-cache@2.3.1 │ │ └── sigmund@1.0.0 │ └─┬ tiny-lr@0.0.4 │ ├── debug@0.7.2 │ ├── faye-websocket@0.4.4 │ ├─┬ noptify@0.0.3 │ │ └─┬ nopt@2.0.0 │ │ └── abbrev@1.0.4 │ └── qs@0.5.6 └─┬ grunt-dustjs@1.1.1 └── dustjs-linkedin@2.0.3 

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

cat Gruntfile.js输出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']); }; 

正如你在.gitignore中写的https://github.com/gruntjs/grunt/issues/888 dist

希望有所帮助

发现这个工作,按照https://github.com/gruntjs/grunt/issues/888

 rm -rf node_modules/grunt npm install grunt 

这也应该工作。

尝试重新安装节点模块。

  1. 删除node_modules文件夹
  2. npm cache clean
  3. npm install

希望能帮助到你 :)

这看起来像你的grunt模块之一是试图使用underscore.js,但它没有安装。 这应该解决你的问题:

 npm install underscore 

或者甚至更好,在你的package.json中添加下划线作为开发依赖:

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