【问题标题】:Build and use npm package locally在本地构建和使用 npm 包
【发布时间】:2019-08-28 20:34:02
【问题描述】:

我在ngx-mask包中做了一些自定义修改,需要在本地测试一下。

如何覆盖已安装的 npm 包?

目前该包在 packages.json 文件中被声明为依赖项:

"ngx-mask": "^7.8.9"

如果可能的话,我不喜欢 fork 原始包并且不使用 github。

【问题讨论】:

  • 包文件必须存在于您的 node_modules 文件夹中。去编辑他们的。

标签: angular npm


【解决方案1】:

如果您在您的机器上进行了这些更改。 (我假设你有)

  1. 运行您更改的 ngx-mask 包的 build

  2. 导航到dist / 无论您编译的输出文件夹是什么。

  3. 在该文件夹中运行 npm pack。这会为您的包创建一个 .tgz zip 文件,其中包含您的自定义修改。

  4. 将该文件复制到项目的根目录(您可以将其放在任何位置,但根目录会使事情变得简单)。

  5. 在您的 package.json 中将版本号 ngx 掩码替换为以下 "ngx-mask": "file:my-packed-file.tgz"

  6. 使用新的package.json 运行npm install

您应该将修改后的副本作为依赖项加载到 node_modules 中。

【讨论】:

  • 运行构建意味着“npm run build”?这给了我错误“npm ERR!缺少脚本:构建”
  • "ng build" 创建 "dist" 文件夹,但 "npm pack" 然后给出错误 "npm ERR! 无法从 "" 安装,因为它不包含 package.json 文件。
  • 所以我假设你已经克隆了 ngx-mask 包。如果你看到里面是package.json,那么它没有build 脚本。相反,它是"build:library": "ng-packagr -p package.json" 当您在该项目的根目录中时尝试npm run build:library :)
  • 这是否与npm link 的工作方式相同?
  • 所以每次更改依赖项时我都必须这样做?仅将package.json 中的依赖项指向本地文件夹不起作用?
【解决方案2】:

npm link”命令就是为此而生的。

在您的 test 存储库(您使用 ngx-mask 包的地方)运行:

npm link /path/to/your/locally/modified/ngx-mask/package

这会将您本地修改的 ngx-mask 安装到您的 test 存储库中。

当您测试完 ngx-mask 包的本地版本后,您可以简单地取消链接。要取消链接本地版本的 ngx-mask,请在您的 test 存储库中运行:

npm unlink --no-save /path/to/your/locally/modified/ngx-mask/package

如果您想重新安装 ngx-mask 包的 registry 版本,请运行:

npm install

【讨论】:

  • 一个小警告我必须首先卸载 (npm uninstall <target-package-name>) 我想要链接的目标包,因为它已经在我的测试仓库中使用(我使用这样的包) - 我猜@如果包已经存在,987654325@ 将跳过。除此之外,上述步骤效果很好。谢谢。
  • 等等,这里的顺序是什么?首先为所有其他依赖项运行npm-install,然后npm link 将注册表中的包替换为本地包?
  • @JoseQuijada 据我所知,链接的包应该在你的测试仓库中的包之上得到尊重。
猜你喜欢
  • 2021-12-14
  • 2017-08-25
  • 1970-01-01
  • 2019-06-07
  • 2017-06-26
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多