gunhawk

gunhawk

Frontend Developer

Coding is part of my life, 加藤恵は大好き=。=

分享一次惨痛的折腾经历

作者: gunhawk时间: 2017-09-11others

项目升级webpack无法编译成功

最近撸了一个上传头像的功能, 满怀激动地跑去vps上升级, 按照原来的套路升级, 结果一次又一次地编译失败.

一开始我以为是vps日常大姨妈(webpack用于生产环境的打包貌似非常占用资源, 导致不定时会出现进程被kill的情况), 结果仔细看log, 有句提示大概如下:

Make sure you install latest node....

难道因为之前用过了8.x开发的缘故吗? 我当时是这么想的, 于是切换8.x来进行编译. 结果编译报错了. 详细错误大概如下

4 verbose stack Error: blog-react@1.0.0 build: `gulp && webpack -p`
14 verbose stack Exit status 137
14 verbose stack     at EventEmitter.<anonymous> (/root/.nvm/versions/node/v8.0.0/lib/node_modules/npm/lib/utils/lifecycle.js:283:16)
14 verbose stack     at emitTwo (events.js:125:13)
14 verbose stack     at EventEmitter.emit (events.js:213:7)
14 verbose stack     at ChildProcess.<anonymous> (/root/.nvm/versions/node/v8.0.0/lib/node_modules/npm/lib/utils/spawn.js:40:14)
14 verbose stack     at emitTwo (events.js:125:13)
14 verbose stack     at ChildProcess.emit (events.js:213:7)
14 verbose stack     at maybeClose (internal/child_process.js:887:16)
14 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:208:5)
15 verbose pkgid blog-react@1.0.0
16 verbose cwd /mypro/blog-react/client
17 verbose Linux 3.10.0-327.18.2.el7.x86_64
18 verbose argv "/root/.nvm/versions/node/v8.0.0/bin/node" "/root/.nvm/versions/node/v8.0.0/bin/npm" "run" "build"
19 verbose node v8.0.0
20 verbose npm  v5.0.0
21 error code ELIFECYCLE
22 error errno 137
23 error blog-react@1.0.0 build: `gulp && webpack -p`
23 error Exit status 137
24 error Failed at the blog-react@1.0.0 build script.

好吧, 我先重新npm install试试, 结果还是一样

删除node_modules再重新install试试, 结果同上, 于是噩梦在这里开始了...

因为8.x的npm版本是5.x的, 那我再还原回原来的环境咯. 这时候重新npm install, 总是在extract阶段就被kill了

这时我陷入了一个两难的窘境: 用8.x吧, 编译生产脚本报错(编译开发的脚本是可以的); 用6.x则是install阶段都废了

google了很久, 还是没能找到8.x为什么会编译失败, 于是我还是主攻6.x吧

直接贴出解决方案了, 要么加配置要么加swap, 穷屌只能选择swap了

最后再说明一下, 我也尝试过切换代码到原来的版本, 不管是8.x还是6.x是可以顺利编译的, 但是新的代码在我的windows机器上是可以顺利编译出来了, 但是在centos7下就不行, 哎!!!

关于npm5.x在windows

我也尝试删除node_modules后使用npm5.x来重新安装我的依赖包, 结果发现有些旧的依赖包编译的时候提示缺少模块了. 原因未明