swift
npm ERR! gyp verb `which` failed at FSReqCallback.oncomplete (node:fs:191:21) {
npm ERR! gyp verb `which` failed code: 'ENOENT'
npm ERR! gyp verb `which` failed }
npm ERR! gyp verb check python checking for Python executable "python" in the PATH
npm ERR! gyp verb `which` succeeded python F:\Python\Python310\python.EXE
npm ERR! gyp ERR! configure error
npm ERR! gyp ERR! stack Error: Command failed: F:\Python\Python310\python.EXE -c import sys; print "%s.%s.%s" % sys.version_info[:3];
npm ERR! gyp ERR! stack File "<string>", line 1
npm ERR! gyp ERR! stack import sys; print "%s.%s.%s" % sys.version_info[:3];
npm ERR! gyp ERR! stack ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
npm ERR! gyp ERR! stack SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?
npm ERR! gyp ERR! stack
npm ERR! gyp ERR! stack at ChildProcess.exithandler (node:child_process:419:12)
npm ERR! gyp ERR! stack at ChildProcess.emit (node:events:512:28)
npm ERR! gyp ERR! stack at maybeClose (node:internal/child_process:1098:16)
npm ERR! gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:304:5)
npm ERR! gyp ERR! System Windows_NT 10.0.19045
npm ERR! gyp ERR! command "F:\\nvm\\nodejs\\node.exe" "E:\\xinye\\work\\acm\\abTestDemo\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
npm ERR! gyp ERR! cwd E:\xinye\work\acm\abTestDemo\node_modules\node-sass
npm ERR! gyp ERR! node -v v19.6.0
npm ERR! gyp ERR! node-gyp -v v3.8.0
npm ERR! gyp ERR! not ok
npm ERR! Build failed with error code: 1
核心原因与 node-gyp
依赖的 Python 环境和 Node.js 版本兼容性有关。具体分析如下:
错误核心原因
-
Python 版本与语法不兼容
错误日志中明确提到:
plaintext
vbnetSyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?
这是因为旧版本的
node-gyp
(此处为v3.8.0
)使用的是 Python 2.x 的语法(print "xxx"
),而你的系统中安装的是 Python 3.x(F:\Python\Python310\python.EXE
)。Python 3 要求print
必须带括号(print(...)
),导致语法报错。 -
Node.js 版本过高
日志显示当前使用的 Node.js 版本是
v19.6.0
,而node-sass
对高版本 Node 支持有限(尤其是旧版本node-sass
不兼容 Node 16+),这会进一步加剧编译失败。 -
node-gyp
版本过旧项目中使用的
node-gyp@3.8.0
是较旧的版本,对现代 Node 和 Python 3 的支持不完善。
错误发生流程
- 安装
node-sass
时,需要通过node-gyp
编译原生模块。 node-gyp
首先查找 Python 环境,尝试了python2
(未找到),最终找到python3.10
。- 执行 Python 命令时,因
node-gyp
旧版本使用 Python 2 语法,与 Python 3 不兼容,导致语法错误。 - 编译过程中断,最终
node-sass
安装失败,返回错误码1
。
总结关键问题点
-
node-sass
依赖的node-gyp
版本过旧,不支持 Python 3 语法。 -
Node.js 版本(
v19.6.0
)过高,与node-sass
兼容性差。 -
Python 环境为 3.x,与旧版
node-gyp
的 Python 2 语法冲突。
解决思路:统一 Node、node-sass
、node-gyp
和 Python 的版本兼容性(推荐使用 Node 14.x + Python 2.7,或替换为 sass
避免编译问题)。