背景:
在升级公司内部头部依赖包的时候遇到的问题:
在升级头部的时候,头部依赖的包,没有锁包,安装依赖库的时候包依赖的包会自动升级
├─┬ @cnstrong/xxx
│ ├─┬ eslint@6.8.0
│ │ ├─┬ inquirer@7.3.3
│ │ │ ├─┬ chalk@4.1.0
chalk@4.1.0需要node10以上版本;
服务器上的node版本是8,所以老项目大部分应该用到的都是node8的版本,项目中的npm库依赖于node8
大部分包对node版本兼容比较好,但是有少数的包比较强依赖node版本,比如node-sass包
由于公共头部依赖的node10,所以项目中更改node-sass版本,并且服务器上对应的需要升级node版本
解决方案
方案一
公共头部锁包,安装第三方依赖库的时候会优先选择yarn.lock文件的依赖关系(目前线上node8的版本号是8.11.4,所以,建议在本地yarn install的时候切换到该版本,并将本地生成的yarn.lockpush到仓库),线上依赖的包就不会自动升级
老项目不需要做node版本升级
方案二
所有项目统一升级到node10以上,服务器上安装了node10.15.3,所以比如可以统一升级到该node版本;
升级步骤:
- 找运维人员添加切换node10配置
- 本地安装node10.15.3
- yarn install(更新yarn.lock文件)
- git push到仓库
方案三
node-sass对node版本依赖性强,可以使用sass包替换, webpack中的配置:
- 使用node-sass的配置如下:
{
test: /\.(sc|sa)ss$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: 'css-loader',
options: {
modules: {
localIdentName: '[local]__[hash:base64:5]'
}
}
},
{
loader: "postcss-loader",
options: {
config: {
path: path.resolve(projectRoot, "build/postcss.config.js")
}
}
},
"sass-loader",
]
},
- 使用sass包更改后的配置如下:
{
test: /\.(sc|sa)ss$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: 'css-loader',
options: {
modules: {
localIdentName: '[local]__[hash:base64:5]',
},
},
},
{
loader: 'postcss-loader',
options: {
config: {
path: path.resolve(projectRoot, 'build/postcss.config.js'),
},
},
},
{
loader: 'sass-loader',
options: {
implementation: require('sass'), //使用dart-sass代替node-sass
},
},
],
},
总结
为了兼容老的项目,所以服务器环境仍然存在node低版本8.11.4;后续如果老项目有碰到依赖包与低版本node不兼容问题,修改jerkins打包配置,在打包时候切换到比较高的node版本
新建的项目仓库推荐大家使用比较高的版本,比如10.15.3版本,Jenkins上配置指定node版本