node-sass在内网环境下的安装编译报错
问题描述
升级node版本后,本地编译成功,将本地node_modules.zip
传到云效,在云效(linux
)服务器编译前端报错,node-sass找不到binding.node
问题分析
node升级后一般都要重装node-sass,本地执行 npm rebuild node-sass
即可,但是云效服务器编译报错,原因在于win和linux需要安装的node-sass不同造成的。
问题解决
本地(window)环境,node升级后编译打包正常,将代码和node_modules.zip
上传到云效,由于本地无法为linux
系统安装node-sass
,所以可以下载linux
对应的node-sass版本,放在 node_modules/node-sass/vendor
文件夹下。此时不需要在再执行 npm rebuild node-sass
了,重新在云效执行编译即可。
注意 win 和 linux 版本要对应
# win
- vendor
-- win32-x64-88
--- binding.node
# linux
-- linux-x64-88
--- building.node
备注问题
- 编译和打包报警告
Deprecation Warning: Using / for division outside of calc() is deprecated and will be removed in Dart Sass 2.0.0.
# 提示:sass2.0.0 之后弃用除法符号“/”,sass自定义element theme时会报warnning。
# 解决方法
npm install -g sass-migrator
cd node_modules
sass-migrator division **/*.scss
- 也可以考虑弃用node-sass改用dart-sass来解决问题,以下:
- 升级node后考虑弃用node-sass,改用dart-sass,但是安装dart-sass后依然报上面的警告。
EPRECATION WARNING: Using / for division is deprecated and will be removed in Dart Sass 2.0.0.
Recommendation: math.div($px, $html-font-size)
More info and automated migrator: https://sass-lang.com/d/slash-div
╷
18 │ @return $px / $html-font-size * 1rem;
│ ^^^^^^^^^^^^^^^^^^^^^
# sass版本 >1.26.x 对 / (除法)做了优化 ,不提倡用了。所以还用 / (除法)的话,最高版本只能1.26.x
# 所以解决这个问题的方法就是在package.json文件中:
# "sass": "^1.26.5", 替换为 "sass": "~1.26.5",
"sass": "~1.26.5",
"sass-loader": "^8.0.2"