一、问题描述
笔者node 版本为20.12.1,需要安装的node-sass版本为9.0.0。
笔者对前端工程执行 npm install指令时,在 npm install node-sass处发生了错误。错误如下:
935 error gyp verb build dir attempting to create "build" dir: D:\work\irp\irp-frontend\node_modules\node-sass\build 935 error gyp verb build dir "build" dir needed to be created? Yes 935 error gyp verb find VS msvs_version was set from command line or npm config 935 error gyp verb find VS - looking for Visual Studio version 2022 935 error gyp verb find VS VCINSTALLDIR not set, not running in VS Command Prompt 935 error gyp verb find VS checking VS2022 (17.9.34902.65) found at: 935 error gyp verb find VS "C:\Program Files\Microsoft Visual Studio\2022\Community" 935 error gyp verb find VS - found "Visual Studio C++ core features" 935 error gyp verb find VS - found VC++ toolset: v143 935 error gyp verb find VS - missing any Windows SDK 935 error gyp verb find VS checking VS2022 (17.9.34902.65) found at: 935 error gyp verb find VS "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools" 935 error gyp verb find VS - found "Visual Studio C++ core features" 935 error gyp verb find VS - found VC++ toolset: v143 935 error gyp verb find VS - missing any Windows SDK 935 error gyp verb find VS could not find a version of Visual Studio 2017 or newer to use 935 error gyp verb find VS looking for Visual Studio 2015 935 error gyp verb find VS - not found 935 error gyp verb find VS not looking for VS2013 as it is only supported up to Node.js 8 935 error gyp ERR! find VS 935 error gyp ERR! find VS msvs_version was set from command line or npm config 935 error gyp ERR! find VS - looking for Visual Studio version 2022 935 error gyp ERR! find VS VCINSTALLDIR not set, not running in VS Command Prompt 935 error gyp ERR! find VS checking VS2022 (17.9.34902.65) found at: 935 error gyp ERR! find VS "C:\Program Files\Microsoft Visual Studio\2022\Community" 935 error gyp ERR! find VS - found "Visual Studio C++ core features" 935 error gyp ERR! find VS - found VC++ toolset: v143 935 error gyp ERR! find VS - missing any Windows SDK 935 error gyp ERR! find VS checking VS2022 (17.9.34902.65) found at: 935 error gyp ERR! find VS "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools" 935 error gyp ERR! find VS - found "Visual Studio C++ core features" 935 error gyp ERR! find VS - found VC++ toolset: v143 935 error gyp ERR! find VS - missing any Windows SDK 935 error gyp ERR! find VS could not find a version of Visual Studio 2017 or newer to use 935 error gyp ERR! find VS looking for Visual Studio 2015 935 error gyp ERR! find VS - not found 935 error gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8 935 error gyp ERR! find VS 935 error gyp ERR! find VS valid versions for msvs_version: 935 error gyp ERR! find VS 935 error gyp ERR! find VS ************************************************************** 935 error gyp ERR! find VS You need to install the latest version of Visual Studio 935 error gyp ERR! find VS including the "Desktop development with C++" workload. 935 error gyp ERR! find VS For more information consult the documentation at: 935 error gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows 935 error gyp ERR! find VS ************************************************************** 935 error gyp ERR! find VS 935 error gyp ERR! configure error 935 error gyp ERR! stack Error: Could not find any Visual Studio installation to use 935 error gyp ERR! stack at VisualStudioFinder.fail (D:\work\irp\irp-frontend\node_modules\node-gyp\lib\find-visualstudio.js:122:47) 935 error gyp ERR! stack at D:\work\irp\irp-frontend\node_modules\node-gyp\lib\find-visualstudio.js:75:16 935 error gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (D:\work\irp\irp-frontend\node_modules\node-gyp\lib\find-visualstudio.js:363:14) 935 error gyp ERR! stack at D:\work\irp\irp-frontend\node_modules\node-gyp\lib\find-visualstudio.js:71:14 935 error gyp ERR! stack at D:\work\irp\irp-frontend\node_modules\node-gyp\lib\find-visualstudio.js:384:16 935 error gyp ERR! stack at D:\work\irp\irp-frontend\node_modules\node-gyp\lib\util.js:54:7 935 error gyp ERR! stack at D:\work\irp\irp-frontend\node_modules\node-gyp\lib\util.js:33:16 935 error gyp ERR! stack at ChildProcess.exithandler (node:child_process:430:5) 935 error gyp ERR! stack at ChildProcess.emit (node:events:518:28) 935 error gyp ERR! stack at maybeClose (node:internal/child_process:1105:16) 935 error gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:305:5) 935 error gyp ERR! System Windows_NT 10.0.22631 935 error gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "D:\\work\\irp\\irp-frontend\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library=" 935 error gyp ERR! cwd D:\work\irp\irp-frontend\node_modules\node-sass 935 error gyp ERR! node -v v20.12.1 935 error gyp ERR! node-gyp -v v8.4.1 935 error gyp ERR! not ok 935 error Build failed with error code: 1 936 silly unfinished npm timer reify 1716198365841 937 silly unfinished npm timer reify:build 1716198369813 938 silly unfinished npm timer build 1716198369814 939 silly unfinished npm timer build:deps 1716198369814 940 silly unfinished npm timer build:run:postinstall 1716198370636 941 silly unfinished npm timer build:run:postinstall:node_modules/node-sass 1716198370636 942 verbose cwd D:\work\irp\irp-frontend 943 verbose os Windows_NT 10.0.22631 944 verbose node v20.12.1 945 verbose npm v10.8.0 946 verbose exit 1 947 verbose code 1
二、解决办法
上述报错主要原因如下,找不到任何安装的 Visual Studio
Could not find any Visual Studio installation to use
根据报错,笔者进行了搜索和报错提示进入了GitHub - nodejs/node-gyp: Node.js native addon build tool进行查询。
主要解决办法如下:
2.1 安装Visual Studio
根据报错提示安装最新版本的Visual Studio, 并引入相关的c++桌面开发(此处有大坑)
笔者安装了最新的2022 版本Visual Studio,但是,没有任何效果。
笔者根据报错发现如下
935 error gyp ERR! find VS - looking for Visual Studio version 2022 935 error gyp ERR! find VS VCINSTALLDIR not set, not running in VS Command Prompt 935 error gyp ERR! find VS checking VS2022 (17.9.34902.65) found at: 935 error gyp ERR! find VS "C:\Program Files\Microsoft Visual Studio\2022\Community" 935 error gyp ERR! find VS - found "Visual Studio C++ core features" 935 error gyp ERR! find VS - found VC++ toolset: v143 935 error gyp ERR! find VS - missing any Windows SDK 935 error gyp ERR! find VS checking VS2022 (17.9.34902.65) found at: 935 error gyp ERR! find VS "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools" 935 error gyp ERR! find VS - found "Visual Studio C++ core features" 935 error gyp ERR! find VS - found VC++ toolset: v143 935 error gyp ERR! find VS - missing any Windows SDK 935 error gyp ERR! find VS could not find a version of Visual Studio 2017 or newer to use 935 error gyp ERR! find VS looking for Visual Studio 2015 935 error gyp ERR! find VS - not found
确实Visual Studio已经安装,但是missing any Windows SDK,于是笔者在Visual Studio中进行查找Windows SDK
笔者公司的电脑windows版本为win11,上面也存在windows 11 SDK,按理来说不会出现上述情况。于是笔者猜测可能是别的原因导致的,便去寻找其他方法,皆不能解决问题。
于是回到原始报错:missing any Windows SDK
既然是missing,笔者想会不会这只存在win11 SDK的原因,于是便安装了win10的SDK,如下:
神奇的是,win10的SDK居然被找到了,该问题就这样被解决了。本次任务时间较紧,此次就不再深究了。
934 error gyp verb build dir attempting to create "build" dir: D:\work\irp\irp-frontend\node_modules\node-sass\build 934 error gyp verb build dir "build" dir needed to be created? Yes 934 error gyp verb find VS msvs_version was set from command line or npm config 934 error gyp verb find VS - looking for Visual Studio version 2022 934 error gyp verb find VS VCINSTALLDIR not set, not running in VS Command Prompt 934 error gyp verb find VS checking VS2022 (17.9.34902.65) found at: 934 error gyp verb find VS "C:\Program Files\Microsoft Visual Studio\2022\Community" 934 error gyp verb find VS - found "Visual Studio C++ core features" 934 error gyp verb find VS - found VC++ toolset: v143 934 error gyp verb find VS - found Windows SDK: 10.0.20348.0
2.2 安装setuptools
尽管对于笔者,还出现新的报错,但那都不是问题。
934 error Traceback (most recent call last): 934 error File "D:\work\irp\irp-frontend\node_modules\node-gyp\gyp\gyp_main.py", line 42, in <module> 934 error import gyp # noqa: E402 934 error ^^^^^^^^^^ 934 error File "D:\work\irp\irp-frontend\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 9, in <module> 934 error import gyp.input 934 error File "D:\work\irp\irp-frontend\node_modules\node-gyp\gyp\pylib\gyp\input.py", line 19, in <module> 934 error from distutils.version import StrictVersion 934 error ModuleNotFoundError: No module named 'distutils' 934 error gyp ERR! configure error 934 error gyp ERR! stack Error: `gyp` failed with exit code: 1 934 error gyp ERR! stack at ChildProcess.onCpExit (D:\work\irp\irp-frontend\node_modules\node-gyp\lib\configure.js:259:16) 934 error gyp ERR! stack at ChildProcess.emit (node:events:518:28) 934 error gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:294:12) 934 error gyp ERR! System Windows_NT 10.0.22631 934 error gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "D:\\work\\irp\\irp-frontend\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library=" 934 error gyp ERR! cwd D:\work\irp\irp-frontend\node_modules\node-sass 934 error gyp ERR! node -v v20.12.1 934 error gyp ERR! node-gyp -v v8.4.1 934 error gyp ERR! not ok 934 error Build failed with error code: 1
这个报错是因为笔者的node-sass依赖于python内的distutils模块,笔者的python版本为3.12.3,已经移除了这个模块,
有两种解决办法:1.降低python的版本,笔者的程序依赖的python版本较高,不能降低版本,因此采取第二种办法
2.安装setuptools模块,“setuptools”是一个处理Python软件包的工具包,它依赖于 distutils。安装 setuptools可以间接解决没有“distutils”的问题。执行以下语句即可安装:
pip install setuptools
至此,前端程序可以正常npm install和npm run build。
三、其他解决办法
3.1 全局安装构建工具
npm install --global windows-build-tools
安装该工具需要python2.7的环境,笔者前端依赖python较高,即使降低版本也会出现其他问题,故此该方法不适合笔者。
3.2 node-sass 与node版本不一致
可在官网(node-sass - npm)查看版本对应关系