现在新创建的项目基本上都安装的是 Dart Sass,直接 npm install sass
即可。比较早的项目中,有安装了 node-sass
的,但是在当前的 node 环境中,会出现各种问题。
安装版本报错
gyp verb find VS msvs_version not set from command line or npm config
gyp verb find VS VCINSTALLDIR not set, not running in VS Command Prompt
gyp verb find VS unknown version "undefined" found at "C:\Program Files\Microsoft Visual Studio\2022\Professional"
gyp verb find VS checking VS2019 (16.11.33801.447) found at: gyp verb find VS "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools"
gyp verb find VS - found "Visual Studio C++ core features" gyp verb find VS - found VC++ toolset: v142
gyp verb find VS - missing any Windows SDK gyp verb find VS could not find a version of Visual Studio 2017 or newer to use
gyp verb find VS looking for Visual Studio 2015 gyp verb find VS - not found
gyp verb find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS
gyp ERR! find VS msvs_version not set from command line or npm config
gyp ERR! find VS VCINSTALLDIR not set, not running in VS Command Prompt
gyp ERR! find VS unknown version "undefined" found at "C:\Program Files\Microsoft Visual Studio\2022\Professional"
gyp ERR! find VS checking VS2019 (16.11.33801.447) found at:
gyp ERR! find VS "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools"
gyp ERR! find VS - found "Visual Studio C++ core features"
gyp ERR! find VS - found VC++ toolset: v142
gyp ERR! find VS - missing any Windows SDK
gyp ERR! find VS could not find a version of Visual Studio 2017 or newer to use
gyp ERR! find VS looking for Visual Studio 2015
gyp ERR! find VS - not found
gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS
gyp ERR! find VS **************************************************************
gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the "Desktop development with C++" workload.
gyp ERR! find VS For more information consult the documentation at:
gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
gyp ERR! find VS **************************************************************
gyp ERR! find VS
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Visual Studio installation to use
gyp ERR! stack at VisualStudioFinder.fail (C:\Users\jeremyjone\code\test\node_modules\node-gyp\lib\find-visualstudio.js:121:47)
gyp ERR! stack at C:\Users\jeremyjone\code\test\node_modules\node-gyp\lib\find-visualstudio.js:74:16
gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (C:\Users\jeremyjone\code\test\node_modules\node-gyp\lib\find-visualstudio.js:351:14)
gyp ERR! stack at C:\Users\jeremyjone\code\test\node_modules\node-gyp\lib\find-visualstudio.js:70:14
gyp ERR! stack at C:\Users\jeremyjone\code\test\node_modules\node-gyp\lib\find-visualstudio.js:372:16
gyp ERR! stack at C:\Users\jeremyjone\code\test\node_modules\node-gyp\lib\util.js:54:7
gyp ERR! stack at C:\Users\jeremyjone\code\test\node_modules\node-gyp\lib\util.js:33:16
gyp ERR! stack at ChildProcess.exithandler (node:child_process:410:5)
gyp ERR! stack at ChildProcess.emit (node:events:513:28)
gyp ERR! stack at maybeClose (node:internal/child_process:1100:16)
gyp ERR! System Windows_NT 10.0.22635
gyp ERR! command "C:\Program Files\nodejs\node.exe" "C:\Users\jeremyjone\code\test\node_modules\node-gyp\bin\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd C:\Users\jeremyjone\code\test\node_modules\node-sass
gyp ERR! node -v v16.20.0
这个问题,初看一头雾水,细看,问题关键在 17 行 missing any Windows SDK
。查阅了一下, gyp 需要 windows 10 SDK,直接去安装。
因为我有 Visual Studio 2022,直接打开 VS Installer,搜索 windows 10 SDK,全选安装即可(其实选其中一个就可以)。
其实安装了上面,没有网上说的那么麻烦,不需要安装 npm install --global windows-build-tools
,我忘了从哪看的也不推荐安装这玩意了,我就没有试过。
python 报错
安装成功后,距离成功近在咫尺,但是在编译时却再次报错:
gyp info find VS using VS2017 (15.9.36101.55) found at:
gyp info find VS "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools"
gyp info find VS run with --verbose for detailed information
gyp verb build/config.gypi creating config file
gyp verb build/config.gypi writing out config file: C:\Users\jeremyjone\code\test\node_modules\node-sass\build\config.gypi
(node:29720) [DEP0150] DeprecationWarning: Setting process.config is deprecated. In the future the property will be read-only.
(Use `node --trace-deprecation ...` to show where the warning was created)
gyp verb config.gypi checking for gypi file: C:\Users\jeremyjone\code\test\node_modules\node-sass\config.gypi
gyp verb common.gypi checking for gypi file: C:\Users\jeremyjone\code\test\node_modules\node-sass\common.gypi
gyp verb gyp gyp format was not specified; forcing "msvs"
gyp info spawn C:\environments\anaconda3\python.exe
gyp info spawn args [
gyp info spawn args 'C:\\Users\\jeremyjone\\code\\test\\node_modules\\node-gyp\\gyp\\gyp_main.py',
gyp info spawn args 'binding.gyp',
gyp info spawn args '-f',
gyp info spawn args 'msvs',
gyp info spawn args '-I',
gyp info spawn args 'C:\\Users\\jeremyjone\\code\\test\\node_modules\\node-sass\\build\\config.gypi',
gyp info spawn args '-I',
gyp info spawn args 'C:\\Users\\jeremyjone\\code\\test\\node_modules\\node-gyp\\addon.gypi',
gyp info spawn args '-I',
gyp info spawn args 'C:\\Users\\jeremyjone\\AppData\\Local\\node-gyp\\Cache\\16.20.0\\include\\node\\common.gypi',
gyp info spawn args '-Dlibrary=shared_library',
gyp info spawn args '-Dvisibility=default',
gyp info spawn args '-Dnode_root_dir=C:\\Users\\jeremyjone\\AppData\\Local\\node-gyp\\Cache\\16.20.0',
gyp info spawn args '-Dnode_gyp_dir=C:\\Users\\jeremyjone\\code\\test\\node_modules\\node-gyp',
gyp info spawn args '-Dnode_lib_file=C:\\\\Users\\\\jeremyjone\\\\AppData\\\\Local\\\\node-gyp\\\\Cache\\\\16.20.0\\\\<(target_arch)\\\\node.lib',
gyp info spawn args '-Dmodule_root_dir=C:\\Users\\jeremyjone\\code\\test\\node_modules\\node-sass',
gyp info spawn args '-Dnode_engine=v8',
gyp info spawn args '--depth=.',
gyp info spawn args '--no-parallel',
gyp info spawn args '--generator-output',
gyp info spawn args 'C:\\Users\\jeremyjone\\code\\test\\node_modules\\node-sass\\build',
gyp info spawn args '-Goutput_dir=.'
gyp info spawn args ]
Traceback (most recent call last):
File "C:\Users\jeremyjone\code\test\node_modules\node-gyp\gyp\gyp_main.py", line 51, in <module>
sys.exit(gyp.script_main())
^^^^^^^^^^^^^^^^^
File "C:\Users\jeremyjone\code\test\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 670, in script_main
return main(sys.argv[1:])
^^^^^^^^^^^^^^^^^^
File "C:\Users\jeremyjone\code\test\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 662, in main
return gyp_main(args)
^^^^^^^^^^^^^^
File "C:\Users\jeremyjone\code\test\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 629, in gyp_main
[generator, flat_list, targets, data] = Load(
^^^^^
File "C:\Users\jeremyjone\code\test\node_modules\node-gyp\gyp\pylib\gyp\__init__.py", line 150, in Load
result = gyp.input.Load(
^^^^^^^^^^^^^^^
File "C:\Users\jeremyjone\code\test\node_modules\node-gyp\gyp\pylib\gyp\input.py", line 3021, in Load
LoadTargetBuildFile(
File "C:\Users\jeremyjone\code\test\node_modules\node-gyp\gyp\pylib\gyp\input.py", line 411, in LoadTargetBuildFile
build_file_data = LoadOneBuildFile(
^^^^^^^^^^^^^^^^^
File "C:\Users\jeremyjone\code\test\node_modules\node-gyp\gyp\pylib\gyp\input.py", line 239, in LoadOneBuildFile
build_file_contents = open(build_file_path, "rU").read()
^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: invalid mode: 'rU' while trying to load binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack at ChildProcess.onCpExit (C:\Users\jeremyjone\code\test\node_modules\node-gyp\lib\configure.js:351:16)
gyp ERR! stack at ChildProcess.emit (node:events:513:28)
gyp ERR! stack at Process.ChildProcess._handle.onexit (node:internal/child_process:293:12)
gyp ERR! System Windows_NT 10.0.22635
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\jeremyjone\\code\\test\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd C:\Users\jeremyjone\code\test\node_modules\node-sass
gyp ERR! node -v v16.20.0
对于熟悉 python 的同学,一眼就可以看出来这就是 python 报错了,说明我们之前的 SDK 已经安装成功,并且继续向下执行了。为什么会出现此问题呢?
我之前在电脑中安装了 python 3.11 版本,使用起来没什么问题。但是看报错,错在了 open 的 rU
模式。这个模式呢:
- Python2.3 添加
- Python 3.4 弃用
- Python 3.11 移除
看出来了吧,正好我使用的版本处在了没有这个模式的情况之下,导致编译过程报错。那么我们直接切换版本即可。
由于我使用的是 anaconda,它给我们提供了一个比较方便的环境配置。
# 创建 Python3.8 环境
conda create -n py38 python=38
# 激活环境
conda activate py38
此时,我们并没有切换电脑中的主版本,它仍然是 3.11 的。不要着急,我们可以配置 npm。
# 配置 NPM 中使用的 python 版本以及对应路径
npm config set python 'C:\env\anaconda3\envs\py38\python.exe'
此时,我们再执行安装命令,就可以正确安装了。
文章评论