惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
Malwarebytes
Malwarebytes
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cybersecurity and Infrastructure Security Agency CISA
F
Future of Privacy Forum
C
Cisco Blogs
T
The Exploit Database - CXSecurity.com
A
Arctic Wolf
S
Securelist
K
Kaspersky official blog
S
Schneier on Security
T
ThreatConnect
T
Tenable Blog
Spread Privacy
Spread Privacy
T
True Tiger Recordings
AWS News Blog
AWS News Blog
F
Fox-IT International blog
量子位
T
Threatpost
V
Vulnerabilities – Threatpost
C
CERT Recently Published Vulnerability Notes
Cisco Talos Blog
Cisco Talos Blog
GbyAI
GbyAI
宝玉的分享
宝玉的分享
腾讯CDC
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
Cyberwarzone
Cyberwarzone
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
U
Unit 42
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
O
OpenAI News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
MyScale Blog
MyScale Blog
小众软件
小众软件
A
About on SuperTechFans
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
博客园 - 三生石上(FineUI控件)
美团技术团队
Google Online Security Blog
Google Online Security Blog
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog

博客园 - lizhigang

前端项目 Docker 镜像构建完整操作总结 - lizhigang Windows 11 下使用 MySQL Workbench 还原多数据库备份文件操作指南 在 WSL2 + Docker Desktop 环境下构建前后端 Docker 镜像 - lizhigang 从内网私有仓库迁移镜像到阿里云 ACR 完整指南 wsl网络设置允许访问ssh(端口22) 在 Windows 11 上安装 Docker Nginx配置 访问数据库报错 Windows系统运行RuoYi-Vue完整指南 RuoYi-Vue 项目结构分析 win11 报错 windows 11 如何使用 Microsoft Hyper-V VMware 替代产品 IntelliJ IDEA 社区版支持 Spring Boot 开发说明文档 imes开发部署(IDEA社区版 差异) IntelliJ IDEA 社区版默认支持 Spring Boot 吗? imes开发部署 IDEA 端口被占用 解决办法 使用MySQL Workbench进行数据库备份 ruoyi-nbcio ktg-mes、ktm-mes-ui部署 Widows下安装和配置Redis Windows下Redis安装与配置全攻略 mes开源 imes:注意 若依框架:开源
使用 pnpm 构建 Vue2 项目操作总结(Node 16 → Node 22)
lizhigang · 2026-05-25 · via 博客园 - lizhigang

https://chat.deepseek.com/share/ctmwyshe15fzmnpam9

使用 pnpm 构建 Vue2 项目操作总结(Node 16 → Node 22)

本指南适用于从 npm + Node.js 16 迁移到 pnpm + Node.js 22 的开发环境。核心流程:先切到 Node 16,从原有 package-lock.json 提取 canvgjqueryjsbarcodejspdfsocket.io-clientrequest 等依赖的精确版本,更新 package.json;再切回 Node 22,用 pnpm 安装依赖并启动开发服务器。


一、准备工作

1.1 确认当前项目结构

  • 项目根目录下存在 package.jsonpackage-lock.json(npm 原始 lock 文件)
  • 项目使用的构建工具为 vue-cli-service(Vue CLI)

1.2 安装 Node.js 版本管理工具(推荐 nvm)

安装完成后,确保终端可运行 nvm 命令。


二、从 package-lock.json 提取精确依赖版本

2.1 切换到 Node.js 16

nvm install 16
nvm use 16
node -v   # 应显示 v16.x.x

2.2 查找目标依赖的实际安装版本

在原有 npm 环境中执行:

npm list canvg jquery jsbarcode jspdf socket.io-client request --depth=0

或者直接打开 package-lock.json,搜索以下包名并记录 version 字段:

包名 示例版本(请以实际为准)
canvg 3.0.11
jquery 3.7.1
jsbarcode 3.12.3
jspdf 2.5.2
socket.io-client 4.8.3
request 2.88.2

2.3 将精确版本写入 package.json

打开项目的 package.json,在 dependenciesdevDependencies 中添加(根据原项目归属):

"dependencies": {
  "canvg": "3.0.11",
  "jquery": "3.7.1",
  "jsbarcode": "3.12.3",
  "jspdf": "2.5.2",
  "socket.io-client": "4.8.3",
  "request": "2.88.2"
}

注意request 已废弃但项目仍依赖,保留原版本即可。

2.4 清理冲突或无用依赖(可选)

package.json 中包含 @dhtmlx/trial-vue-gantt 等要求 Vue 3 的包且项目实际未使用,建议删除,避免后续兼容问题。

保存 package.json


三、切换到 Node.js 22 并安装 pnpm

3.1 使用 Node.js 22

nvm install 22
nvm use 22
node -v   # 应显示 v22.x.x

3.2 全局安装 pnpm

npm install -g pnpm

Windows PowerShell 权限问题处理(如报错 “无法加载 pnpm.ps1”):
以管理员身份运行 PowerShell,执行:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

验证安装:

pnpm -v

四、使用 pnpm 安装依赖

4.1 执行安装

进入项目根目录,删除旧的 node_modulespackage-lock.json(可选但建议):

