




















https://chat.deepseek.com/share/ctmwyshe15fzmnpam9
本指南适用于从 npm + Node.js 16 迁移到 pnpm + Node.js 22 的开发环境。核心流程:先切到 Node 16,从原有
package-lock.json提取canvg、jquery、jsbarcode、jspdf、socket.io-client、request等依赖的精确版本,更新package.json;再切回 Node 22,用 pnpm 安装依赖并启动开发服务器。
package.json 和 package-lock.json(npm 原始 lock 文件)vue-cli-service(Vue CLI)安装完成后,确保终端可运行 nvm 命令。
package-lock.json 提取精确依赖版本nvm install 16
nvm use 16
node -v # 应显示 v16.x.x
在原有 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 |
package.json打开项目的 package.json,在 dependencies 或 devDependencies 中添加(根据原项目归属):
"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已废弃但项目仍依赖,保留原版本即可。
若 package.json 中包含 @dhtmlx/trial-vue-gantt 等要求 Vue 3 的包且项目实际未使用,建议删除,避免后续兼容问题。
保存 package.json。
nvm install 22
nvm use 22
node -v # 应显示 v22.x.x
npm install -g pnpm
Windows PowerShell 权限问题处理(如报错 “无法加载 pnpm.ps1”):
以管理员身份运行 PowerShell,执行:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
验证安装:
pnpm -v
进入项目根目录,删除旧的 node_modules 和 package-lock.json(可选但建议):
rm -rf node_modules package-lock.json
然后执行:
pnpm install
首次安装会自动生成 pnpm-lock.yaml,并可能提示部分依赖的构建脚本被忽略(如 core-js、highlight.js、yorkie)。
若出现类似以下提示:
[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-js、yorkie(highlight.js 可选)方法二:手动重建特定包
pnpm rebuild core-js yorkie
完成此步骤后,后续
pnpm install或pnpm run dev不再报ERR_PNPM_IGNORED_BUILDS错误。
pnpm add -D cross-env
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"
}
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.
通常来自 iobuffer 或 fast-png 等包使用了类字段语法。在项目根目录的 vue.config.js 中添加:
module.exports = {
// ... 原有配置
transpileDependencies: ['iobuffer', 'fast-png']
}
shamefully-hoist(兼容非标准模块引用)若 vue-plugin-hiprint 等插件使用非标准的 require('canvg') 方式引用依赖,在 pnpm 默认严格隔离结构下可能找不到模块。可在项目根目录创建 .npmrc 文件:
shamefully-hoist=true
然后删除 node_modules 和 pnpm-lock.yaml,重新执行 pnpm install。此选项会模拟 npm 扁平化结构,将依赖提升到顶层 node_modules。
pnpm run dev
等待编译完成,控制台输出类似:
App running at:
- Local: http://localhost:81/
- Network: http://10.204.52.41:81/
打开上述地址,验证项目是否正常运行。
| 错误现象 | 可能原因 | 解决方法 |
|---|---|---|
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.development、vue.config.js 中的 devServer 代理设置 |
pnpm install 卡住不动 |
网络问题或仓库源速度慢 | 配置 pnpm 镜像源:pnpm config set registry https://registry.npmmirror.com |
pnpm run build:prod 或 pnpm run build:stage(根据项目配置)。NODE_OPTIONS=--openssl-legacy-provider。request、vue@2 等警告不影响运行,可暂不处理,待后续重构。pnpm-lock.yaml 到代码仓库,确保所有成员使用相同版本。在 README.md 中注明现已迁移到 pnpm,安装步骤为 pnpm install。文档版本:1.0
最后更新:2026-05-25
适用环境:Windows / macOS / Linux,Node.js 22 + pnpm 8+
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。