<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>包管理 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E5%8C%85%E7%AE%A1%E7%90%86/</link><description>Recent content in 包管理 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Thu, 23 Oct 2025 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E5%8C%85%E7%AE%A1%E7%90%86/index.xml" rel="self" type="application/rss+xml"/><item><title>包管理</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/engineering/engineering-008/</link><pubDate>Thu, 07 Aug 2025 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/engineering/engineering-008/</guid><description>&lt;p&gt;现如今，前端开发的同学已经离不开 &lt;code&gt;npm&lt;/code&gt; 这个包管理工具，其优秀的包版本管理机制承载了整个繁荣发展的&lt;code&gt;NodeJS&lt;/code&gt;社区，理解其内部机制非常有利于加深我们对模块开发的理解、各项前端工程化的配置以加快我们排查问题（相信不少同学收到过各种依赖问题的困扰）的速度。&lt;/p&gt;
&lt;p&gt;本文从三个角度：&lt;code&gt;package.json&lt;/code&gt;、版本管理、依赖安装结合具体实例对 &lt;code&gt;npm&lt;/code&gt; 的包管理机制进行了详细分析。&lt;/p&gt;
&lt;h2 id="一剖析-packagejson"&gt;一、剖析 package.json&lt;/h2&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/engineering/engineering-008/image-01.webp"&gt;&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;Node.js&lt;/code&gt; 中，模块是一个库或框架，也是一个 &lt;code&gt;Node.js&lt;/code&gt; 项目。&lt;code&gt;Node.js&lt;/code&gt; 项目遵循模块化的架构，当我们创建了一个 &lt;code&gt;Node.js&lt;/code&gt; 项目，意味着创建了一个模块，这个模块必须有一个描述文件，即 &lt;code&gt;package.json&lt;/code&gt;。它是我们最常见的配置文件，但是它里面的配置你真的有详细了解过吗？配置一个合理的 &lt;code&gt;package.json&lt;/code&gt; 文件直接决定着我们项目的质量，所以首先带大家分析下 &lt;code&gt;package.json&lt;/code&gt; 的各项详细配置。&lt;/p&gt;
&lt;h3 id="11-必备属性"&gt;1.1 必备属性&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;package.json&lt;/code&gt; 中有非常多的属性，其中必须填写的只有两个：&lt;code&gt;name&lt;/code&gt; 和 &lt;code&gt;version&lt;/code&gt; ，这两个属性组成一个 &lt;code&gt;npm&lt;/code&gt; 模块的唯一标识。&lt;/p&gt;
&lt;h4 id="npm包命名规则"&gt;npm包命名规则&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;name&lt;/code&gt; 即模块名称，其命名时需要遵循官方的一些规范和建议：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;包名会成为模块&lt;code&gt;url&lt;/code&gt;、命令行中的一个参数或者一个文件夹名称，任何非&lt;code&gt;url&lt;/code&gt;安全的字符在包名中都不能使用，可以使用 &lt;code&gt;validate-npm-package-name&lt;/code&gt; 包来检测包名是否合法。&lt;/li&gt;
&lt;li&gt;语义化包名，可以帮助开发者更快的找到需要的包，并且避免意外获取错误的包。&lt;/li&gt;
&lt;li&gt;若包名称中存在一些符号，将符号去除后不得与现有包名重复&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如：由于&lt;code&gt;react-native&lt;/code&gt;已经存在，&lt;code&gt;react.native&lt;/code&gt;、&lt;code&gt;reactnative&lt;/code&gt;都不可以再创建。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果你的包名与现有的包名太相近导致你不能发布这个包，那么推荐将这个包发布到你的作用域下。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如：用户名 &lt;code&gt;conard&lt;/code&gt;，那么作用域为 &lt;code&gt;@conard&lt;/code&gt;，发布的包可以是&lt;code&gt;@conard/react&lt;/code&gt;。&lt;/p&gt;
&lt;h4 id="查看包是否被占用"&gt;查看包是否被占用&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;name&lt;/code&gt; 是一个包的唯一标识，不得和其他包名重复，我们可以执行 &lt;code&gt;npm view packageName&lt;/code&gt; 查看包是否被占用，并可以查看它的一些基本信息：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/engineering/engineering-008/image-02.webp"&gt;&lt;/p&gt;
&lt;p&gt;若包名称从未被使用过，则会抛出 &lt;code&gt;404&lt;/code&gt; 错误：&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/engineering/engineering-008/image-03.webp"&gt;&lt;/p&gt;
&lt;p&gt;另外，你还可以去 &lt;code&gt;https://www.npmjs.com/&lt;/code&gt; 查询更多更详细的包信息。&lt;/p&gt;
&lt;h3 id="12描述信息"&gt;1.2描述信息&lt;/h3&gt;
&lt;h4 id="基本描述"&gt;基本描述&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;description&amp;#34;: &amp;#34;An enterprise-class UI design language and React components implementation&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;keywords&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;ant&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;component&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;components&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;design&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;framework&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;frontend&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;react&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;react-component&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;#34;ui&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;description&lt;/code&gt;用于添加模块的的描述信息，方便别人了解你的模块。&lt;/p&gt;</description></item></channel></rss>