在安装 node-sass 时出现错误

14
当我为React项目安装node-sass时,它给了我下面的错误。我尝试了很多方法,但都没有起作用。我尝试删除并重新安装它,我尝试启动一个新项目,但它仍然不工作。我将所有东西更新到最新版本:node.js到v16.14.0和npm到v8.3.1
npm ERR! code 1
npm ERR! path C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-sass
npm ERR! command failed
npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node scripts/build.js
npm ERR! Building: C:\Program Files\nodejs\node.exe C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-gyp\bin\node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp verb cli [
npm ERR! gyp verb cli   'C:\\Program Files\\nodejs\\node.exe',
npm ERR! gyp verb cli   'C:\\Users\\XXXXX\\Documents\\GitHub\\XXXXX\\Frontend\\node_modules\\node-gyp\\bin\\node-gyp.js',
npm ERR! gyp verb cli   'rebuild',
npm ERR! gyp verb cli   '--verbose',
npm ERR! gyp verb cli   '--libsass_ext=',
npm ERR! gyp verb cli   '--libsass_cflags=',
npm ERR! gyp verb cli   '--libsass_ldflags=',
npm ERR! gyp verb cli   '--libsass_library='
npm ERR! gyp verb cli ]
npm ERR! gyp info using node-gyp@3.8.0
npm ERR! gyp info using node@16.14.0 | win32 | x64
npm ERR! gyp verb command rebuild []
npm ERR! gyp verb command clean []
npm ERR! gyp verb clean removing "build" directory
npm ERR! gyp verb command configure []
npm ERR! gyp verb download using dist-url https://npm.taobao.org/dist
npm ERR! gyp verb check python checking for Python executable "python2" in the PATH
npm ERR! gyp verb `which` failed Error: not found: python2
npm ERR! gyp verb `which` failed     at getNotFoundError (C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-gyp\node_modules\which\which.js:13:12)
npm ERR! gyp verb `which` failed     at F (C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-gyp\node_modules\which\which.js:68:19)
npm ERR! gyp verb `which` failed     at E (C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-gyp\node_modules\which\which.js:80:29)
npm ERR! gyp verb `which` failed     at C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-gyp\node_modules\which\which.js:89:16
npm ERR! gyp verb `which` failed     at C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\isexe\index.js:42:5
npm ERR! gyp verb `which` failed     at C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\isexe\windows.js:36:5
npm ERR! gyp verb `which` failed     at FSReqCallback.oncomplete (node:fs:198:21)
npm ERR! gyp verb `which` failed  python2 Error: not found: python2
npm ERR! gyp verb `which` failed     at getNotFoundError (C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-gyp\node_modules\which\which.js:13:12)
npm ERR! gyp verb `which` failed     at F (C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-gyp\node_modules\which\which.js:68:19)
npm ERR! gyp verb `which` failed     at E (C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-gyp\node_modules\which\which.js:80:29)
npm ERR! gyp verb `which` failed     at C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-gyp\node_modules\which\which.js:89:16
npm ERR! gyp verb `which` failed     at C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\isexe\index.js:42:5
npm ERR! gyp verb `which` failed     at C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\isexe\windows.js:36:5
npm ERR! gyp verb `which` failed     at FSReqCallback.oncomplete (node:fs:198: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 C:\Python27\python.EXE
npm ERR! gyp verb check python version `C:\Python27\python.EXE -c "import sys; print "2.7.15
npm ERR! gyp verb check python version .%s.%s" % sys.version_info[:3];"` returned: %j
npm ERR! gyp verb get node dir no --target version specified, falling back to host node version: 16.14.0
npm ERR! gyp verb command install [ '16.14.0' ]
npm ERR! gyp verb download using dist-url https://npm.taobao.org/dist
npm ERR! gyp verb install input version string "16.14.0"
npm ERR! gyp verb install installing version: 16.14.0
npm ERR! gyp verb install --ensure was passed, so won't reinstall if already installed
npm ERR! gyp verb install version is already installed, need to check "installVersion"
npm ERR! gyp verb got "installVersion" 9
npm ERR! gyp verb needs "installVersion" 9
npm ERR! gyp verb install version is good
npm ERR! gyp verb get node dir target node version installed: 16.14.0
npm ERR! gyp verb build dir attempting to create "build" dir: C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-sass\build
npm ERR! gyp verb build dir "build" dir needed to be created? C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-sass\build
npm ERR! gyp verb find vs2017 Found installation at: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
npm ERR! gyp verb find vs2017   - Found Microsoft.VisualStudio.Component.Windows10SDK.19041
npm ERR! gyp verb find vs2017   - Found Microsoft.VisualStudio.Component.VC.Tools.x86.x64
npm ERR! gyp verb find vs2017   - Found Microsoft.VisualStudio.VC.MSBuild.Base
npm ERR! gyp verb find vs2017   - Using this installation with Windows 10 SDK
npm ERR! gyp verb find vs2017 using installation: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
npm ERR! gyp verb build/config.gypi creating config file
npm ERR! gyp verb build/config.gypi writing out config file: C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-sass\build\config.gypi
npm ERR! (node:20452) [DEP0150] DeprecationWarning: Setting process.config is deprecated. In the future the property will be read-only.
npm ERR! (Use `node --trace-deprecation ...` to show where the warning was created)
npm ERR! gyp verb config.gypi checking for gypi file: C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-sass\config.gypi
npm ERR! gyp verb common.gypi checking for gypi file: C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-sass\common.gypi
npm ERR! gyp verb gyp gyp format was not specified; forcing "msvs"
npm ERR! gyp info spawn C:\Python27\python.EXE
npm ERR! gyp info spawn args [
npm ERR! gyp info spawn args   'C:\\Users\\XXXXX\\Documents\\GitHub\\XXXXX\\Frontend\\node_modules\\node-gyp\\gyp\\gyp_main.py',
npm ERR! gyp info spawn args   'binding.gyp',
npm ERR! gyp info spawn args   '-f',
npm ERR! gyp info spawn args   'msvs',
npm ERR! gyp info spawn args   '-G',
npm ERR! gyp info spawn args   'msvs_version=2015',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   'C:\\Users\\XXXXX\\Documents\\GitHub\\XXXXX\\Frontend\\node_modules\\node-sass\\build\\config.gypi',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   'C:\\Users\\XXXXX\\Documents\\GitHub\\XXXXX\\Frontend\\node_modules\\node-gyp\\addon.gypi',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   'C:\\Users\\XXXXX\\.node-gyp\\16.14.0\\include\\node\\common.gypi',
npm ERR! gyp info spawn args   '-Dlibrary=shared_library',
npm ERR! gyp info spawn args   '-Dvisibility=default',
npm ERR! gyp info spawn args   '-Dnode_root_dir=C:\\Users\\XXXXX\\.node-gyp\\16.14.0',
npm ERR! gyp info spawn args   '-Dnode_gyp_dir=C:\\Users\\XXXXX\\Documents\\GitHub\\XXXXX\\Frontend\\node_modules\\node-gyp',
npm ERR! gyp info spawn args   '-Dnode_lib_file=C:\\Users\\XXXXX\\.node-gyp\\16.14.0\\<(target_arch)\\node.lib',
npm ERR! gyp info spawn args   '-Dmodule_root_dir=C:\\Users\\XXXXX\\Documents\\GitHub\\XXXXX\\Frontend\\node_modules\\node-sass',
npm ERR! gyp info spawn args   '-Dnode_engine=v8',
npm ERR! gyp info spawn args   '--depth=.',
npm ERR! gyp info spawn args   '--no-parallel',
npm ERR! gyp info spawn args   '--generator-output',
npm ERR! gyp info spawn args   'C:\\Users\\XXXXX\\Documents\\GitHub\\XXXXX\\Frontend\\node_modules\\node-sass\\build',
npm ERR! gyp info spawn args   '-Goutput_dir=.'
npm ERR! gyp info spawn args ]
npm ERR! gyp verb command build []
npm ERR! gyp verb download using dist-url https://npm.taobao.org/dist
npm ERR! gyp verb build type Release
npm ERR! gyp verb architecture x64
npm ERR! gyp verb node dev dir C:\Users\XXXXX\.node-gyp\16.14.0
npm ERR! gyp verb found first Solution file build/binding.sln
npm ERR! gyp verb using MSBuild: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\15.0\Bin\MSBuild.exe
npm ERR! gyp info spawn C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\15.0\Bin\MSBuild.exe
npm ERR! gyp info spawn args [
npm ERR! gyp info spawn args   'build/binding.sln',
npm ERR! gyp info spawn args   '/nologo',
npm ERR! gyp info spawn args   '/p:Configuration=Release;Platform=x64'
npm ERR! gyp info spawn args ]
npm ERR! gyp ERR! UNCAUGHT EXCEPTION
npm ERR! gyp ERR! stack Error: spawn C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\15.0\Bin\MSBuild.exe ENOENT
npm ERR! gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:283:19)
npm ERR! gyp ERR! stack     at onErrorNT (node:internal/child_process:478:16)
npm ERR! gyp ERR! stack     at processTicksAndRejections (node:internal/process/task_queues:83:21)
npm ERR! gyp ERR! System Windows_NT 10.0.19043
npm ERR! gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\XXXXX\\Documents\\GitHub\\XXXXX\\Frontend\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
npm ERR! gyp ERR! cwd C:\Users\XXXXX\Documents\GitHub\XXXXX\Frontend\node_modules\node-sass
npm ERR! gyp ERR! node -v v16.14.0
npm ERR! gyp ERR! node-gyp -v v3.8.0
npm ERR! gyp ERR! This is a bug in `node-gyp`.
npm ERR! gyp ERR! Try to update node-gyp and file an Issue if it does not help:
npm ERR! gyp ERR!     <https://github.com/nodejs/node-gyp/issues>
npm ERR! Build failed with error code: 7

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\XXXXX\AppData\Local\npm-cache\_logs\2022-02-14T22_43_35_171Z-debug-0.log
4个回答

