错误:Node Sass版本5.0.0与^ 4.0.0不兼容


91

我已经npx create-react-app在npm v7.0.7和Node v15.0.1上使用命令创建了空白的React项目

已安装:

  • React v17.0.1,
  • node-sass v5.0.0,

然后,我尝试将空白.scss文件导入到App组件中:

App.js

import './App.scss'

function App() {
  return (
    <div className="App">
      App
    </div>
  );
}

export default App;

引发错误:

Failed to compile.

./src/App.scss (./node_modules/css-loader/dist/cjs.js??ref--5-oneOf-6-1!./node_modules/postcss-loader/src??postcss!./node_modules/resolve-url-loader??ref--5-oneOf-6-3!./node_modules/s
ass-loader/dist/cjs.js??ref--5-oneOf-6-4!./src/App.scss)
Error: Node Sass version 5.0.0 is incompatible with ^4.0.0.

package.json

{
  "name": "react-17-node-sass-5",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.11.5",
    "@testing-library/react": "^11.1.0",
    "@testing-library/user-event": "^12.1.10",
    "node-sass": "^5.0.0",
    "react": "^17.0.1",
    "react-dom": "^17.0.1",
    "react-scripts": "4.0.0",
    "web-vitals": "^0.2.4"
  },
 ...
 
  }
}

Answers:


157

TL; DR

  1. npm uninstall node-sass
  2. npm install node-sass@4.14.1

Edit2:sass-loader v10.0.5对其进行了修复。问题是,您可能没有将其用作项目依赖项,而是更多地将其用作依赖项的依赖项。CRA使用固定版本,angular-cli锁定到node-sass v4等。
现在的建议是:如果仅安装node-sass,请检查以下解决方法(和注意事项)。如果您正在处理一个空白项目,并且可以管理Webpack配置(不使用CRA或CLI来支撑您的项目),请安装最新的sass-loader。


编辑:此错误来自sass-loader。semver不匹配,因为node-sass @latest是v5.0.0,而sass-loader期望^ 4.0.0。
他们的存储库中存在一个未解决的问题,需要对其进行修复。在此之前,请参考下面的解决方案。


解决方法:尚未安装node-sass 5.0.0(主要版本刚刚被破坏)。

卸载node-sass

npm uninstall node-sass

然后安装最新版本(5.0之前)

npm install node-sass@4.14.1


注意:建议使用LibSass(也称为node-sass),建议使用dart-sass。您可以sass改用,它是已编译为纯JavaScript的dart-sass的节点分布。请注意:

使用这种方法时要小心。React-scripts使用sass-loader v8,它比node-sass更喜欢node-sass(它具有一些node-sass不支持的语法)。如果两个都安装并且用户使用sass,则可能导致CSS编译错误


1
由于某种原因yarn add node-sass@4.14.1要快得多
Tylik Stec

1
看起来他们刚刚在github.com/webpack-contrib/sass-loader/commit/…中进行了修复,因此您可以安装sass-loader@10.0.5
Marcin

1
@TylikStec yarn是另一个程序包管理器,但不要在同一项目中同时使用这两个程序,因为拥有两个锁定文件可能会导致部署问题
Binara Medawatta

4
@marcin有趣的是您说“他们”,因为发布答案的人是解决问题的人:]
Benjamin Gruenbaum

为我工作在盖茨比。谢谢!
Diego Fortes

5

卸载node-sass

npm uninstall node-sass

通过以下方式使用sass

npm install -g sass
npm install --save-dev sass

这对我有用,谢谢。
dro3333

使用这种方法时要小心。React-scripts使用sass-loader v8,它比node-sass更喜欢node-sass(它具有一些node-sass不支持的语法)。如果同时安装了两者并且用户使用了sass,则可能会导致CSS编译错误。
Nicolas Hevia
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.