我在打包vue项目时, 开始用的npm run build和cnpm run build,总是提示 @vue-office/docx 错误,尝试过用cnpm重新安装node_modules几次都没用。类似下面的提示一直有。
Error: [commonjs--resolver] Failed to resolve entry for package "@vue-office/docx". The package may have incorrect main/module/exports specified in its package.json.
然后删掉node_modules再尝试 pnpm install。 然后又用pnpm approve-builds 命令打包,然后按a字母选择所有选项安装,按回车,然后还要输入y再按回车,就会安装了。
然后还要输入pnpm run build 重新打包。
这次好像打包成功。
总结:经过查询cnpm和pnpm的区别可以得知,npm和cnpm都可能出现循环引用和版本问题等各种安装异常,我们要用pnpm安装得更全面,也可以减少引用错误和版本问题。
cnpm和pnpm的核心区别在于功能定位:cnpm是专注于国内网络优化的npm镜像,而pnpm是注重磁盘效率与依赖管理的新型包管理工具。具体差异体现在以下关键方面:12
- 核心功能定位
- cnpm:基于npm构建的国内镜像工具,主要解决国内开发者访问npm官方仓库速度慢的问题,使用淘宝镜像加速下载(如依赖缓存、减少重复下载)。
- pnpm:利用硬链接和符号链接技术优化存储效率,避免重复下载相同包,节省磁盘空间并提升安装速度,同时通过非扁平化结构解决“幽灵依赖”问题。
- 依赖管理方式
- cnpm:依赖管理与npm一致(扁平化结构),可能存在版本冲突风险。
- pnpm:采用全局唯一存储模式(类似Git),不同项目共享相同依赖版本文件,通过符号链接隔离依赖,确保每个项目仅访问其声明的依赖。
- 安装速度与磁盘占用
- cnpm:依赖国内CDN加速,但安装速度仍受npm机制限制,磁盘占用与npm相当。
- pnpm:利用全局缓存,首次安装后重复安装速度显著提升,且相同依赖版本仅存储一份,磁盘占用可减少50%-70%。
- 适用场景
- cnpm:适合国内网络环境且无需复杂依赖管理的项目,尤其小型或中型应用。
- pnpm:更适合大型项目、Monorepo架构或对磁盘空间敏感的场景,能有效控制依赖版本冲突。
总结:如果主要需求是加速国内下载,优先选择cnpm;若追求长期开发效率与存储优化,pnpm更具优势。