13

第一解决方案

确保你的 node.js 版本不要高于 推荐的 版本。如果高于,降级它,你可以使用 npm 中的 n 包来完成:

npm install -g n
n stable
# If one of the commands does not pass, you may need to use sudo
sudo npm install -g n
sudo n stable

那你应该使用sass包而不是node-sass,因为它已经过时了。为此,请运行以下命令:
npm uninstall node-sass --save
npm install sass --save

第二个解决方案

如果出于某种原因您需要或想要使用node-sass,您应该将您的nodejs版本降级到类似v14的版本。为此,您可以使用npm中的n包:

npm install -g n
n 14
# If one of the commands does not pass, you may need to use sudo
sudo npm install -g n
sudo n 14

1
哦,我的天啊,它活了)非常感谢你。 - Lotpite

13

我花了很多时间在错误的 Node 版本上...谢谢! - Nezir
版本 14.x.x 已经非常古老了,回到它应该是最后的解决方案。首先考虑下面答案中的第一个解决方案。 - Youssouf Oumar

7

不要使用node-sass包

由于node-sass已被弃用,您需要使用其新版本sass

您可以使用以下命令卸载旧版本并安装新版本:

npm uninstall node-sass
npm install sass


1
问题在于节点版本不兼容。Node Sass 版本的兼容性表在这里。 Node-sass/node version compatibility chart 从 2020 年 10 月起,Node Sass 和 Libsass 都已被淘汰,推荐使用 Dart Sass(sass)。
在我的情况下,我不得不将我的节点版本降级到 14.20.0,因为我依赖的许多包使用 4.x.x。
但我不能让一个包托住我的项目。所以我做了一些研究,发现 this article 关于防止安装特定包(即使它由其他依赖项指定),这可能是你想要的。
TLDR;
  1. 如果未安装,请使用 yarn add -D sass 安装sass。

  2. 在您的项目根目录中创建一个名为dependency-stub的文件夹 2.1. 在dependency-stub文件夹中放置一个名为index.js的文件 2.2. 然后添加下面的行

    module.exports = {};
    //(这是我们将使用解析重定向的存根)。
    

    2.3. 运行命令 yarn – 添加一个package.json文件到dependency-stub目录中 2.4. 将以下行添加到package.json文件中

    {
      "name": "node-sass",
      "version": "0.0.0"
    }
    

    如果使用NPM,请查看第3步下面的注意事项。

  3. 在您的主要package.json文件中,即在您的项目根目录中,将以下行添加到resolutions(或overrides,如果使用NPM)部分中。

{ 
  ...,
  "resolutions": {
     ...
     "node-sass": "file:dependency-stub"
  },
}

npm - 使用覆盖部分而不是解析,由于npm文件url相对于当前依赖项,您可以使用依赖项存根的绝对路径(可能将其放在主目录中),存根模块的URL或存根模块的GitHub URL。。

  1. 在tsconfig.json中将“dependency-stub”添加到包含数组中(以防止ESLint抛出有关文件不在项目中的错误)。 *如果您不使用typscript或使用dependency-stub不在您的项目目录中,则忽略此步骤。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接