突然 grunt 构建失败

3

我习惯于成功地完成grunt build 任务,但自从我将我的项目编辑与另一位开发同事的一些内容合并后,它突然失败了,并出现了一个我以前从未见过的错误:

grunt build
Loading "imagemin.js" tasks...ERROR
>> Error: Cannot find module 'process-nextick-args'
Loading "cdnify.js" tasks...ERROR
>> Error: Cannot find module 'abbrev'
Loading "grunt-karma.js" tasks...ERROR
>> Error: Cannot find module 'uglify-js'

Running "clean:dist" (clean) task
>> 0 paths cleaned.

Running "wiredep:app" (wiredep) task
Warning: Cannot find module './lang/clone' Use --force to continue.

Aborted due to warnings.


Execution Time (2015-09-25 09:44:30 UTC)
wiredep:app  31ms
Total 31ms

在Gruntfile.js中,我在concurrent:distbuild 任务中注释掉了imagemincdnify

我做错了什么?

这里有一些关于我使用的软件版本信息:

node -v && npm -v && grunt --version
v0.10.35
2.1.1
grunt-cli v0.1.13
grunt v0.4.5

另外,在运行grunt build之前,我尝试运行了npm install,但是出现了一些警告,这些警告我以前从未见过,除了其中的三个。

npm WARN package.json rwui@0.0.0 No description
npm WARN package.json rwui@0.0.0 No repository field.
npm WARN package.json rwui@0.0.0 No README data
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-contrib-imagemin\node_modules\imagemin\node_modules\vinyl-fs\node_modules\glob-watcher\node_modules\gaze\node_modules\globule\node_modules\glob requires graceful-fs@'~1.2.0' but will load
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-contrib-imagemin\node_modules\imagemin\node_modules\vinyl-fs\node_modules\graceful-fs,
npm WARN unmet dependency which is version 3.0.8
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-contrib-imagemin\node_modules\imagemin\node_modules\imagemin-gifsicle\node_modules\gifsicle\node_modules\bin-build\node_modules\download\node_modules\gulp-decompress\node_modules\gulp-util requires object-assign@'^3.0.0' but will load
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-contrib-imagemin\node_modules\imagemin\node_modules\imagemin-gifsicle\node_modules\gifsicle\node_modules\bin-build\node_modules\download\node_modules\object-assign,
npm WARN unmet dependency which is version 4.0.1
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-contrib-imagemin\node_modules\imagemin\node_modules\imagemin-gifsicle\node_modules\gifsicle\node_modules\bin-wrapper\node_modules\download\node_modules\gulp-decompress\node_modules\gulp-util requires object-assign@'^3.0.0' but will load
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-contrib-imagemin\node_modules\imagemin\node_modules\imagemin-gifsicle\node_modules\gifsicle\node_modules\bin-wrapper\node_modules\download\node_modules\object-assign,
npm WARN unmet dependency which is version 4.0.1
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-contrib-imagemin\node_modules\imagemin\node_modules\imagemin-jpegtran\node_modules\jpegtran-bin\node_modules\bin-build\node_modules\download\node_modules\gulp-decompress\node_modules\gulp-util requires object-assign@'^3.0.0' but will load
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-contrib-imagemin\node_modules\imagemin\node_modules\imagemin-jpegtran\node_modules\jpegtran-bin\node_modules\bin-build\node_modules\download\node_modules\object-assign,
npm WARN unmet dependency which is version 4.0.1
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-contrib-imagemin\node_modules\imagemin\node_modules\imagemin-jpegtran\node_modules\jpegtran-bin\node_modules\bin-wrapper\node_modules\download\node_modules\gulp-decompress\node_modules\gulp-util requires object-assign@'^3.0.0' but will load
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-contrib-imagemin\node_modules\imagemin\node_modules\imagemin-jpegtran\node_modules\jpegtran-bin\node_modules\bin-wrapper\node_modules\download\node_modules\object-assign,
npm WARN unmet dependency which is version 4.0.1
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-contrib-imagemin\node_modules\imagemin\node_modules\imagemin-optipng\node_modules\optipng-bin\node_modules\bin-build\node_modules\download\node_modules\gulp-decompress\node_modules\gulp-util requires object-assign@'^3.0.0' but will load
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-contrib-imagemin\node_modules\imagemin\node_modules\imagemin-optipng\node_modules\optipng-bin\node_modules\bin-build\node_modules\download\node_modules\object-assign,
npm WARN unmet dependency which is version 4.0.1
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-contrib-imagemin\node_modules\imagemin\node_modules\imagemin-optipng\node_modules\optipng-bin\node_modules\bin-wrapper\node_modules\download\node_modules\gulp-decompress\node_modules\gulp-util requires object-assign@'^3.0.0' but will load
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-contrib-imagemin\node_modules\imagemin\node_modules\imagemin-optipng\node_modules\optipng-bin\node_modules\bin-wrapper\node_modules\download\node_modules\object-assign,
npm WARN unmet dependency which is version 4.0.1
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-google-cdn\node_modules\bower\node_modules\inquirer\node_modules\chalk\node_modules\has-ansi requires ansi-regex@'^0.2.0' but will load
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-google-cdn\node_modules\bower\node_modules\inquirer\node_modules\ansi-regex,
npm WARN unmet dependency which is version 1.1.1
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-google-cdn\node_modules\bower\node_modules\inquirer\node_modules\chalk\node_modules\strip-ansi requires ansi-regex@'^0.2.1' but will load
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-google-cdn\node_modules\bower\node_modules\inquirer\node_modules\ansi-regex,
npm WARN unmet dependency which is version 1.1.1
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-google-cdn\node_modules\google-cdn\node_modules\bower requires chalk@'0.5.0' but will load
npm WARN unmet dependency C:\Users\gesposito\Documents\Developer\Software\Production\reportmed\api_ui\node_modules\grunt-google-cdn\node_modules\chalk,
npm WARN unmet dependency which is version 0.5.1

