每个开发人员都应该避免的常见的NPM错误
NPM是世界上最大的包管理器, 在实际操作中使用它相对来说也比较简单易上手. 然洱,在自定义配置或者使用它相对高级的功能时,很多时候还是容易出错。
因此,在本篇文章中,我将介绍7种在使用NPM过程中时你应当去避免出现的错误。
1.手动为package.json添加依赖
你应该避免手动更新package.json
,因为它可能会破坏package.json
和 package-lock.json
之间的同步。
你应该使用像npm i --save
和 npm i --save-dev
这种命令行的方式来自动更新package.json
and package-lock.json
。如果这两个文件中存在任何版本不匹配,这也能够及时提醒您。
然而,使用CLI命令并不总能保证平稳的依赖项升级过程
举个例子,如果你想执行npm i --save package@~1.0.0
这个命令,你可以期望在包中镜像一个 @
version 模式。但是,我们也可以使用^
符号来保存在package.json
中带有配置升级的版本。
因此,在更新依赖之后,请务必仔细检查你的package.json
。
2. 将您的对等依赖项锁定到特定的补丁版本
通常情况下,peerDependencies
是为了避免重复安装依赖包。而且,如果我们将对等依赖项锁定到特定的补丁版本,会使人很恼火。因此,让我们举个简单的例子来理解这个问题背后的根本原因。
{
"name": "tea-latte",
"peerDependencies": {
"tea": "1.x"
}
}
复制代码
根据上述代码可知,tea-latte
模块是依赖于tea
包的一个特定的版本(比如:1.x)。
但是,您的项目中可能还有其他包或模块依赖于最新版本的tea
包。因此,锁定旧版本的 tea
包可能会导致应用程序出现意外行为。
注意: 如果对等依赖项没有明确依赖依赖树中的更高版本,NPM 版本 1、2 和 7 将自动安装它们。 版本 3、4、5 和 6 会给您一条警告消息。
3. 将多个模块发布为单个包
一个独立的源代码控制和共享的“卡片”组织。在右侧的依赖关系图中,是由[Bit]自动生成的 (bit.dev/)。
它是否是一个UI库,一个实用的工具箱,或者是任何其他的模块组,总之,将它们整合成单一的一个包并不是一个好主意。
我们没有理由在开发者只需要使用某一部分子模块时,强迫他们将他们的项目与一整套模块或组件耦合。他们应该能够自由选择使用什么以及什么样的版本,同时,他们也不应该被强迫去处理没有意义的更新问题。
大多数的时候你都会同意我的想法,但是害怕管理一个 monorepo 来维护所有这些包的想法。对此我说,不要害怕!
自 monorepo-polyrepo 二分法时代以来,JS 生态系统已经走过了漫长的道路。
我们现在很幸运能够从简单的类似 CRA 的项目中进行源代码控制和发布 独立组件 ,带有自动生成的package.json
、文档等。
要了解有关使用 Bit 发布多个包的更多信息,请参见此处:
4. 意外发布敏感数据
如果您不小心发布了包含敏感信息的模块,可能要做的第一件事就是取消发布包。
但是,一旦发布了一个模块,它就会被复制到所有注册表镜像。 取消发布它不会有什么不同。
白名单 是一种方便的技术,可以保护您在注册表中发布的内容并避免意外发布敏感数据。
您需要做的就是使用名为“files”的属性修改“package.json”。 使用 files
属性,您可以轻松指定需要发布的文件或目录。
{
“name”: “my-package”,
“version”: “1.0.0”,
“description”: “my-package”,
“scripts”: {
“test”: “echo \”Error: no test specified\” && exit 1"
},
“files”: [
“dist/”
],
“keywords”: [],
“author”: “bhagya-withana”
}
复制代码
所以我建议使用白名单来控制下一个包所要包含的文件
5. 提供定期的身份验证令牌
如果你在CI/CD 管道机制中使用了私有模块,你需要提供身份认证的信息。然而,在生成这些令牌时,NPM CLI 不允许控制读写访问。
您使用公共注册表 API 手动生成令牌,并避免由令牌引起的任何安全漏洞。
以下命令将为您生成一个具有只读访问权限的令牌。
curl -u [USERNAME]:[PASSWORD] https://registry.npmjs.org/-/npm/v1/tokens \
-X POST -H 'content-type: application/json' \
-d '{"password":"[USERNAME]", "readonly": "true"}'
复制代码
此外,您可以查看、添加和删除您使用 NPM 网站创建的令牌。
您的个人资料下的令牌选项
6. 为了升级而升级
维护最新版本是一种很好的做法,但是,您不应该仅仅因为有新版本就升级您的软件包。让我们看看是为什么。
主要有以下几点原因
- 最新版本可能会有新的bug。
- 当你在应用时出现了问题,新版本没有合适的参考文献。
- 新的功能可能对你的项目并不会有用。
- 在其他包中可能需要考虑一些以来。
因此,在更新你的项目库依赖之前,你需要预估和比较一下最新的版本。
7. 删除package-lock.json
为了解决NPM问题,删除package-lock.json
文件已经变成了大部分开发者常用的解决方案。
但是,我们应该避免这种情况,因为package-lock.json
文件会跟踪安装的每个包的确切版本。
所以,你可以使用以下方法来代替删除package-lock.json
- 解决
package.json
冲突。 - 从主分支将
package-lock.json
移除。 - 再次运行
npm install
。
小结
NPM是任何基于 JavaScript 的项目的重要组成部分,它能够帮助开发者有效的安装和管理包。
但是,当我们使用NPM时可能会遇到很多问题,有时候可能这些问题比较棘手。因此,在这篇文章中,我列举出了7类我们可能会遇到的问题已经最好的解决方式。
因此,从这里开始,我希望你能够使用它们。如果你有任何的问题,请在评论去进行留言。
感谢阅读!