当前位置: 首页 > 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博客

相关文章:

  • 笔记本电脑开机无线网卡自动禁用问题
  • 日语输入法怎么使用罗马字布局怎么安装日语输入法
  • 飞牛fnNAS使用群辉DSM系统
  • ABP-Book Store Application中文讲解 - Part 7: Authors: Database Integration
  • .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
  • 高性能MCU的MPU与Cache优化详解
  • 焊缝缺陷焊接缺陷识别分割数据集labelme格式5543张4类别
  • STM32单片机编程中标志变量的思想无处不在
  • CppCon 2014 学习:CHEAP, SIMPLE, AND SAFE LOGGING USING C++ EXPRESSION TEMPLATES
  • 《矛盾论》可以带给我们什么?
  • Gradle依赖管理全面指南:从基础到高级实践
  • 第一章 1.The Basic (CCNA)
  • Lua和JS的垃圾回收机制
  • 安全月报 | 傲盾DDoS攻击防御2025年5月简报
  • 【QT】认识QT
  • 帝可得 - 设备管理
  • 【C/C++】初步了解享元模式
  • 小黑一步步探索大模型应用:langchain中AgentExecutor的call方法初探demo(智能体调用)
  • React从基础入门到高级实战:React 高级主题 - React 微前端实践:构建可扩展的大型应用
  • AtCoder Beginner Contest 408(ABCDE)
  • dede做电影网站/百度升级最新版本
  • 网站建设全视频教程下载/惠州网络营销
  • 免费网络短剧网站/百度认证号码平台
  • 桂林北站到象鼻山景区怎么坐车/爱网站关键词查询工具长尾
  • 程序员自己做网站怎么赚钱/google关键词搜索技巧
  • 怎么做lol网站/营销和销售的区别在哪里