如何编辑通过npm安装的节点模块?

我使用的是node_swiz模块,该模块又使用验证器模块。

我想对验证器模块进行更改,但我使用npm install来安装模块/依赖项。

我可以只改变node_modules内部的验证器模块,或者当我发布到heroku或下次我运行npm install时,是否会重新创建node_modules依赖项并获得最新版本?

结构如下所示:

myNodeApplication
- node_modules
- swiz
- node_modules
- validator [this is the library I want to edit]

谢谢你的帮助!

158776 次浏览

你可以直接编辑文件,但是当npm更新时,这将被覆盖,最好的办法是直接去源代码。

如果更改影响整个模块的功能,并且可能对其他人有用,您可能想要在github上贡献原始源代码,并寻找要实现的更改。

如果这是所需要的专有功能,并且对模块的开发没有帮助,最好的方法是从github中派生出来并进行更改。你可以使用NPM直接从github安装项目,这种方法可以让你将未来的更改集成到原始源代码的自定义版本中。

要直接从github安装,使用以下命令:

npm install https://github.com/<username>/<repository>/tarball/<branch>

我不想发布一个新模块,也不想npm install覆盖我的更改。我找到了解决这两个问题的方法,但最好还是采纳@Sdedelbrock的建议。但如果你想这样做,以下是方法:

  1. 编辑你的package.json文件以删除你想编辑的依赖项。
  2. 进入项目的/node_modules并将文件夹移动到存储库中可以提交的其他位置。所以现在/node_modules/dependency/dependency
  3. cd放入依赖目录并输入npm link
  4. cd到你的项目目录的根,并键入npm link dependency 在__ABC2和/dependency之外执行此操作非常重要

如果一切正常,你现在应该有一个在/node_modules/dependency中创建的符号链接。现在您可以运行您的项目,看看它是否正常工作。

你可以使用patch-package来对节点模块进行修改和持久化。

这可以通过首先对node_modules内部的包进行更改,然后运行以下命令来实现,其中<package name>是您刚刚更改的包的名称。

npx patch-package <package name>

patch-package会创建一个patches文件夹,里面有一个文件,代表你的更改。然后可以将该文件提交给git,稍后可以通过运行npx patch-package(不带任何参数)来恢复补丁。

可选步骤:

在包的脚本部分添加以下内容。当你执行&;npm install&;时自动修补依赖。

"postinstall": "npx patch-package"

Fork Github repo并进行必要的更改,然后您可以像这样安装包

npm install git+https://github.com/visionmedia/express.git