是否可以更改module文件夹中 npm module的代码?我认为这不是推荐的做法,还有其他方法可以实现吗?目前,我尝试更改module目录中的代码,但更改似乎并不适用。提前致谢。
编辑节点module文件夹中react npm module的代码
当然,您可以更改包的内容,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