编辑节点module文件夹中react npm module的代码

IT技术 reactjs npm frontend node-modules
2021-05-19 15:08:58

是否可以更改module文件夹中 npm module的代码?我认为这不是推荐的做法,还有其他方法可以实现吗?目前,我尝试更改module目录中的代码,但更改似乎并不适用。提前致谢。

4个回答

当然,您可以更改包的内容,node_modules因为它是一种标准化格式。但是,您不应该这样做,因为您应该提交更改并重新分发它们。

不幸的是,这个问题的解决方案有点重要,这是我过去一直在努力解决的问题。

npm 链接

第一种方法是在本地克隆 repo 并用于npm link在您的项目中使用它。

npm link ../path/to/my/proj

这种方法的缺点是您仍然必须手动下载存储库才能使用它,npm link并使您的链接版本成为在您的系统上全局使用包,这可能会产生意想不到的副作用。话虽如此,npm link如果您想在本地测试对包的更改并将其贡献给上游,这可能是最好的方法。

使用分叉的 git repo

您也可以通过执行以下操作直接从分叉的 git repo 安装它:

npm install --save $GIT_REPO_URL

但是使用这种方法,您需要拥有访问 git 存储库的凭据,因此在处理私有存储库等时会出现额外的复杂性,尤其是在处理 CI 环境时。此外,您应该包含一个 commitish,以便您可以获得可重复的构建——不过,在不使用 npm link 的情况下开发它有点痛苦。您可以查阅 npm 文档以了解其他安装选项或更多细节如果您不必担心任何这些事情,这是一个非常好的方法。

本地 npm module

完成更改后,您还可以将分叉版本安装到您​​的项目中,如下所示:

npm install --save ../path/to/my/proj

但是,然后,您可以有效地将另一个 NPM 项目作为项目的一部分,使用 git 子module、git 子树或使用 monorepo 之类的东西。对于团队来说,这可能是一个很好的方法,但对于您正在尝试做的事情来说可能是过度的,并且您需要考虑很多工具才能使其成为一个好的方法。

发布你自己的 npm module

不幸的是,所有先前的方法都假设这些包要么没有构建过程,要么使用npm 的 postinstall scripts 之东西自动构建然而,一些 npm module是通过发布特定的构建目录编写的,这使得 npm 上的内容与源代码明显不同。

在这些情况下,您需要将构建发布到 npm 可以安装的地方。这包括公共作用域包、私有 npm 存储库或将您的 npm module发布到个人工件服务器等内容。

您也可以使用修补程序。

在 React Native 世界中,这非常可靠——所以我猜它也适用于 React 世界和许多其他依赖 npm 的世界。

补丁包

是一个可以与 npm 和 yarn 一起使用的库(注意:对于 yarn,请参阅它们的安装说明)。您可以为本地文件夹node_modules 中的库(也嵌套)打补丁,或者仅对开发依赖项应用补丁(忽略生产版本中的补丁)。

链接就在这里:https : //www.npmjs.com/package/patch-package

1.制作补丁

首先更改node_modules文件夹中特定包的文件,然后运行

npm patch-package package-name-where-you-made-changes
// or
// yarn patch-package package-name-where-you-made-changes 

如果你试图修补一个嵌套的包,例如 node_modules/package/node_modules/another-package 你可以在包名之间放一个 / :

npx patch-package package/another-package

它也适用于作用域包

npx patch-package @my/package/@my/other-package

2.'/patches'文件夹

如果这是您第一次使用 patch-package,它将您的应用程序根目录创建一个名为patch的文件夹里面将是一个名为 package-name+0.44.0.patch 之类的文件,这是一个普通的旧包名和你的固定版本之间的Git 差异

3.与团队共享补丁

只需将“补丁”文件夹中的文件(补丁提交到存储库。

当其他团队成员(或 CI 服务)运行 npm install 时,补丁会自动执行(使用 npm post-install script underhood) - 如果您想自定义此行为(例如排除某些补丁等),请参阅补丁包官方文档.

4.提示:

如果包托管在 Github(并且您已登录),您可以使用--create-issue参数运行相同的 patch-package 命令 ,因此它会自动创建一个包含主存储库中应用补丁的拉取请求(因此维护人员可以解决问题):

npm patch-package package-name-where-you-made-changes --create-issue
// or
// yarn patch-package package-name-where-you-made-changes

5.提示:

要还原补丁,请使用--reverse参数运行它

npm patch-package package-name-where-you-made-changes --reverse

不建议node_modules直接修改包,因为当你重新安装包时你所做的更改将消失,并且你不能与其他人共享你的更改。考虑例如在 GitHub 上 fork 项目并在那里进行更改,并将其用作包。

node_modules如果您只是想尝试一下,它仍然可以修改包如果main包的字段package.json指向构建文件,则您可能必须将此字段更改为源条目文件,或者在每次更改源代码后自己构建文件。

对我来说,最好的方法是,就像@Kevin Raoofi 所说的那样,克隆包并发布我自己的包,然后将我的包下载到特定文件夹中,其中只有“myNpmPackages”。

然后:

  • 在您的项目中,安装您的克隆
  • 将“*”放在您的 json 中,以便始终更新 pkj
  • 编辑包(在您的“myNpmPackages”文件夹中)
  • 更改版本号
  • npm 发布
  • 在你的项目中, npm install