解决在Apple silicon下的node-sass的问题

date
Mar 14, 2024
slug
解决在Apple silicon下的node-sass的问题
status
Published
tags
疑难问题
summary
node-sass根据Node版本的不同有兼容性问题。当node-sass版本很低时,需要一个低版本的Node,而且还可能伴随着需要python2(新版本的macOS已将其移出),所以需要通过brew安装pyenv安装python2才能顺利运行(参考https://dev.to/jordicuevas/how-to-install-python2-in-a-macbook-m1-with-brew-bhi)。所以本质上来说,并不是node-sass和Apple silicon的Mac有兼容性问题,只是因为Apple silicon的Mac的系统版本都较高,所以都没有python2环境了。如果Intel的Mac系统版本高也是会遇到同样的问题的。
type
Post
node-sass根据Node版本的不同有兼容性问题。当node-sass版本很低时,需要一个低版本的Node,而且还可能伴随着需要python2(新版本的macOS已将其移出),所以需要通过brew安装pyenv安装python2才能顺利运行(参考https://dev.to/jordicuevas/how-to-install-python2-in-a-macbook-m1-with-brew-bhi)。所以本质上来说,并不是node-sass和Apple silicon的Mac有兼容性问题,只是因为Apple silicon的Mac的系统版本都较高,所以都没有python2环境了。如果Intel的Mac系统版本高也是会遇到同样的问题的。
在用nvm安装低版本Node时(>12),可以从源码编译,以获得Apple silicon原生Node。更低版本的Node(<12)即使从源码编译也很容易失败,可能要使用rosetta2来转译才能顺利安装,参考https://stackoverflow.com/questions/67254339/nvm-install-node-fails-to-install-on-macos-big-sur-m1-chip/75940094#75940094
一个更好的办法是,将node-sass替换为sass,后者有更好的Node兼容性。有两种方法,第一种是通过packge.json中写`resolution: { “node-sass”: “yarn:sass”}`,或者是yarn add node-sass@yarn:dart-sass -D (参考https://juejin.cn/post/6988698858754686983)。

© ryougifujino 2021 - 2025