当前位置: 首页 > news >正文

对老项目进行node升级兼容

前提

        我的项目是vue2+node14搭建的,现根据公司要求需要升级node至20以上。

        实际上,只要本地node切换到20版本,并且能正常运行起来就没什么问题。

        我使用了最简单粗暴的方法,直接切换到20版本,然后npm run dev,看有什么报错,可能会出现依赖包版本过低,或者依赖包不兼容node的问题。这样的话有什么问题就修复什么问题。

切换至node高版本并运行

nvm use 20
npm run dev

出现以下问题:

问题1: this[kHandle] = new _Hash

        该问题是因为 Node.js v20.12.0 使用了 OpenSSL 3.0,而某些模块或代码尝试使用了 OpenSSL 3.0 不再支持的算法或密钥大小。

        解决办法很多可以自行搜索,这里我选择了以下方法,使用跨平台的环境变量设置:

安装soncross-env:

npm install cross-env --save-dev

修改 package.json 中的脚本

原
"scripts": {"build": "webpack --config build/webpack.prod.config.js"
}更新
"scripts": {"build": "cross-env NODE_OPTIONS=--openssl-legacy-provider webpack --config build/webpack.prod.config.js"
}

        再次npm run dev运行

问题2:node-sass版本不兼容当前node版本

        由于node-sass已经不再被维护,所以推荐使用sass来代替node-sass。

1. 卸载node-sass

npm uninstall node-sass

2. 安装sass

npm install sass

3. 检查项目中使用node-sass的地方并替换为sass,如webpack配置中:

const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const { VueLoaderPlugin } = require('vue-loader');
const path = require('path');
const sass = require('sass'); // 引入 sassmodule.exports = {entry: `./src/main.js`,output: {filename: '[name].[hash:7].js',path: path.resolve(__dirname, 'dist'),},module: {rules: [{test: /\.js$/,use: 'babel-loader',exclude: /node_modules/,},{test: /\.vue$/,use: 'vue-loader',exclude: /node_modules/,},{test: /\.(eot|woff|woff2?|ttf|svg|png|jpe?g|gif)$/,use: [{loader: 'url-loader',options: {name: '[name]-[hash:5].min.[ext]',limit: 1000000,esModule: false},},],},{test: /\.(scss|css)$/,use: ['vue-style-loader','css-loader',{loader: 'sass-loader',options: {implementation: sass, // 指定使用 dart-sass},},],},],},resolve: {extensions: ['.js', '.vue', '.json'],alias: {'@': path.join(__dirname, '../src'),},},plugins: [new CleanWebpackPlugin(),new VueLoaderPlugin()],
};

具体修改内容有:

引入 sass

        在文件顶部添加了 const sass = require('sass');,以确保可以使用 sass

 const sass = require('sass');

修改 sass-loader 的配置

        在 rules 中,针对 scsscss 文件的处理规则中,将 sass-loader 的配置修改为:

{loader: 'sass-loader',options: {implementation: sass, // 指定使用 dart-sass},
}

        再次npm run dev,可成功运行。

更新package依赖

        也可以将项目里老的依赖包都升级下,我没做,可参考:

node版本升级,项目如果适配,并更新依赖_node 升级-CSDN博客

http://www.lqws.cn/news/94879.html

相关文章:

  • 生产环境MYSQL常见锁表场景
  • Vue3 中使用 i18n
  • 08.MySQL复合查询详解
  • 可视化大屏工具对比:GoView、DataRoom、积木JimuBI、Metabase、DataEase、Apache Superset 与 Grafana
  • LeetCode第244题_最短单词距离II
  • C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
  • Java复习Day26
  • 登高架设作业实操考试需要注意哪些安全细节?
  • Docker 镜像深度剖析:构建、管理与优化
  • 基于langchain的简单RAG的实现
  • AXURE安装+汉化-Windows
  • Axure形状类组件图标库(共8套)
  • jenkins结合gitlab实现CI
  • 详解开漏输出和推挽输出
  • Apache Doris 在数据仓库中的作用与应用实践
  • pikachu靶场通关笔记12 XSS关卡08-XSS之htmlspecialchars(四种方法渗透)
  • 奥威BI+AI数据分析:企业数智化转型的加速器
  • HTTP Error 400 Bad request 问题分析解决
  • 【前端并发请求控制:必要性与实现策略】
  • 如何进行页面前端监控
  • 手摸手还原vue3中reactive的get陷阱以及receiver的作用
  • SpringBoot3.2新特性:JdbcClient
  • web攻防之SSTI 注入漏洞
  • Windows 下部署 SUNA 项目:虚拟环境尝试与最终方案
  • 【从0-1的HTML】第2篇:HTML标签
  • Double/Debiased Machine Learning
  • 从仿射矩阵得到旋转量平移量缩放量
  • 【氮化镓】GaN HMETs器件物理失效分析进展
  • 【Java Web】7.事务管理AOP
  • 下载并运行自制RAG框架