I D*_*Dav 4 frontend npm node-modules reactjs
是否可以在modules文件夹中更改npm模块的代码?我认为这不是推荐的做法,还有其他方法可以实现吗?目前,我尝试更改模块目录中的代码,但更改似乎并不适用。提前致谢。
Ste*_*ros 12
在 React Native 世界中,它的工作相当可靠 - 所以我猜它也可以在 React 世界和许多其他依赖 npm 的世界中工作。
是一个可以与npm和yarn一起使用的库(注意:对于yarn,请参阅它们的安装说明)。您可以对本地文件夹、node_modules(也嵌套)中的库进行补丁,或者仅针对开发依赖项应用补丁(忽略生产构建中的补丁)。
链接就在这里: https: //www.npmjs.com/package/patch-package
首先对node_modules文件夹中特定包的文件进行更改,然后运行
npm patch-package package-name-where-you-made-changes
// or
// yarn patch-package package-name-where-you-made-changes
Run Code Online (Sandbox Code Playgroud)
如果您尝试修补嵌套包,例如node_modules/package/node_modules/another-package,您可以在包名称之间放置一个/:
npx patch-package package/another-package
Run Code Online (Sandbox Code Playgroud)
它也适用于作用域包。
npx patch-package @my/package/@my/other-package
Run Code Online (Sandbox Code Playgroud)
如果这是您第一次使用 patch-package,它将在应用程序的根目录中创建一个名为patch的文件夹。里面会有一个名为 package-name+0.44.0.patch 之类的文件,它是普通旧包名和固定版本之间的Git 差异。
简而言之,将“patches”文件夹中的文件(patches)提交到存储库。
当其他团队成员(或 CI 服务)运行 npm install 时,会自动执行补丁(使用 npm 安装后脚本底层) - 如果您想自定义此行为(例如排除某些补丁等),请参阅补丁包官方文档。
如果该包托管在 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
Run Code Online (Sandbox Code Playgroud)
要恢复补丁,请使用--reverse参数运行它:
npm patch-package package-name-where-you-made-changes --reverse
Run Code Online (Sandbox Code Playgroud)
当然,您可以node_modules按标准格式更改软件包的内容。但是,您不应该这样做,因为您应该提交更改并重新分发它们。
不幸的是,解决这个问题的方法并不简单,这是我过去一直在努力的事情。
第一种方法是在本地克隆存储库,并npm link在项目中使用它。
npm link ../path/to/my/proj
Run Code Online (Sandbox Code Playgroud)
这种方法的缺点是您仍然必须手动下载存储库才能使用它,npm link并使链接的版本成为要在系统上全局使用的软件包,这可能会产生意外的副作用。话虽如此,npm link如果您想在本地测试对程序包的更改并将其贡献给上游,则可能是最好的方法。
您还可以通过执行以下操作从分支的git repo直接安装它:
npm install --save $GIT_REPO_URL
Run Code Online (Sandbox Code Playgroud)
但是,使用这种方法时,您需要具有访问git repo的凭据,因此,在处理私有存储库等时,尤其是在处理CI环境时,会带来额外的复杂性。另外,您应该包含一个commitish,以便您可以获取可复制的内部版本;但是,在不使用npm链接的情况下进行开发很麻烦。您可以查阅npm文档以了解其他安装选项或更多详细信息。如果您不必担心这些事情,那么这是一个非常不错的方法。
进行更改后,还可以将分叉版本安装到项目中,如下所示:
npm install --save ../path/to/my/proj
Run Code Online (Sandbox Code Playgroud)
但是,然后,您将有效地使另一个NPM项目成为项目的一部分,并带有git子模块,git子树或使用monorepo之类的东西。对于团队来说,这可能是一个很好的方法,但是对于您要尝试做的事情而言,这可能是过高的,并且,您需要认真思考很多工具才能使它成为一个好的方法。
不幸的是,所有现有方法都假设这些软件包没有构建过程,或者它们是使用npm的postinstall脚本之类的东西自动构建的。但是,某些npm模块是通过发布特定的构建目录编写的,这使得npm上的内容与源代码明显不同。
在这些情况下,您需要将构建发布到npm可以从其安装的位置。这包括公共范围的软件包,私有npm存储库或将npm模块发布到个人工件服务器之类的东西。
| 归档时间: |
|
| 查看次数: |
4141 次 |
| 最近记录: |