苹果M1芯片、Big Sur操作系统和arm64架构下的Node Sass

90
 Error: Node Sass does not yet support your current environment: OS X Unsupported architecture (arm64) with Unsupported runtime (93)
 For more information on which environments are supported please see:
 https://github.com/sass/node-sass/releases/tag/v4.14.1
at module.exports (/Users/hhag/Desktop/test_gulp/node_modules/node-sass/lib/binding.js:13:13)
at Object.<anonymous> (/Users/hhag/Desktop/test_gulp/node_modules/node-sass/lib/index.js:14:35)
at Module._compile (node:internal/modules/cjs/loader:1109:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1138:10)
at Module.load (node:internal/modules/cjs/loader:989:32)
at Function.Module._load (node:internal/modules/cjs/loader:829:14)
at Module.require (node:internal/modules/cjs/loader:1013:19)
at require (node:internal/modules/cjs/helpers:93:18)
at Object.<anonymous> (/Users/hhag/Desktop/test_gulp/node_modules/gulp-sass/index.js:166:21)
at Module._compile (node:internal/modules/cjs/loader:1109:14)

当我开始使用gulp时,发生了这个错误。在Apple M1上使用gulp-sass有解决方法吗?谢谢。

14个回答

118

我在M1上安装node-sass时遇到了问题,最终按照LibSass的弃用通知建议将其替换为sass

https://sass-lang.com/blog/libsass-is-deprecated

如果您使用Node Sass,迁移到Dart Sass很简单:只需在package.json文件中将node-sass替换为sass。这两个软件包均公开相同的JavaScript API。

正如@Ti Hausmann所提到的,您可以尝试:

npm uninstall node-sass
npm install --save-dev sass

替换过程非常顺利,它在M1上运行良好,我无法在本地或CI上注意到任何性能影响。


18
谢谢,这个方法可行。我执行了 npm uninstall node-sassnpm install --save-dev sass - Ti Hausmann
看起来m_kos的回答更合理,只需更改node-sass中的依赖项。 - baszak

87

对于 npm > 6.9,您只需更改一行代码即可将依赖项切换到 dart-sass/sass,然后像以前一样使用 sass。

npm install node-sass@npm:sass


6
我相信这是正确的答案,上面的所有其他内容都没有帮助。 - mcmxc
1
就像 mcmxc 说的那样! - Daantie
1
谢谢兄弟,它对我有用。 - Mehrad Farahnak
2
yarn add sass 对我有用。 - geoidesic
1
目前这个方法可行,但是我不确定一旦它被放入像 Git 这样的源代码控制系统中,并且其他机器上的同事也在进行开发时,它会有什么样的表现,因为锁文件也需要提交! - Vikram K
显示剩余3条评论

34

我认为你正在使用M1芯片的Mac电脑。而node-sass目前不支持该芯片的本地运行。请参见:https://github.com/sass/node-sass/issues/3033

现在,您可以通过以下方式设置目标架构,在Rosetta上运行它:

rm -rf node_modules
npm install --target_arch=x64

嗨,Murart Corlu 当我尝试使用Dockerfile构建镜像时,它在本地机器上运行正常,但无法安装软件包。任何帮助将不胜感激。 - khizer
1
我使用dockerfile遇到了同样的问题。如果您已经解决了这个问题,能否请您分享一下您的解决方案? - Kapil Gupta
有没有Docker的解决办法@khizer? - Hafiz Siddiq
@KapilGupta 你能想办法解决这个问题吗? - Hafiz Siddiq
1
出色的捕捉,谢谢Murart。 - Himanshu Patel

19

在使用node-sass开发Vue.js项目时,我遇到了同样的错误。 我通过降级到Node版本14来解决了这个问题。

我使用了一个名为n的Node版本管理应用程序。请参阅此答案:https://dev59.com/XVYN5IYBdhLWcg3wuaJx#50287454

检查您正在使用哪个Node版本。

$ node -v 
v16.3.0

安装 n

$ npm install -g n

获取可安装的 Node 版本列表

$ n ls-remote --all
16.3.0
16.2.0
..
15.14.0
15.13.0
..
14.17.0
14.16.1
..

安装Node的14版本

$ sudo n install 14


2
请注意,如果之前使用brew安装过node,则需要使用brew uninstall node卸载brew的node,以便n节点版本生效。+1 - yeyo
我不想降级 Node 版本,还有其他的修复方法吗? - Bilal Hussain

6
为了完整回答,补充一下,我在使用 Serverless 框架 (https://www.serverless.com/) 的时候遇到这个问题。
我在使用 Node 16 和 17 时出现了 node gyp 构建错误。
我使用 nvm 安装了 Node 版本 14,这解决了我的问题。
修复步骤如下:
  1. nvm install v14
  2. nvm use 14
然后我就能执行 yarn 命令并正确安装和构建了。

2
从 Node 17 降级到 Node 14 解决了我的问题。 - Umesh Naik

5
  1. yarn add sassnpm install sass
  2. 在 package.json 文件中将 "node-sass": 替换为 "sass":
  3. rm -rf node_modules && npm install

对我的 M1 MBP 有效。


4

这是官方建议 per gulp-sass Issue #803 - 支持苹果M1芯片

转换为Sass编译器:说明

TL;DR:

  1. 安装不包含默认Sass编译器的node-sass 5版本:

npm install sass gulp-sass --save-dev

或,Yarn

yarn add sass gulp-sass --save-dev

  1. 在gulpfile中显式设置你的编译器:

const sass = require('gulp-sass')(require('sass'));

或者对于ES6模块:

import gulpSass from 'gulp-sass';
const sass = gulpSass(dartSass);

4

1
这是拯救了我千万小时的答案。只需要降级到Node 14,问题就解决了。 - MDalprato
这是我尝试了很久后唯一有效的方法! - undefined

2

在m1中切换到Sass非常好用,正如顶部答案所指出的那样。现在我们应该始终使用Sass代替node-sass,因为它已经被弃用了。

这里我想指出一个可能会遇到的情况。如果是这种情况,我认为这将节省您一些时间。

情况

您通过npm uninstall或者npm install node-sass@npm:sass(如第二个答案所指出的)来删除node-sass,并且删除了node-modulespackage-lock.json
但仍然存在相同的问题,而且某种方式下node-sass正在被编译。

尝试安装sass后仍然无法工作?

如果是这种情况,请确保检查您的依赖项版本。很有可能其中一些依赖于旧版本的node-sass。

例如:

    "sass-loader": "^8.0.2",
    "styles-loader": "^1.0.2"

将版本更新为最新版本 =>

    "sass-loader": "^12.4.0",
    "styles-loader": "^3.0.0"

应该可以了。确保检查所有依赖项,这些依赖项可能依赖于 node-sass 并将它们更新。

如果出现问题,你可以尝试添加:

  "optionalDependencies": {
    "node-sass": "*"
  }

package.json 文件。但我认为这并不是必要的。


1

我在使用全新的macOS Monterey M1芯片Macbook Pro时遇到了很多问题。除了通过以下命令设置NPM安装的目标架构之外,没有任何解决方案有效。

npm install --target_arch=x64

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