使用 patch-package 在本地修补 NPM 包,不起作用

Patching a NPM package locally with patch-package, not working

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

对其进行修补

所以基本上 :

BUT,我的修改没有看到。当我执行 npm run serve 并启动我的 webapp 时,使用的包仍然是未编辑的包。之前试过运行ning npm install,没有成功。当我转到 /node_modules/vue-youtube/dist/vue-youtube.js(谢天谢地,它是一个小包,所以它是可读的),我可以看到我的修改确实没有被“编译”。

我在这里错过了什么?我觉得我已经关注了 patch-package npm 页面中的所有内容..

谢谢

编辑 : 仍在调查中.. 还有一些 informations/questions :

编辑 2 : 我意识到我不是在编辑 node_modules/vue-youtube/dist/vue-youtube.js,而是在编辑 node_modules/vue-youtube/src/vue-youtube。 如果你编辑 dist 文件夹中的文件,补丁就可以工作。 (但是我认为补丁包可以让我以可读的 JS 编辑 src 文件夹中的文件...)

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

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

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

yarn 文档中的行解释了关于 prepare

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

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

看看这个答案,可能会有帮助。

对我来说,这是因为 package.json 包的预期版本与 yarn.lock / package-lock 之间的版本不匹配。json

我试图对一些包做完全相同的事情,我们称它为“some_package”。当我看到 EDIT 2 时,我的思绪刚刚连接起来...

在本地测试更改
修改 node_modules/some_package/src 文件夹中的文件,然后转到 node_modules/some_package 和 运行:

$ npm install
$ npm run <name of the script that generates the dist folder>

无需 运行 npx patch-packagepostinstall 步骤。

我认为这种方法并不适用于所有包,它取决于修改包的 package.json 是如何配置的。具体来说,请注意 browser 字段指向的位置(在我的例子中是 ./dist/some_package.js)。

警告:每次更新包时,您都必须 运行 npm installnpm run

测试更改并能够在团队成员之间共享(当包在 Github 上时)

  1. 创建一个要修改的包的分支。
  2. 对包的分叉版本进行所需的所有更改。
  3. 运行 以下内容自动更新 package.json 文件,使依赖点指向您的分叉版本:
$ npm install <github's user name>/<package's name of the forked repository>#<branch name>  --save-prod

例如,如果您的 Github 的用户名为“johndoe”,并且您分叉了 https://github.com/aurelia/framework,并且创建了一个名为“mycoolbranch”的分支来包含您的更改,那么它将是:

$ npm install johndoe/aurelia-framework#mycoolbranch --save-prod

请注意,如果依赖项仅用于开发,则 --save-prod 标志可以替换为 --save-dev