<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pnpm on lategege 的技术博客</title><link>https://lategege.com/tags/pnpm/</link><description>Recent content in Pnpm on lategege 的技术博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sun, 07 Apr 2024 10:50:53 +0000</lastBuildDate><atom:link href="https://lategege.com/tags/pnpm/index.xml" rel="self" type="application/rss+xml"/><item><title>npm npx cnpm yarn pnpm nodejs包管理乱局</title><link>https://lategege.com/p/npm-npx-cnpm-yarn-pnpm-nodejs%E5%8C%85%E7%AE%A1%E7%90%86%E4%B9%B1%E5%B1%80/</link><pubDate>Sun, 07 Apr 2024 10:50:53 +0000</pubDate><guid>https://lategege.com/p/npm-npx-cnpm-yarn-pnpm-nodejs%E5%8C%85%E7%AE%A1%E7%90%86%E4%B9%B1%E5%B1%80/</guid><description>&lt;p&gt;对于前端项目如vue、react大多由nodejs环境来构建编译，事实上，nodejs做的事就是将vue、react代码翻译成html,css,js，浏览器最终也只能运行html,css,js，随着nodejs版本的演进，包管理可谓是一团乱麻。作为一名资深工程师，有时候避免不了跑跑前端开源项目，但是一直非常困惑，这个项目用npm,另一个项目用yarm，别的又用了其他，这尼玛变来变去，花样太多了，我觉得本质上就是一开始包管理器没有设计好，java有maven、gradle ，python 有 pip，go 有mod，rust 有cargo,从没听说包管理器名字都换了- -！&lt;/p&gt;
&lt;p&gt;面对这乱局，偶尔会接触前端项目的我，也只能水一篇文章了，也方便后期查阅，因为实在记不住~&lt;/p&gt;
&lt;p&gt;npm: nodejs官方包管理器,默认从官网下载https://www.npmjs.org/
npx: nodejs 执行器，本质就是npm run,执行方便而已
cnpm: 本质和npm一样，只是包会从国内仓库下载
yarn:相对于npm有性能优化，包管理扁平化，而不是嵌套依赖。
pnpm:更进一步的磁盘占用优化，通过软硬连接管理，同时会有差分管理，下载更新速度快，节省磁盘空间。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;特征/工具&lt;/th&gt;
&lt;th&gt;npm&lt;/th&gt;
&lt;th&gt;Yarn&lt;/th&gt;
&lt;th&gt;cnpm&lt;/th&gt;
&lt;th&gt;pnpm&lt;/th&gt;
&lt;th&gt;npx&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;时间&lt;/td&gt;
&lt;td&gt;2010&lt;/td&gt;
&lt;td&gt;2016&lt;/td&gt;
&lt;td&gt;未知&lt;/td&gt;
&lt;td&gt;2016&lt;/td&gt;
&lt;td&gt;2017&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;特点&lt;/td&gt;
&lt;td&gt;Node.js的官方包管理器，广泛使用。支持大量包和版本，易于入门。&lt;/td&gt;
&lt;td&gt;由Facebook开发，注重速度和包的稳定安全。使用锁文件确保依赖一致性。&lt;/td&gt;
&lt;td&gt;针对中国开发者的npm镜像，提高在中国大陆地区的访问速度和安装效率。&lt;/td&gt;
&lt;td&gt;侧重于性能和空间节省，通过硬链接和符号链接来重用包，减少冗余。&lt;/td&gt;
&lt;td&gt;npm的包运行器，允许直接执行npm仓库中的包而不需要全局安装。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;性能对比&lt;/td&gt;
&lt;td&gt;标准基准，较慢&lt;/td&gt;
&lt;td&gt;相对更快，通过并行下载和更好的缓存管理优化性能&lt;/td&gt;
&lt;td&gt;依赖于npm，性能提升主要来源于镜像的使用&lt;/td&gt;
&lt;td&gt;在多项目中重用包，节省空间和安装时间，性能优异&lt;/td&gt;
&lt;td&gt;适用于执行单次任务，避免全局安装，性能取决于npm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;使用说明/工具&lt;/th&gt;
&lt;th&gt;npm&lt;/th&gt;
&lt;th&gt;Yarn&lt;/th&gt;
&lt;th&gt;cnpm&lt;/th&gt;
&lt;th&gt;pnpm&lt;/th&gt;
&lt;th&gt;npx&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;安装包&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm install package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yarn add package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cnpm install package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm add package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;安装特定版本包&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm install package_name@version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yarn add package_name@version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cnpm install package_name@version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm add package_name@version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;全局安装包&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm install -g package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yarn global add package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cnpm install -g package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm add -g package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;更新包&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm update package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yarn upgrade package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cnpm update package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm update package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;卸载包&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm uninstall package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yarn remove package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cnpm uninstall package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm remove package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;列出已安装包&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yarn list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cnpm list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;运行脚本&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm run script_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yarn run script_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cnpm run script_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm run script_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npx script_name&lt;/code&gt; (执行项目中或远程的npm包命令)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;创建项目&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm init&lt;/code&gt; 或 &lt;code&gt;npm init project_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yarn init&lt;/code&gt; 或 &lt;code&gt;yarn create project_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cnpm init&lt;/code&gt; 或 &lt;code&gt;cnpm init project_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm init&lt;/code&gt; 或 &lt;code&gt;pnpm create project_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;查看包信息&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npm view package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yarn info package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cnpm view package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm info package_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;官方文档：
npm: &lt;a href="https://docs.npmjs.com/"&gt;https://docs.npmjs.com/&lt;/a&gt;
Yarn: ttps://classic.yarnpkg.com/en/docs
cnpm: 和npm一致
pnpm: &lt;a href="https://pnpm.io/"&gt;https://pnpm.io/&lt;/a&gt;
npx: npm文档中包含npx使用说明&lt;/p&gt;</description></item></channel></rss>