起因
起因是我要有一個老的vue2 + iview的項目,幾年前的,一直在開發(fā)和維護,也不大可能轉(zhuǎn)到vue3 ,然后新開發(fā)的項目都是vue3開發(fā)的,于是我之前費了一些功夫,把vue2的項目兼容度提高,支持到14版本的,然后去掉一些插件,逐漸換成只了支持16,后面就一直卡著不動了。今天升級vue3的某些插件的時候,終于打破了平衡,新的插件,16 版本nodejs 已經(jīng)不支持了,要升級到18版本才行,但是vue2項目就不行了,怎么都啟動成功。
找到原因
經(jīng)過多次測試,和通過AI分析,總結(jié)的是 由于 Node.js 18 對 OpenSSL 3 的默認配置更嚴格導(dǎo)致的,主要影響了 Webpack 等工具的哈希算法使用。
解決辦法
AI提供了很多解決辦法,但是最簡單的辦法就是這個:
1.安裝跨環(huán)境命令
npm install cross-env --save-dev
2.修改 package.json 把scripts中,所有 vue-cli-service 命令前面加上
cross-env NODE_OPTIONS=--openssl-legacy-provider
示例:啟動和編譯
"serve":"cross-env NODE_OPTIONS=--openssl-legacy-provider vue-cli-service serve --open"
"build":"cross-env NODE_OPTIONS=--openssl-legacy-provider vue-cli-service serve build"
這樣項目就可以用nodejs 最新版本打包和運行了
build 的告警信息
build 項目的時候,會有告警信息,類似這樣:
[buildVueCli ] Browserslist: caniuse-lite is outdated. Please run:
[buildVueCli ] npx update-browserslist-db@latest
按照要求執(zhí)行這個命令即可:
npx update-browserslist-db@latest