解决 Mac 系统上的 node-sass 问题

server/2025/1/17 12:27:30/

sass__0">解决 Mac 系统(尤其是 M1/M2)上的 node-sass 问题

问题描述

在 Mac 系统上使用 node-sass 时,经常会遇到以下错误:

Node Sass does not yet support your current environment: OS X 64-bit with Unsupported runtime (108)

或者:

Node Sass could not find a binding for your current environment: Darwin 64-bit with Node.js X.X.X

这些问题在 M1/M2 芯片的 Mac 设备上尤为常见,主要原因包括:

  1. node-sass 与 Node.js 版本不兼容
  2. Apple Silicon 架构的兼容性问题
  3. 二进制文件绑定失败

解决方案

方案一:迁移到 Dart Sass(强烈推荐)

node-sass 已被官方废弃,推荐迁移到 Dart Sass。

# 1. 卸载 node-sass
npm uninstall node-sass# 2. 安装 sass (dart-sass)
npm install -D sass

更新 package.json:

{"dependencies": {"sass": "^1.69.5"},"scripts": {"sass": "sass src/styles:dist/styles","sass:watch": "sass --watch src/styles:dist/styles"}
}

sass_49">方案二:使用特定版本的 node-sass

如果必须使用 node-sass,请确保使用正确的版本:

Node.js 版本node-sass 版本
Node 209.0.0
Node 188.0.0
Node 167.0.0
Node 146.0.0
# 安装特定版本
npm install node-sass@7.0.0 --save-dev

sass_65">方案三:重新构建 node-sass

# 清除 npm 缓存
npm cache clean -f# 删除 node_modules
rm -rf node_modules package-lock.json# 重新安装依赖
npm install# 重新构建 node-sass
npm rebuild node-sass

方案四:使用 nvm 管理 Node.js 版本

# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash# 安装并使用特定版本的 Node.js
nvm install 16
nvm use 16# 然后重新安装项目依赖
npm install

最佳实践建议

1. 新项目配置

对于新项目,直接使用 Dart Sass:

{"devDependencies": {"sass": "^1.69.5"}
}

2. Webpack 配置

// webpack.config.js
module.exports = {module: {rules: [{test: /\.scss$/,use: ['style-loader','css-loader','sass-loader' // 会自动使用已安装的 sass]}]}
}

3. Vue CLI 项目配置

// vue.config.js
module.exports = {css: {loaderOptions: {sass: {implementation: require('sass')}}}
}

常见问题解答

Q1: 迁移到 Dart Sass 后需要修改现有代码吗?

A1: 大多数情况下不需要。Dart Sass 完全兼容 node-sass 的语法。

Q2: 性能会受影响吗?

A2: Dart Sass 通常比 node-sass 性能更好,尤其在 M1/M2 芯片上。

Q3: 如何处理旧项目的依赖?

A3: 建议逐步迁移到 Dart Sass,可以先在新功能中使用,然后逐步替换。

预防措施

  1. 在项目初始化时就使用 Dart Sass
  2. 在 package.json 中锁定依赖版本
  3. 使用 .nvmrc 文件指定 Node.js 版本
  4. 定期更新依赖包

结论

  1. 优先选择 Dart Sass,避免使用 node-sass
  2. 如果必须使用 node-sass,确保版本兼容性
  3. 保持依赖包更新
  4. 使用版本管理工具处理 Node.js 版本

参考资源

  • Sass 官方文档
  • node-sass 仓库
  • Dart Sass 仓库

http://www.ppmy.cn/server/159079.html

相关文章

63. 不同路径 II

63. 不同路径 II 题目-中等难度1. 题目-中等难度 给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0])。机器人尝试移动到 右下角(即 grid[m - 1][n - 1])。机器人每次只能向下或者向右移动一步。 网格中…

高防cdn有用吗?防护怎么样?

网络攻击的手段日趋多样化,尤其是针对高流量网站和在线业务。在这种情况下,高防CDN(内容分发网络)作为一种新兴的网络安全防护工具,越来越受到企业和网站管理者的关注。那么,高防CDN究竟有用吗?…

C++基础入门(二)

目录 前言 一、重载 1.函数重载 2.运算符重载 二、构造函数 1.什么是构造函数 2.带参数的构造函数 3.使用初始化列表 4.this关键字 5.new关键字 三、析构函数 1.什么是析构函数 四、静态成员变量 1.静态成员的定义 2.静态成员变量的作用 五、继承 1.继承基本概…

MySQL使用正则表达式查询

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

salesforce flow结束后如何自动返回上一步页面

在 Salesforce Lightning 环境中,如果你做的是 Screen Flow(屏幕流),默认情况下当用户点击 “Finish” (完成) 按钮时,Flow 会直接结束,并停留在 Flow 最后一个屏幕或弹窗上。很多人希望 Flow 结束后自动返…

C++ macro: The ## operator

C macro: The ## operator 1. The ## operator2. Concatenation (连接)References 1. The ## operator The ## (double number sign) operator concatenates two tokens in a macro invocation (text and/or arguments) given in a macro definition. The last token of the …

【北京迅为】iTOP-4412全能版使用手册-第七十三章 Qt信号和槽

iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、…

校园跑腿小程序--我的,登录和注册页面开发

hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…