我正在开发 vue.js 前端,我需要修补一个包以满足应用程序的特殊需求。我试图修补的包是“ vue-youtube”(这并不重要)。我正在尝试用 patch-package 修补它(https://www.npmjs.com/package/patch-package)
所以基本上:
/node_modules/vue-youtube/src/vue-youtube.js以满足我的需要"scripts": { "postinstall": "patch-package" }npm install patch-package --save-devnpx patch-package vue-youtubevue-youtube+1.4.0.patch中创建了一个文件/patches但是,我的修改没有被看到。当我这样做npm run serve并启动我的网络应用程序时,使用的包仍然是未编辑的包。我npm install之前尝试过跑步,但没有成功。当我转到/node_modules/vue-youtube/dist/vue-youtube.js(幸好它是一个小包,所以它是可读的)时,我可以看到我的修改确实没有被“编译”。
我在这里缺少什么?我觉得我已经遵循了补丁包 npm 页面中的所有内容。
谢谢
编辑:仍在调查..还有更多信息/问题:
patches/vue-youtube+1.4.0.patchnpm ls vue-youtube它只返回一个元素:vue-youtube@1.4.0package.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 …
我正在使用patch-package来修补我的依赖项之一的 package.json 文件。我修改了 package.json 并运行npx patch-package [dependency_name],但它没有捕获对 package.json 所做的更改。但是,对其他文件(例如index.js)所做的更改会被捕获。如何修补 package.json?我正在尝试修改模块和 jsnext:main 属性。
TL,博士;
我正在寻找 git 命令、bash 脚本或 npm 方法(脚本)来获取.patch文件夹中的所有文件并运行
git apply --ignore-whitespace patches/{filename}
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试过的:
git am --ignore-whitespace patches/*.patch
Run Code Online (Sandbox Code Playgroud)
上下文(我将用它做什么)
目前正在进行一个大型项目,使用相当多的库。我们使用 webpack,前端是 Angular.js,后端是 Yii2。由于开发人员同时使用 Linux 和 Windows,因此该项目是在 docker 映像内编译的。
到目前为止,每当我们需要对库进行更改时,我们都会对它进行分叉并在以下位置指定分叉package.json:
"package-name":"git+https://github.com/{git-user}/{package-name}"
Run Code Online (Sandbox Code Playgroud)
而且...它有效。
我最近发现了一种可以说是更好的将补丁应用于模块的方法,那就是patch-package. 简而言之,它避免了分叉,将更改保存在.patch文件中。
然而,创建补丁文件还不够。在部署时,也需要在构建之前应用。这将转换为部署脚本中的以下行:
docker exec -it {container-name} bash -c "git apply --ignore-whitespace patches/{package-name}+{package-version}.patch"
Run Code Online (Sandbox Code Playgroud)
其中必须在运行之前运行npm run build。
而且,它再次有效。
问题
我正在寻找一种方法来自动获取patches/文件夹内的每个文件并应用它们,而无需逐一指定它们。这样,每当.patch将新的补丁推送到补丁文件夹中(或者修改现有的补丁)时,它都会在构建之前自动应用于包,而无需更改部署脚本。
我发现这个问题似乎表明
git am --ignore-whitespace patches/*.patch
Run Code Online (Sandbox Code Playgroud)
可能会成功(当然是在 docker 控制台内)。然而,man页面上git-am说:
从邮箱应用一系列补丁 …
问题
我正在尝试使用 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.0react-native-tab-view 2.15.1react-native-gesture-handler 1.5.6react-native-reanimated 1.7.0
问题 我是否缺少构建或编译步骤来让react-native-tab-view从我为其创建补丁的TSX文件生成新的JS文件?
任何帮助将不胜感激!
patch typescript react-native react-native-tab-view patch-package
npm ×2
patch ×2
git ×1
git-patch ×1
npm-scripts ×1
react-native ×1
reactjs ×1
typescript ×1
vue.js ×1