Node.js升级背景
当前node版本 12,官方已不再维护。详见Node.js发布计划
活跃版本发布时间表(截止2014.01.23)
已终止维护版本(截止2014.01.23)
升级流程
选择Node.js版本
从Node.js发布计划可知,除了Node.js 18处于稳定的维护状态外,其余版本仍在更新。且根据官方v18新特性说明来看,选择了v18。
管理Node.js版本
使用nvm管理node版本,完整用法参考官方文档
- 安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
- nvm用法
// 安装最新版node
$ nvm install node
// 安装指定版node
$ nvm install 16.3.0
// 查看所有可用版本
$ nvm ls-remote
// 使用指定版本node
$ nvm use 16.3.0
限制node版本
安装时限制版本
为保证项目的开发者们环境统一,package.json中增加engines限制node版本
"engines": {
"node": "18.x"
}
nvm 快捷切换版本
在.nvmrc文件中(不存在就创建)指定Node.js版本
v.18.3
$ nvm use #无需指定版本号,会自动使用.nvmrc文件中指定的版本
本地环境升级
升级node版本
- 查看node版本
$ node -v
- 安装node v18,安装完成后会自动切换到v18
$ node -i 18.3
- 查看本地node
$ nvm ls
更新项目依赖
- 删除package.lock.json
- 删除node_modules/
- 重新安装依赖包
$ rm -rf package.lock.json
$ rm -rf node_modules
$ npm cache clean --force
$ npm install
- 重新安装全局依赖包,参考# How to properly upgrade node using nvm
nvm install NEW_VERSION --reinstall-packages-from=OLD_VERSION
// eg: nvm install 18.3.0 —reinstall-packages-from=12.22.12
注:当时升级node时没有使用这种方式,而是在遇到XXX not found报错时,单独安装了全局依赖包
验证过程
依次执行开发模式脚本、生产模式脚本验证项目是否可以正常运行
$ npm run dev
$ npm run build
发布系统环境升级
过程同本地开发环境类似。
- 指定发布系统的node版本;
- 清除旧的依赖包(一般情况下,发布系统环境没有node_modules/,只清除npm缓存即可)
$ npm cache clean --force
- 安装依赖包
$ npm i
问题&解决
npm i 没有安装devDependencies下的依赖包
在发布系统环境上,出现XXX not found问题。本地环境开发模式无问题,可知依赖包存在。切换至生产模式,npm i后node_modules/下没有依赖包文件,手动安装依赖后,又有其他依赖包找不到,后发现找不到的均是devDependencies依赖。
根据npm官方介绍,当 NODE_ENV === 'production',或者npm i --production,npm 不会安装devDependencies下列出的模块。发布系统环境是生产环境,NODE_ENV = production,故没有安装开发依赖。
By default,
npm installwill install all modules listed as dependencies inpackage.json.With the
--productionflag (or when theNODE_ENVenvironment variable is set toproduction), npm will not install modules listed indevDependencies. To install all modules listed in bothdependenciesanddevDependencieswhenNODE_ENVenvironment variable is set toproduction, you can use--production=false.
NOTE: The
--productionflag has no particular meaning when adding a dependency to a project.
解决方案
本次采用了方式一,方式二未验证
// 方式一
NODE_ENV=development
npm cache clean --force
# 安装依赖
npm install
NODE_ENV=production
// 方式二(待验证)
npm cache clean --force
# 安装依赖
npm install --production=false
编译plyr失败
升级node版本到18后,启动项目,以下错误,当前plyr版本 3.7.8
ERROR Failed to compile with 1 errors
error in ./node_modules/plyr/dist/plyr.min.js
Module parse failed: Unexpected token (1:11056)
You may need an appropriate loader to handle this file type.
解决方案
"plyr": "3.6.4" // 写死版本