185

我正在使用 node_swiz 模块,该模块又使用验证器模块。

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

我可以只更改 node_modules 中的验证器模块,还是重新创建 node_modules 依赖项并在我发布到 heroku 或下次运行 npm install 时获得最新版本?

结构如下所示:

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

谢谢您的帮助!

4

4 回答 4

311

您可以直接编辑该文件,但只要 npm 更新,这将被覆盖,最好的办法是直接访问源代码。

如果更改影响了整个模块的功能,并且可能对其他人有用,您可能希望为 github 上的原始源做出贡献并寻找要实施的更改。

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

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

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

于 2012-11-09T04:24:22.377 回答
129

您可以使用patch-package对节点模块进行更改并保持更改。

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

npx patch-package <package name>

patch-package 然后将创建一个patches文件夹,其中包含一个文件,代表您的更改。然后可以将该文件提交到 git,以后可以通过运行npx patch-package(不带任何参数)恢复补丁。

可选步骤:

在 package.json 的脚本部分添加以下内容,以在执行“npm install”时自动修补依赖项。

"postinstall": "npx patch-package" 
于 2020-06-25T03:40:56.477 回答
16

我不想发布新模块,也不想npm install覆盖我的更改。我找到了解决这两个问题的方法,但接受@Sdedelbrock 的建议可能会更好。但如果你想这样做,方法如下:

  1. 编辑您的package.json文件以删除您要编辑的依赖项。
  2. 进入您的项目/node_modules并将文件夹移动到可以提交的存储库中的其他位置。所以现在/node_modules/dependency/dependency
  3. cd进入依赖目录并输入npm link
  4. cd进入项目目录的根目录并输入npm link dependency /node_modules/dependency

如果一切正常,您现在应该有一个在/node_modules/dependency. 现在您可以运行您的项目以查看它是否有效。

于 2020-06-25T03:35:58.843 回答
8

Fork Github repo 并进行必要的更改,然后您可以安装该软件包,例如

npm install git+https://github.com/visionmedia/express.git
于 2020-09-21T19:14:46.547 回答