

npm install时报错Failed at the [email protected] postinstall script的问题及解决
source link: https://wiki.eryajf.net/pages/55b858/#%E6%96%B9%E6%A1%88%E4%BA%8C
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

npm install时报错Failed at the [email protected] postinstall script的问题及解决
# 问题
有需求,需要维护一个相对老的 Vue 项目,拿到项目之后,自然是先安装一下依赖,执行了 npm install
之后,看到了如下报错信息:
# 报错一
> [email protected] install /Users/eryajf/code/admin-front/node_modules/node-sass
> node scripts/install.js
Downloading binary from https://github.com/sass/node-sass/releases/download/v4.14.1/darwin-arm64-83_binding.node
Cannot download "https://github.com/sass/node-sass/releases/download/v4.14.1/darwin-arm64-83_binding.node":
HTTP error 404 Not Found
...... 有裁剪
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] postinstall: `node scripts/build.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
# 报错二
gyp verb check python checking for Python executable "python2" in the PATH
gyp verb `which` failed Error: not found: python2
gyp verb `which` failed at getNotFoundError (/Users/eryajf/code/admin-front/node_modules/which/which.js:13:12)
gyp verb `which` failed at F (/Users/eryajf/code/admin-front/node_modules/which/which.js:68:19)
gyp verb `which` failed at E (/Users/eryajf/code/admin-front/node_modules/which/which.js:80:29)
gyp verb `which` failed at /Users/eryajf/code/admin-front/node_modules/which/which.js:89:16
gyp verb `which` failed at /Users/eryajf/code/admin-front/node_modules/isexe/index.js:42:5
gyp verb `which` failed at /Users/eryajf/code/admin-front/node_modules/isexe/mode.js:8:5
gyp verb `which` failed at FSReqCallback.oncomplete (fs.js:192:21)
gyp verb `which` failed python2 Error: not found: python2
gyp verb `which` failed at getNotFoundError (/Users/eryajf/code/admin-front/node_modules/which/which.js:13:12)
gyp verb `which` failed at F (/Users/eryajf/code/admin-front/node_modules/which/which.js:68:19)
gyp verb `which` failed at E (/Users/eryajf/code/admin-front/node_modules/which/which.js:80:29)
gyp verb `which` failed at /Users/eryajf/code/admin-front/node_modules/which/which.js:89:16
gyp verb `which` failed at /Users/eryajf/code/admin-front/node_modules/isexe/index.js:42:5
gyp verb `which` failed at /Users/eryajf/code/admin-front/node_modules/isexe/mode.js:8:5
gyp verb `which` failed at FSReqCallback.oncomplete (fs.js:192:21) {
gyp verb `which` failed code: 'ENOENT'
gyp verb `which` failed }
gyp verb check python checking for Python executable "python" in the PATH
gyp verb `which` succeeded python /usr/local/bin/python
gyp ERR! configure error
gyp ERR! stack Error: Command failed: /usr/local/bin/python -c import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack File "<string>", line 1
gyp ERR! stack import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack ^
gyp ERR! stack SyntaxError: invalid syntax
gyp ERR! stack
gyp ERR! stack at ChildProcess.exithandler (child_process.js:383:12)
gyp ERR! stack at ChildProcess.emit (events.js:400:28)
gyp ERR! stack at maybeClose (internal/child_process.js:1088:16)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:296:5)
gyp ERR! System Darwin 21.6.0
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
如上报错分两个点,一个是 python 命令依赖 python2,一个是 node-saas 下载路径为 404。
网上搜索的解决方案一大堆,不过大多数都是没有效果的。
这里记录两种解决方案,针对于这个问题。
# 方案一
我用的电脑是 Mac 的 M1 版本,系统里边默认的 Python 是 v3 的版本,所以如上错误是一个随着时间推移而产生的一个问题。
可以通过如下方式安装 Python 的 v2 来解决这个问题:
brew install pyenv
pyenv install 2.7.18
pyenv global 2.7.18
将环境变量放入系统配置文件:
$ cat ~/.zshrc | grep pyenv
export PATH="$HOME/.pyenv/shims:$PATH"
然后执行命令验证一下环境:
$ python
Python 2.7.18 (default, Jan 1 2024, 10:21:04)
[GCC Apple LLVM 14.0.0 (clang-1400.0.29.201)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
2
3
4
5
看到版本为 v2 之后,再次回到项目中,执行 npm install
,发现就能成功安装依赖了。
# 方案二
从 node-sass 的角度来解决这个问题,在 node-sass 的 release 中可以看到,其并没有构建 arm 架构的二进制包,所以总是会构建失败。
但有一个方案是可以通过 sass 来替代 node-sass。
执行如下命令:
#卸载掉node-sass
npm uninstall node-sass
#安装sass
npm install sass
然后再次执行 npm install
就能成功安装依赖了。
只不过这种方案,会改变 package.json,目前还不知道会不会带来其他未可知的影响。
最后略微想吐槽一句,node 的依赖管理实在是弱。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK