记一次npm环境问题
起因
上周写完博客,本地预览时,突然报错,看了一下是 sharp.js 的问题,以为是个小场面,然后就开始了一周的痛苦修环境经历,哭了😭
Ddbug
- 首先根据提示,重新安装
1
2rm -rf node_modules/sharp
npm i sharp
此时报错:
1 | c++: error: unrecognized command line option '-stdlib=libc++' |
这个问题的本质是当前的包需要通过源码编译,而当前用的是gcc(macOS),而gcc不支持当前命令,之前装环境没有遇到过这个问题,可能是我最近跟新了gcc?
查了一下解决这个问题最简单的方式是指定c++:
1 | CXX=clang++ npm i xxx |
这次确实装成功了,走起!
此时又报新错:
1 | can not find sharp xxx |
阿嘞?装上了又找不到?why?
又尝试了全局安装,依然找不到,此时,有点上头,我干脆把node_modules全部删掉,重新装吧。
1 | rm -rf node_modules |
阿嘞?这次装也失败了,错误大致原因是node-gyp rebuild nodejieba失败。
开始以为是node-gyp的问题,后来查了一下,node-gyp是用来帮助丛源码编译的工具,所以本质上不是他的问题,还是别的问题。
又查了一下nodejieba, 有人说是在lunr.js中用的nodejieba在node高版本中会存在编译失败,建议用 node8.x ,python版本最好是2.7,那我上次没失败?先将node降级到node8, python切到2.7。
再装一次,依然失败。但是错误信息不够定位,查一下怎么看更全的日志。
1 | CXX=clang++ npm i --verbose |
此时在装,搞定!走起,又报新错:
1 | FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html |
这是缺module,但是我是npm i,为什么还缺?此时可能只是当前node_modules的问题,为了验证本机其他环境已经ok了,新建了一个博客,验证后发现本机确实OK了。
额,那就缺什么装什么吧。
1 | npm i optipng-bin |
走起!一切正常!此时我的心情就好比火箭发射成功一样。折磨了一周的环境问题,终于搞定了,中间还有许多其他方向的试探,但都记不得了。- -!
结论
- npm 失败后,可以加 –verbose 参数查看详细日志,定位问题。
- 编译源码可能你还需要装xcode-select --install
- 对于 Error: spawn .../node_modules/xxx/vendor/.. ENOENT,单独安装一下对应缺失module即可。
- node-gyp 和 libvips可能也会影响,建议重装一次
- MacOS中,可能会gcc与clang并存,加上系统升级,可能导致相应版本不兼容问题。指定clang :6. 本机环境问题,可以通过
1
CXX=clang++ npm i
1
brew doctor
关于头
雪中奥森