如何编辑通过 npm 安装的节点模块?
Posted
技术标签:
【中文标题】如何编辑通过 npm 安装的节点模块?【英文标题】:How to edit a node module installed via npm? 【发布时间】:2012-10-29 07:18:27 【问题描述】:我使用的是 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]
感谢您的帮助!
【问题讨论】:
【参考方案1】:您可以直接编辑该文件,但每当 npm 更新时,这将被覆盖,最好的办法是直接访问源代码。
如果更改影响了整个模块的功能,并且可能对其他人有用,您可能希望为 github 上的原始源做出贡献并寻找要实施的更改。
如果这是需要的专有功能,并且无助于模块的开发,最好的办法是从 github 分叉它并进行更改。您可以使用 NPM 直接从 github 安装项目,这种方法可以让您将未来的更改从原始源集成到您的自定义版本中。
要直接从 github 安装,请使用以下命令:
npm install https://github.com/<username>/<repository>/tarball/<branch>
【讨论】:
谢谢!这正是我想知道的。另外,对于其他阅读此内容的人...我想将我的 github 上的模块包含在 package.json 文件中,这里有关于此的信息:***.com/a/8306715/1810875 在分叉之前我在本地系统中更改它,但更改似乎没有影响。更改 node_modules/package_name/lib/file_name.js 的任何 javascript 文件会影响吗? 只是一个注释,不确定是否发生了变化,但我个人必须将 Git URL 指定为 git://github.com//node_modules
中的文件夹并运行npm install
然后一切都很好!【参考方案2】:
我不想发布新模块,也不想npm install
覆盖我的更改。我找到了解决这两个问题的方法,但接受@Sdedelbrock 的建议可能会更好。但如果你想这样做,方法如下:
-
编辑您的
package.json
文件以删除您要编辑的依赖项。
进入项目的/node_modules
并将文件夹移动到存储库中可以提交的其他位置。所以现在/node_modules/dependency
在/dependency
cd
进入依赖目录并输入 npm link
cd
进入项目目录的根目录并输入 npm link dependency
在 /node_modules
和 /dependency
之外执行此操作很重要
如果一切正常,您现在应该有一个在/node_modules/dependency
中创建的符号链接。现在您可以运行您的项目,看看它是否有效。
【讨论】:
缺点:1) 你永远不能更新包版本,即使它有安全问题。 2)如果您(或您未来的开发人员)想要这样做,他们必须花时间手动比较整个包以找出您所做的更改。 3) github.com/facebook/create-react-app/issues/5372 所以,TL;DR:这会让你未来的自己或队友非常沮丧。【参考方案3】:您可以使用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"
【讨论】:
非常好的解决方案,对我来说没有任何问题。 这真的很酷!仅供参考:我不得不使用“preinstall”而不是“postinstall”,因为我的补丁是依赖项的 postinstall 脚本。如果您有其他需要在安装后阶段应用的补丁,您将如何实施? 难以置信的答案,我需要在部署到 netlify 之前对一个 dep 进行修改。 preinstall 'npx patch-package' 是神奇的门票。正确的图像现在显示在网站上。 很棒的答案!谢谢。请注意,如果您在包中的“更改”在其package.json
中(例如更新过时的固定版本依赖项),您需要执行npx patch-package <package name> --exclude
。默认不获取子包package.json
的变化。
很好的解决方案!本文详细介绍了如何使用补丁包:callstack.com/blog/…【参考方案4】:
fork Github repo 并进行必要的更改,然后您可以像这样安装包
npm install git+https://github.com/visionmedia/express.git
【讨论】:
以上是关于如何编辑通过 npm 安装的节点模块?的主要内容,如果未能解决你的问题,请参考以下文章