5

我正在开发一个 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 文件夹中的文件......)

4

3 回答 3

8

工作解决方案:如果您直接在dist/包的文件夹而不是文件夹中编辑src/文件,则补丁可以正常工作。

于 2021-04-12T08:11:04.873 回答
1

修补后在 package.json 中添加下面的 npm 脚本对我有用。

scripts:  {
  "prepare": "patch-package",
}

纱线文档中的行解释了准备

For compatibility reasons, scripts called install, postinstall, prepublish, and prepare will all be called after your package has finished installing.

在 package.json 中添加此脚本后,补丁文件夹中模块文件的更改已修补到相应的节点模块中。

于 2022-01-20T08:58:20.637 回答
0

看看这个答案,它可能会有所帮助。 https://stackoverflow.com/a/71153240/9981565

对我来说,这是因为 package.json 预期版本的 package 和 yarn.lock / package-lock.json 之间的版本不匹配而发生的

于 2022-02-17T06:10:40.743 回答