[英]Is there a way to fork a npm library in package.json and run its build process on install?
我有一个 npm 依赖项(例如ngx-infinite-scroll
),我目前正在尝试分叉(用于错误修复)并将我的分叉版本作为依赖项包含在我的应用程序中。 下面是我的package.json
包含的示例:
"dependencies": {
"ngx-infinite-scroll": "github:jcroll/ngx-infinite-scroll#bugfixes",
},
在上面,我在 github 上分叉了 repo 并创建了一个名为bugfixes
的新分支。
我的问题是维护者运行一个构建过程,在./dist
目录中创建一个工件,然后使用$ npm run publish ./dist
将此平面目录发布到 npm。 但是,当我通过$ npm i ngx-infinite-scroll
安装新的分叉存储库时,会下载整个存储库而不是dist
目录。
现在我知道这应该是预料之中的。 我希望做的一件事是至少通过添加到库的package.json
的脚本来在安装时创建dist
目录:
"scripts": {
...
"prepare": "npm run build"
},
但是我仍然没有在安装时看到dist
目录。 即便如此,我仍然需要更改 package.json 以将module
键指向这个新的嵌套目录入口点。
相反,我想要的是,当我从 github 安装这个库时,让它发布其扁平化的dist
目录作为库的顶级目录,就像维护者构建库并运行$ npm rub publish ./dist
安装原始库一样$ npm rub publish ./dist
。 有没有办法做到这一点?
编辑:我也通过这个答案知道我可以构建 dist 并将代码提交到这个新分支,但我想要一种更优雅的方式,因此问题。
你可以做两件事
对您的包裹的更改
您有一个事件prepare
, postinstall
或install
并在同一中使用以下内容
"postinstall": "cd node_modules/ngx-infinite-scroll && npm i && npm run build"
然后如果你真的想使用dist,你可以做如下的事情
"postinstall": "cd node_modules/ngx-infinite-scroll && npm i && npm run build && mv dist ../ngx-infinite-scroll-dist && cd .. && rm -rf ngx-infinite-scroll && mv ngx-infinite-scroll-dist ngx-infinite-scroll && cd ngx-infinite-scroll && npm i",
用叉子构建
另一种选择是更改 fork 并更新 package.json 的postinstall
以在postinstall
fork 包时执行npm run build
并创建dist
文件夹
编辑:2018 年 3 月 20 日
你是对的,如果我们使用postinstall
那么它会创建无限循环。 您可以在prepack
活动中做到这一点。
"prepack": "node build.js",
下面是一个示例 github 项目,您可以实际测试
https://github.com/tarunlalwani/ngx-infinite-scroll/tree/so49242809
测试它使用
npm add tarunlalwani/ngx-infinite-scroll#so49242809
一旦安装,它就会有 dist 文件夹
有一个更简单的方法: patch-package
patch-package 让应用程序作者可以立即修复 npm 依赖项。 对于我们这些生活在最前沿的人来说,这是一个至关重要的创可贴。
当您使用 npm(>=5) 或 yarn 时,由 patch-package 创建的补丁会自动且优雅地应用。
不再等待合并和发布拉取请求。 不再为了修复阻止您的应用程序工作的一件小事而分叉存储库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.