node-sass安装报错、node版本不兼容:npm install --ignore-scripts、NODE_OPTIONS=--openssl-legacy-provider npm run serve

 

node-sass安装依赖、启动报错问题

# 1. 安装依赖(跳过构建脚本)
  npm install --ignore-scripts

  # 2. 替换 sass
  npm uninstall node-sass && npm install sass --save-dev

  # 3. 启动项目(使用临时的 NODE_OPTIONS)
  
 修改脚本文件:
 "serve": "NODE_OPTIONS=\"--openssl-legacy-provider\" vue-cli-service serve --open --port 16903 --hot",
  
  NODE_OPTIONS=--openssl-legacy-provider npm run serve

  或者,如果你不想修改 package.json,可以直接使用:

  NODE_OPTIONS=--openssl-legacy-provider npm run serve

  注意事项:

  1. Node.js 版本:项目使用的是较老的 Vue 2 生态,建议使用 Node.js 14-16
  版本以避免兼容性问题
  2. 端口配置:项目默认配置在端口 16903 上
  3. 热重载:项目中已经启用了 --hot 选项,支持热重载

  这些额外操作主要是因为项目技术栈较老(Vue 2 + Vue CLI 4),与新版本的
  Node.js 和 Apple M1 芯片存在兼容性问题。
 
 

 

npm install --ignore-scripts 的作用非常简单:

它会安装依赖,但完全跳过所有生命周期脚本的执行

也就是说,以下脚本都不会执行:

  • preinstall

  • install

  • postinstall

  • prepare

  • prepublish

  • prepack

包括许多包常见的自动构建脚本,例如:

  • node-sass 下载 binding 的脚本(你之前的错误就是这个)

  • esbuild 自动下载二进制

  • husky 自动创建 .husky 目录

  • sharp 下载编译依赖

  • corepack prepare 脚本

什么时候用?

通常在两种场景:


1. 避免执行有问题的 install 脚本(如 node-sass 下载失败)

例如你遇到的错误:
node-sass 会在 install 阶段下载二进制,如果网络不通或镜像错误,就会失败。

使用:

 
npm install --ignore-scripts

可以先成功装依赖(但是 node-sass 不能正常使用)。


2. 你想在 CI 或某些环境里不执行 prepare/husky 等脚本

比如 Docker 构建时不希望执行 husky。


⚠️ 注意事项(非常重要)

因为整个安装脚本都跳过了,一些依赖会不可用,例如:

  • node-sass → 缺少 binding,会直接报错

  • sharp → 没有下载 C++ 二进制,不能用

  • esbuild → 不会下载 native binary

  • pnpm / corepack → 不会 create symlink

  • husky → 不会生成 hooks

所以这是一个 应急手段,不应作为正常安装方式。


如果你是为了解决 node-sass 4.14.1 下载失败的问题

推荐替代方案:

✅ 1. 直接换成 sass(dart-sass)

node-sass 已废弃,而且和 Node 16/18/20 不兼容:

 
npm uninstall node-sass npm install sass

✅ 2. 如果项目必须用 node-sass(旧项目)

手动安装 binding:

 
npm install node-sass --sass-binary-site=https://npmmirror.com/mirrors/node-sass/

或设置镜像:

 
export SASS_BINARY_SITE=https://npmmirror.com/mirrors/node-sass/
 

 

让 Node 使用旧版的 OpenSSL Provider 以兼容老旧依赖:

NODE_OPTIONS=--openssl-legacy-provider npm run serve
 
node版本不兼容处理
 
 

许多旧项目(尤其是 Webpack4 / vue-cli2/3 / node-sass / crypto 等)在 Node 17+(含 Node 18、20、22) 会报错:

Error: error:0308010C:digital envelope routines::unsupported

原因是:
Node 17+ 默认采用 OpenSSL 3,而很多老的打包工具使用的是已经被移除的哈希算法。

所以通过:

 
NODE_OPTIONS=--openssl-legacy-provider

强制启用 legacy provider,让这些旧代码继续跑。

 

⭐ 更推荐的长期方案

1. 升级到 Webpack 5

  • 完全兼容 Node 新版本

  • 无需 legacy-provider

2. 替换 node-sass → sass(dart-sass)

node-sass 已废弃,和 Node 18/20/22 都不兼容。

 
npm uninstall node-sass npm install sass

3. 升级 vue-cli

  • vue-cli 2 → 直接迁移到 Vite

  • vue-cli 3 / 4 → 可升级到 vue-cli 5(支持 Node 18)

posted @ 2025-12-11 10:01  SimoonJia  阅读(10)  评论(0)    收藏  举报