rm -rf node_modules package-lock.json

然后执行:

pnpm install

首次安装会自动生成 pnpm-lock.yaml,并可能提示部分依赖的构建脚本被忽略(如 core-jshighlight.jsyorkie)。

4.2 处理被忽略的构建脚本

若出现类似以下提示:

[ERR_PNPM_IGNORED_BUILDS] Ignored build scripts: core-js@3.49.0, highlight.js@9.18.5, yorkie@2.0.0

需要批准这些包运行必要的安装脚本(例如 yorkie 用于 Git hooks)。

方法一(推荐):交互式批准

pnpm approve-builds
  • 使用键盘方向键移动光标
  • 空格键选中需要构建的包:core-jsyorkiehighlight.js 可选)
  • 按回车确认,等待脚本执行完毕

方法二:手动重建特定包

pnpm rebuild core-js yorkie

完成此步骤后,后续 pnpm installpnpm run dev 不再报 ERR_PNPM_IGNORED_BUILDS 错误。


五、配置项目以兼容 Node.js 22

5.1 安装 cross-env(跨平台环境变量工具)

pnpm add -D cross-env

5.2 修改 package.json 中的 scripts

vue-cli-service 相关命令添加 cross-env NODE_OPTIONS=--openssl-legacy-provider,解决 Node.js 22 中 OpenSSL 及 http_parser 兼容问题。

修改后的示例:

"scripts": {
  "dev": "cross-env NODE_OPTIONS=--openssl-legacy-provider vue-cli-service serve",
  "build:prod": "cross-env NODE_OPTIONS=--openssl-legacy-provider vue-cli-service build",
  "build:stage": "cross-env NODE_OPTIONS=--openssl-legacy-provider vue-cli-service build --mode staging",
  "preview": "cross-env NODE_OPTIONS=--openssl-legacy-provider node build/index.js --preview",
  "lint": "eslint --ext .js,.vue src"
}

5.3 配置 Webpack 转译现代语法依赖(如遇 Module parse failed 错误)

若启动时报错:

Module parse failed: Unexpected token (xx:xx)
File was processed with these loaders:
...
You may need an additional loader to handle the result of these loaders.

通常来自 iobufferfast-png 等包使用了类字段语法。在项目根目录的 vue.config.js 中添加:

module.exports = {
  // ... 原有配置
  transpileDependencies: ['iobuffer', 'fast-png']
}

5.4 可选:启用 shamefully-hoist(兼容非标准模块引用)

vue-plugin-hiprint 等插件使用非标准的 require('canvg') 方式引用依赖,在 pnpm 默认严格隔离结构下可能找不到模块。可在项目根目录创建 .npmrc 文件:

shamefully-hoist=true

然后删除 node_modulespnpm-lock.yaml,重新执行 pnpm install。此选项会模拟 npm 扁平化结构,将依赖提升到顶层 node_modules


六、启动开发服务器

6.1 执行启动命令

pnpm run dev

等待编译完成,控制台输出类似:

App running at:
- Local:   http://localhost:81/
- Network: http://10.204.52.41:81/

6.2 浏览器访问

打开上述地址,验证项目是否正常运行。


七、常见问题与解决方法

错误现象 可能原因 解决方法
cross-env 不是内部或外部命令 cross-env 未安装或未正确链接 重新执行 pnpm add -D cross-env
No such module: http_parser Node.js 22 默认使用 OpenSSL 3.0,与旧版模块不兼容 确保 dev 脚本已添加 cross-env NODE_OPTIONS=--openssl-legacy-provider
Module parse failed: Unexpected token 某些依赖使用了现代语法(类字段等),Webpack 4 默认不转译 node_modules vue.config.js 中添加 transpileDependencies: ['iobuffer', 'fast-png'](根据报错包名调整)
ERR_PNPM_IGNORED_BUILDS pnpm 出于安全考虑忽略部分构建脚本 运行 pnpm approve-builds 并选中 core-js, yorkie
模块找不到 canvg / jquery pnpm 严格隔离导致插件无法解析依赖 启用 shamefully-hoist=true,删除 node_modules 重装
启动后页面空白或接口报错 代理配置、环境变量与包管理器无关 检查 .env.developmentvue.config.js 中的 devServer 代理设置
pnpm install 卡住不动 网络问题或仓库源速度慢 配置 pnpm 镜像源:pnpm config set registry https://registry.npmmirror.com

八、生产构建与注意事项

  • 生产构建:使用 pnpm run build:prodpnpm run build:stage(根据项目配置)。
  • CI/CD 环境:若流水线使用 Node.js 22 + pnpm,需在流水线脚本中同样设置 NODE_OPTIONS=--openssl-legacy-provider
  • 废弃包警告requestvue@2 等警告不影响运行,可暂不处理,待后续重构。
  • 团队协作:提交 pnpm-lock.yaml 到代码仓库,确保所有成员使用相同版本。在 README.md 中注明现已迁移到 pnpm,安装步骤为 pnpm install

九、完整迁移检查清单


文档版本:1.0
最后更新:2026-05-25
适用环境:Windows / macOS / Linux,Node.js 22 + pnpm 8+