使用 patch-package 在本地修补 NPM 包,不起作用
Patching a NPM package locally with patch-package, not working
我正在开发 vue.js 前端,我需要修补程序包以满足应用程序的特殊需求。我要修补的包是“vue-youtube
”(这并不重要)。我正在尝试使用补丁包 (https://www.npmjs.com/package/patch-package)
对其进行修补
所以基本上 :
- 我在本地编辑了
/node_modules/vue-youtube/src/vue-youtube.js
以满足我的需要
- 我确实在 package.json 中添加了安装后脚本:
"scripts": { "postinstall": "patch-package" }
- 我做到了
npm install patch-package --save-dev
- 那我运行
npx patch-package vue-youtube
- 它确实在
/patches
文件夹中用我的修改创建了一个 vue-youtube+1.4.0.patch
文件
BUT,我的修改没有看到。当我执行 npm run serve
并启动我的 webapp 时,使用的包仍然是未编辑的包。之前试过运行ning npm install
,没有成功。当我转到 /node_modules/vue-youtube/dist/vue-youtube.js
(谢天谢地,它是一个小包,所以它是可读的),我可以看到我的修改确实没有被“编译”。
我在这里错过了什么?我觉得我已经关注了 patch-package npm 页面中的所有内容..
谢谢
编辑 : 仍在调查中.. 还有一些 informations/questions :
- 我的补丁名称是
patches/vue-youtube+1.4.0.patch
- 当我 运行
npm ls vue-youtube
它 returns 只有一个元素时: 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 文件夹中的文件,补丁就可以工作。 (但是我认为补丁包可以让我以可读的 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-package
或 postinstall
步骤。
我认为这种方法并不适用于所有包,它取决于修改包的 package.json
是如何配置的。具体来说,请注意 browser
字段指向的位置(在我的例子中是 ./dist/some_package.js
)。
警告:每次更新包时,您都必须 运行 npm install
和 npm run
。
测试更改并能够在团队成员之间共享(当包在 Github 上时)
- 创建一个要修改的包的分支。
- 对包的分叉版本进行所需的所有更改。
- 运行 以下内容自动更新 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
。
我正在开发 vue.js 前端,我需要修补程序包以满足应用程序的特殊需求。我要修补的包是“vue-youtube
”(这并不重要)。我正在尝试使用补丁包 (https://www.npmjs.com/package/patch-package)
所以基本上 :
- 我在本地编辑了
/node_modules/vue-youtube/src/vue-youtube.js
以满足我的需要 - 我确实在 package.json 中添加了安装后脚本:
"scripts": { "postinstall": "patch-package" }
- 我做到了
npm install patch-package --save-dev
- 那我运行
npx patch-package vue-youtube
- 它确实在
/patches
文件夹中用我的修改创建了一个vue-youtube+1.4.0.patch
文件
BUT,我的修改没有看到。当我执行 npm run serve
并启动我的 webapp 时,使用的包仍然是未编辑的包。之前试过运行ning npm install
,没有成功。当我转到 /node_modules/vue-youtube/dist/vue-youtube.js
(谢天谢地,它是一个小包,所以它是可读的),我可以看到我的修改确实没有被“编译”。
我在这里错过了什么?我觉得我已经关注了 patch-package npm 页面中的所有内容..
谢谢
编辑 : 仍在调查中.. 还有一些 informations/questions :
- 我的补丁名称是
patches/vue-youtube+1.4.0.patch
- 当我 运行
npm ls vue-youtube
它 returns 只有一个元素时: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 文件夹中的文件,补丁就可以工作。 (但是我认为补丁包可以让我以可读的 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-package
或 postinstall
步骤。
我认为这种方法并不适用于所有包,它取决于修改包的 package.json
是如何配置的。具体来说,请注意 browser
字段指向的位置(在我的例子中是 ./dist/some_package.js
)。
警告:每次更新包时,您都必须 运行 npm install
和 npm run
。
测试更改并能够在团队成员之间共享(当包在 Github 上时)
- 创建一个要修改的包的分支。
- 对包的分叉版本进行所需的所有更改。
- 运行 以下内容自动更新 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
。