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


124

我正在使用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]

谢谢您的帮助!

Answers:


241

您可以直接编辑文件,但是每当npm更新时,该文件就会被覆盖,最好的做法是直接访问源代码。

如果更改影响整个模块的功能,并且可能对其他模块有用,那么您可能希望对github上的原始源代码有所贡献,并寻找要实施的更改。

如果这是必需的专有功能,并且对模块的开发无济于事,那么最好的办法是从github派生它并进行更改。您可以使用NPM直接从github安装项目,该方法将使您可以将将来的更改从原始源集成到自定义版本中。

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

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


2
谢谢!那正是我想知道的。另外,对于其他阅读此内容的人……我想将我github上的模块包含在package.json文件中,并且这里有关于此的信息:stackoverflow.com/a/8306715/1810875
user1810875 2012年

22
在分叉之前,我正在本地系统中对其进行更改,但是更改似乎没有影响。更改任何node_modules / package_name / lib / file_name.js的javascript文件会产生影响吗?
好奇的2015年

1
请注意,不确定是否有所更改,但是我个人必须将Git URL指定为git://github.com/ <user> / <package> .git”
Craig

5
@JohnDevor使用“ npm link”命令来创建指向其文件夹的符号
Venryx

3
弄清楚了,我必须导航到该文件夹/node_modules并运行,npm install然后一切正常!
亚当·莫萨

6

您可以使用补丁包对节点模块进行更改并保留更改。

这可以通过首先在内部对软件包进行更改node_modules,然后运行以下命令<package name>作为刚刚更改过的软件包的名称来完成。

npx patch-package <package name>

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

可选步骤:

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

"postinstall": "npx patch-package" 

1
非常好的解决方案,对我没有任何问题。
mpj

这真的很酷!仅供参考:我必须使用“预安装”而不是“后安装”,因为我的补丁程序是依赖项的后安装脚本。如果在安装后阶段需要应用其他补丁,您将如何实现?
Superole

1
难以置信的答案,我需要在部署到netlify之前对dep进行修改。预安装“ npx patch-package”是魔术票。正确的图像现在显示在网站上。
TheBetterJORT

1

我不想发布新模块,也不想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。现在,您可以运行您的项目以查看其是否有效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.