每个开发人员都应该避免的常见的NPM错误

1,067 阅读5分钟

每个开发人员都应该避免的常见的NPM错误

NPM是世界上最大的包管理器, 在实际操作中使用它相对来说也比较简单易上手. 然洱,在自定义配置或者使用它相对高级的功能时,很多时候还是容易出错。

因此,在本篇文章中,我将介绍7种在使用NPM过程中时你应当去避免出现的错误。

1.手动为package.json添加依赖

你应该避免手动更新package.json,因为它可能会破坏package.jsonpackage-lock.json之间的同步。

你应该使用像npm i --savenpm 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. 将多个模块发布为单个包

img

一个独立的源代码控制和共享的“卡片”组织。在右侧的依赖关系图中,是由[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类我们可能会遇到的问题已经最好的解决方式。

因此,从这里开始,我希望你能够使用它们。如果你有任何的问题,请在评论去进行留言。

感谢阅读!