问题标签 [patch-package]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3369 浏览

git - 如何应用 /patches 文件夹中的所有 git .patch 文件 - npm

TL,博士;

我正在寻找一个 git 命令、bash 脚本或 npm 方法(脚本)来获取.patch文件夹中的所有文件并运行

到目前为止我已经尝试过:


上下文(我将使用它)

目前正在从事一个大型项目,使用相当多的库。我们使用 webpack,前端是 Angular.js,后端是 Yii2。因为开发人员同时使用 linux 和 windows,所以项目是在 docker 映像中编译的。

到目前为止,每当我们需要对库进行更改时,我们都会对其进行 fork 并在以下位置指定 fork package.json

并且......它有效。

我最近发现了一种可以说将补丁应用于模块的更好方法,即patch-package. 简而言之,它避免了分叉,将更改保存在.patch文件中。

但是,创建补丁文件是不够的。在部署时,还需要在构建之前应用它。在部署脚本中转换为以下行:

必须在运行之前运行npm run build

而且,它再次起作用。


问题

我正在寻找一种方法来自动获取文件patches/夹中的每个文件并应用它们,而不必一个一个地指定它们。因此,每当.patch在补丁文件夹中推送新的(或修改现有的)时,它都会在构建之前自动应用于包,而无需更改部署脚本。

我发现这个问题似乎暗示

可能会成功(当然是在 docker 控制台内)。但是,man页面上git-am说:

从邮箱应用一系列补丁

什么邮箱?我想应用文件夹中的更改。尝试该am命令,控制台抱怨不知道我是谁(想要电子邮件和密码)。

我是否需要将其视为创建 bash 脚本(.sh文件)、从文件夹中读取所有文件并在 中运行多个git apply命令的简单案例for

有没有更多的“git”-ish方式/命令?
使用 npm 脚本执行此操作是否更有意义?

0 投票
1 回答
960 浏览

typescript - 如何使用 patch-package 修补 TSX 文件

问题

我正在尝试使用 patch-package 来修补 react-native package react-native-tab-view,但是当我为 react-native-tab-view 编辑 node_module 中包含的 TSX 文件并应用我的补丁时,这些更改不会反映在我的应用程序中。

node_modules/react-native-tab-view 的结构

下面是包结构的截图。 封装结构

他们还用于@react-native-community/bob在发布之前构建包,因此它会生成一个 lib 文件夹,其中包含一个模块文件夹和一个包含 JS 文件的 commonjs 文件夹。

我目前的数据

正在创建我的补丁,但是 /lib/module 中的文件不会更改,并且在模拟器上运行时更改也不会反映在我的应用程序中

在编辑 /src 中的 TSX 文件而不是模块 /lib/module 中的 JS 文件后,我尝试使用 patch-package 应用补丁,因为它实现起来要简单得多。

环境 react-native 0.63.0 补丁包 6.2.0 react-native-tab-view 2.15.1 react-native-gesture-handler 1.5.6 react-native-reanimated 1.7.0

问题 我是否缺少构建或编译步骤来获取 react-native-tab-view 以从我为其创建补丁的 TSX 文件生成新的 JS 文件?

任何帮助将不胜感激!

0 投票
3 回答
5315 浏览

vue.js - 使用补丁包在本地修补 NPM 包,不起作用

