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

use*_*875 96 node.js npm

我正在使用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]
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

Sde*_*ock 203

你可以直接编辑文件,但是每当npm更新时都会被覆盖,最好的办法就是直接找到源文件.

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

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

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

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

  • 在分叉之前我在本地系统中更改它,但这种变化似乎并没有影响.更改任何javascript文件,即node_modules/package_name/lib/file_name.js确实会影响? (14认同)
  • @JohnDevor不要安装自定义模块,而是使用"npm link"命令创建一个到其文件夹的sym-link:https://docs.npmjs.com/cli/link (4认同)
  • 只是一个说明,不确定是否有什么改变,但我个人必须将 Git URL 指定为 git://github.com/&lt;user&gt;/&lt;package&gt;.git” (3认同)
  • 弄清楚,我必须导航到`/ node_modules`中的文件夹并运行`npm install`然后一切都很好! (3认同)
  • 谢谢!那正是我想知道的。另外,对于其他阅读本文的人……我想将我github上的模块包含在package.json文件中,并且这里有关于此的信息:http://stackoverflow.com/a/8306715/1810875 (2认同)

Ped*_*ssi 97

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

这可以通过首先对里面的包进行更改node_modules然后运行以下命令来完成,这是<package name>您刚刚更改的包的名称。

npx patch-package <package name>
Run Code Online (Sandbox Code Playgroud)

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

可选步骤:

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

"postinstall": "npx patch-package" 
Run Code Online (Sandbox Code Playgroud)

  • 非常好的解决方案,对我来说没有任何问题。 (3认同)
  • 令人难以置信的答案,我需要在部署到 netlify 之前对 dep 进行修改。预安装“npx patch-package”是一张神奇的票。正确的图像现在显示在网站上。 (3认同)
  • 很棒的答案!谢谢。请注意,如果您在包中的“更改”位于其“package.json”中(例如更新过时的固定版本依赖项),则需要执行“npx patch-package &lt;package name&gt; --exclude”。默认情况下,它不会拾取子包的“package.json”中的更改。 (3认同)
  • 这真的很酷!仅供参考:我必须使用“预安装”而不是“安装后”,因为我的补丁是针对依赖项的安装后脚本。如果您有其他补丁需要在安装后阶段应用,您将如何实现? (2认同)

Dan*_*lan 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. 现在您可以运行您的项目以查看它是否有效。

  • 缺点:1)您永远无法更新软件包版本,即使它存在安全问题。2)如果您(或您未来的开发人员)想要这样做,他们必须花时间手动比较整个包以找出您更改的内容。3) https://github.com/facebook/create-react-app/issues/5372 所以,TL;DR:它会让你未来的自己或队友非常沮丧。 (2认同)

小智 6

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

npm install git+https://github.com/visionmedia/express.git
Run Code Online (Sandbox Code Playgroud)