编辑

我在这里留下了我package.json的相关部分:

  "devDependencies": {
    "grunt": "^0.4.5",
    "grunt-autoprefixer": "^2.1.0",
    "grunt-concurrent": "^1.0.0",
    "grunt-contrib-clean": "^0.6.0",
    "grunt-contrib-compass": "^1.0.1",
    "grunt-contrib-concat": "^0.5.0",
    "grunt-contrib-connect": "^0.9.0",
    "grunt-contrib-copy": "^0.7.0",
    "grunt-contrib-cssmin": "^0.11.0",
    "grunt-contrib-htmlmin": "^0.3.0",
    "grunt-contrib-imagemin": "^0.9.2",
    "grunt-contrib-jshint": "^0.10.0",
    "grunt-contrib-uglify": "^0.7.0",
    "grunt-contrib-watch": "^0.6.1",
    "grunt-filerev": "^2.1.2",
    "grunt-google-cdn": "^0.4.3",
    "grunt-karma": "^0.10.1",
    "grunt-newer": "^1.1.0",
    "grunt-ng-annotate": "^0.8.0",
    "grunt-svgmin": "^2.0.0",
    "grunt-usemin": "^3.0.0",
    "grunt-wiredep": "^2.0.0",
    "jasmine-core": "^2.2.0",
    "jshint-stylish": "^1.0.0",
    "karma": "^0.12.31",
    "karma-chrome-launcher": "^0.1.8",
    "karma-jasmine": "^0.3.5",
    "karma-phantomjs-launcher": "^0.1.4",
    "load-grunt-tasks": "^2.0.0",
    "time-grunt": "^1.0.0"
  },
  "engines": {
    "node": ">=0.10.0"
  },
  "scripts": {
    "test": "grunt test"
  }

请记住,我的同事的package.json与我的没有任何区别。

你的 package.json 文件中是否列出了三个任务(imagemin、cdnify 和 grunt-karma)中出现的错误? - Xavier Priour
1
我其实也遇到了同样的问题。尝试拉取项目,运行了npm install / bower install,但它根本无法运行... - Mark Pieszak - Trilon.io
2个回答

6
看起来你的npm模块已经过时/混合 - 你是否与同事合并了"your node_modules"文件夹?
无论如何,我建议删除你本地的node_modules目录,然后重新运行“npm install”。
一旦你稳定下来,正确的工作流程应该是:
  • node_modules 不应该在源代码控制中
  • 当你第一次得到这个项目时,运行 npm install 来设置本地的 node_modules
  • 然后你只需要在 package.json 更改时操作它
  • 在这种情况下,你运行 npm update 来在本地安装新版本

如果我删除 node_modules,看起来一切都正常,但这意味着我必须在每次构建之前从头删除并生成 node_modules,这是浪费时间和资源。我该如何告诉 npm 只安装与我的同事冲突的合并模块(这应该解决冲突,并让我受益),请问有什么方法吗? - Gargaroz
只有当您的 package.json 发生更改时,才会更改 node_modules 文件夹。当发生更改时,您可以要求 npm 仅更新更改的内容。我已使用正确的工作流程编辑了我的答案。 - Xavier Priour
问题在于,package.json只列出了最低版本,因此即使它没有更改,但是如果您的同事进行了npm更新并在node_modules中获得了更新版本,然后您将其与自己的合并,任何事情都可能发生。这就是为什么您不应该合并node_modules。如果您的问题已解决,您可以关闭问题吗? - Xavier Priour

0

执行 install grunt-google-cd@0.3.0

安装版本0.3.0,因为有一些组件在更新的版本中已经不存在了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接