我正在开发一个 vue.js 前端,我需要修补一个包以满足应用程序的特殊需求。我要修补的软件包是“ vue-youtube”(这并不重要)。我正在尝试使用补丁包(https://www.npmjs.com/package/patch-package)对其进行修补

所以基本上:

  • 我在本地编辑/node_modules/vue-youtube/src/vue-youtube.js以满足我的需要
  • 我确实在我的 package.json 中添加了 postinstall 脚本:"scripts": { "postinstall": "patch-package" }
  • 我做了npm install patch-package --save-dev
  • 然后我跑了npx patch-package vue-youtube
  • 它确实在我的修改的文件夹中创建了vue-youtube+1.4.0.patch一个/patches文件

但是,没有看到我的修改。当我这样做npm run serve并启动我的 web 应用程序时,使用的包仍然是未编辑的包。我之前试过跑步npm install,没有成功。当我去/node_modules/vue-youtube/dist/vue-youtube.js(幸好它是一个小包,所以它是可读的)时,我可以看到我的修改确实没有被“编译”。

我在这里想念什么?我觉得我已经关注了补丁包 npm 页面中的所有内容..

谢谢

编辑:仍在调查..更多信息/问题:

  • 我的补丁名称是patches/vue-youtube+1.4.0.patch
  • 当我运行npm ls vue-youtube它时,它只返回一个元素:vue-youtube@1.4.0
  • 在我package.json列出的依赖项中"vue-youtube": "^1.4.0",它应该不同吗?它应该提到它需要修补吗?

编辑 2:我意识到我不是在node_modules/vue-youtube/dist/vue-youtube.js编辑node_modules/vue-youtube/src/vue-youtube. 如果您编辑 dist 文件夹中的文件,则补丁可以工作。(但是我认为 patch-package 将允许我以可读的 JS 编辑 src 文件夹中的文件......)

0 投票
1 回答
83 浏览

javascript - Webpack 无法在已经工作的节点包中编译 js

我正在尝试对使用补丁包安装的节点包进行一些样式更改,为此我必须使用 webpack 编译 src/ 目录中的代码以在 dist/ 中获取新代码。当我运行 npx webpack 时,出现以下错误:

这个节点包开箱即用,我提醒你。我不确定我在这里缺少什么。该软件包不附带任何默认配置文件以外的配置文件。这是里面的东西:

提前致谢!

编辑:删除 node_modules & package-lock 并重新安装并不能解决问题

0 投票
0 回答
21 浏览

node.js - 如何强制在依赖目录中安装子依赖

所以我使用patch-package包来修补我的库中的一些依赖项。

我需要一种方法来告诉 package.json 它应该将我的库依赖项安装到它自己的 node_modules 目录中。

有什么方法可以实现吗?

0 投票
1 回答
494 浏览

node.js - 带有 Docker 的补丁包

我正在使用节点 js 后端,我想通过 docker 部署应用程序。

我更改了两个 npm 包以使我的应用程序正常工作,并在我的 package.json 中的安装后脚本的帮助下使用 npm patch-package 自动安装这些更改。

我将 postinstall-postinstall 和 patch-package 都安装为开发依赖项。

分别运行 yarn install 和 yarn build 可以正常工作,但是一旦我想 dockerize 这个应用程序,我在构建阶段就会收到一个错误,这基本上是说补丁没有应用到 node_modules。

这是我的码头文件:

我真的不知道 dockerfile 中的 yarn install 脚本是否没有在安装后运行,或者错误是否只发生在 yarn build 脚本中。

提前致谢

0 投票
1 回答
215 浏览

reactjs - 反应:使用补丁包修补 package.json

我正在使用patch-package修补我的依赖项之一的 package.json 文件。我修改了 package.json 并运行了,npx patch-package [dependency_name]但它没有捕获对 package.json 所做的更改。但是,会捕获对 index.js 等其他文件所做的更改。如何修补 package.json?我正在尝试修改模块和 jsnext:main 属性。

0 投票
1 回答
40 浏览

azure-web-app-service - 使用补丁包模块部署 Azure 应用服务节点

我正在尝试在 Azure 应用服务(通过 BitBucket 的持续集成部署)上的节点应用部署期间运行补丁包。补丁包脚本在本地(在 Mac 上)运行良好,但在 Azure (Windows) 上失败。补丁包模块安装在 node_modules 中,但安装后脚本失败并出现以下错误:

命令:“D:\home\site\deployments\tools\deploy.cmd” 处理 node.js 部署。创建 app_offline.htm KuduSync.NET 从:'D:\home\site\repository' 到:'D:\home\site\wwwroot' 删除 app_offline.htm 在站点根目录下寻找 app.js/server.js。使用启动脚本 app.js 生成 web.config。package.json 文件没有指定 node.js 引擎版本约束。node.js 应用程序将使用默认的 node.js 版本 14.16.0 运行。选定的 npm 版本 6.14.11

my-app@1.0.0 安装后 D:\home\site\wwwroot 补丁包

'patch-package' 不是内部或外部命令、可运行程序或批处理文件。npm 错误!代码 ELIFECYCLE npm 错误!errno 1 npm 错误!rs-email-yelp@1.0.0 安装后:patch-packagenpm 错误!退出状态 1

这是我的(简化的)package.json 文件:

当我尝试npm i在 Kudu 命令行中手动运行时,我得到了同样的错误。

0 投票
0 回答
33 浏览

angular - Ngx-charts:空值后换行

如标题所示,折线图在空值后中断。它绘制线直到带有值的点:null 出现,之后只绘制点但不绘制线。我可以通过手动将 null 更改为 0 或 NaN 来解决此问题,它将被绘制为 0 或从最后一个非空值连接到下一个非空值,但我想要一条非连续线。

在此处输入图像描述

我在这里看到了这个问题的解决方案,并尝试使用补丁包(它在更改 node_modules 包中起作用)来实现它,但在 Chrome 的 DevTools 中没有看到更改。 https://github.com/swimlane/ngx-charts/issues/799

我在 Chrome 的 DevTools 中遇到的错误之一: 在此处输入图像描述

如何复制?安装 ngx-charts 并插入包含值为 null 的元素的系列。您还可以尝试添加补丁包并在函数 getLineGenerator() 和 getRangeGenerator() 的末尾添加以下代码,这应该可以解决此问题。

0 投票
0 回答
17 浏览

node.js - npm - 修补一个包并将其导出到我自己的包中

我正在尝试修补一个包,然后将其导出到我自己的 npm 包中(使用节点 14)。我在 package.json 中添加了这些:

我看到它们正在运行,但是当我使用我的包时 - 我正在修补的包没有我的更改。

我可以以某种方式将这个包放在我的包内部,这样它就不会安装在根目录中node_modules而是安装在我的包中node_modules