6

npm install时报错Failed at the [email protected] postinstall script的问题及解决

 1 year ago
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.
neoserver,ios ssh client

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
1
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.
>>>
1
2
3
4
5

看到版本为 v2 之后,再次回到项目中,执行 npm install,发现就能成功安装依赖了。

参考: issue (opens new window)

# 方案二

从 node-sass 的角度来解决这个问题,在 node-sass 的 release 中可以看到,其并没有构建 arm 架构的二进制包,所以总是会构建失败。

但有一个方案是可以通过 sass 来替代 node-sass。

执行如下命令:

#卸载掉node-sass
npm uninstall node-sass
#安装sass
npm install sass

然后再次执行 npm install 就能成功安装依赖了。

只不过这种方案,会改变 package.json,目前还不知道会不会带来其他未可知的影响。

最后略微想吐槽一句,node 的依赖管理实在是弱。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK