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

JDK*_*Kot 534 sass reactjs node-sass webpack create-react-app

我创建了一个空白的 React 项目,使用命令:npx create-react-appon npm v7.0.7 和 Node v15.0.1

安装:

  • 反应 v17.0.1,
  • 节点sass v5.0.0,

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

应用程序.js

import './App.scss'

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

export default App;
Run Code Online (Sandbox Code Playgroud)

抛出错误:

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.
Run Code Online (Sandbox Code Playgroud)

包.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"
  },
 ...
 
  }
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*via 977

TL; 博士

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

或者,如果使用纱线(较新的 CRA 版本中的默认值)

  1. yarn remove node-sass
  2. yarn add 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 而不是 sass(它有一些 node-sass 不支持的语法)。如果两者都安装并且用户使用 sass,这可能会导致 css 编译错误

  • @marcin,你说“他们”很有趣,因为发布答案的人就是修复它的人:] (19认同)
  • 由于某种原因 `yarn add node-sass@4.14.1` 更快 (11认同)
  • 看起来他们刚刚在 https://github.com/webpack-contrib/sass-loader/commit/c3e279fb4668fce4c597a6c8cd1d0f2ff8bc95e5 中修复了这个问题,所以你可以安装 sass-loader@10.0.5 (4认同)
  • @TylikStec yarn 是另一个包管理器,但不要在同一个项目中使用两者,有两个锁定文件可能会导致部署问题 (3认同)
  • 在一个类似于OP的全新React项目上,我有“node-sass”:“v5.0.0”和“sass-loader”:“^10.1.0”,但问题仍然存在。我的节点版本是15.3.0。当我卸载node-sass并重新安装@4.14.1时,问题仍然存在,因为我使用的是Node版本15.3.0,它需要node-sass版本5.0+。 (3认同)
  • 为什么这里似乎没有“正确”的解决方案?谁在拖延这件事的进展? (2认同)

Tit*_*ula 77

出现此类错误的唯一原因是您的节点版本与您的 node-sass 版本不兼容。

因此,请务必查看此处的文档:https : //www.npmjs.com/package/node-sass

或者下面这张图对你有帮助,node版本可以使用node-sass版本。

在此处输入图片说明

例如,如果您在Windows 上使用节点版本 12(“可能”),那么您应该安装node-sass 版本 4.12

npm install node-sass@4.12
Run Code Online (Sandbox Code Playgroud)

是的,就像那样。所以现在你只需要在你的电脑上安装node-sass团队推荐的node-sass版本即可。

  • 但我的节点版本是“v16.9.1”&amp;node-sass“6.0.1”与该节点版本兼容 (2认同)

小智 49

卸载 node-sass

npm uninstall node-sass
Run Code Online (Sandbox Code Playgroud)

通过以下方式使用sass

npm install -g sass
npm install --save-dev sass
Run Code Online (Sandbox Code Playgroud)

  • 使用这种方法时要小心。React-scripts 使用 sass-loader v8,它更喜欢 Node-sass 而不是 sass(它有一些 Node-sass 不支持的语法)。如果两者都安装并且用户使用 sass,这可能会导致 css 编译错误。 (6认同)
  • 避免针对项目特定依赖项进行全局安装。在项目存储库中,您始终可以使用 npx 示例“npx sass”引用本地依赖项。 (3认同)
  • 另外,要小心全局安装。 (2认同)

yoe*_*alb 39

node-sass2020 年 10 月 26 日起,又名LibSass正式弃用,您应该改用sassaka Dart Sass

因为npm你可以这样做:

npm uninstall node-sass
npm install sass --save-dev
Run Code Online (Sandbox Code Playgroud)

对于yarn做:

yarn remove node-sass
yarn add sass
Run Code Online (Sandbox Code Playgroud)


dha*_*kac 10

如果您碰巧将 CRA 与默认yarn包管理器一起使用,请使用以下内容。为我工作。

yarn remove node-sass 
yarn add node-sass@4.14.1
Run Code Online (Sandbox Code Playgroud)


Sat*_*pun 7

使用 npm,

  1. npm uninstall node-sass
  2. npm install node-sass
  3. package.json 中的in更改 "react-scripts": "4.0.0"为并保存"react-scripts": "4.0.3"
  4. npm install
  5. npm start

或者,使用纱线 -

  1. yarn remove node-sass
  2. yarn add --dev node-sass
  3. 如上
  4. yarn install
  5. yarn start


tng*_*ene 6

对我来说最好的解决方案是卸载 node sass。

npm uninstall node-sass

然后安装sass npm install sass

对于那些使用纱线的人

 yarn remove node-sass
 yarn add sass
Run Code Online (Sandbox Code Playgroud)


Jea*_*arc 5

根据Nicolas Hevia 的Edit2所说

sass-loader v10.0.5 修复了它

我启动了这个命令:

npm install sass-loader@^10.0.5 node-sass --save-dev
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题。

请注意,我处于开发环境中。--save-dev在其他情况下,应删除该选项。