我有一个 npm 依赖项(例如ngx-infinite-scroll),我目前正在尝试分叉(用于错误修复)并将我的分叉版本作为依赖项包含在我的应用程序中。下面是我的包含示例package.json:
"dependencies": {
"ngx-infinite-scroll": "github:jcroll/ngx-infinite-scroll#bugfixes",
},
Run Code Online (Sandbox Code Playgroud)
在上面,我在 github 上分叉了存储库并创建了一个名为 的新分支bugfixes。
我的问题是,维护者运行一个构建过程,在./dist目录中创建一个工件,然后使用 将该平面目录发布到 npm $ npm run publish ./dist。但是,当我通过$ npm i ngx-infinite-scroll整个存储库安装新的分叉存储库时,会下载整个存储库,而不是目录dist。
现在我知道这应该是预料之中的。我希望做的一件事是至少dist通过添加到库的脚本来在安装时创建目录package.json:
"scripts": {
...
"prepare": "npm run build"
},
Run Code Online (Sandbox Code Playgroud)
但是我仍然看不到dist安装目录。即使如此,我仍然需要更改 package.json 以将密钥module指向这个新的嵌套目录入口点。
相反,我想要的是,当我从 github 安装这个库时,让它将其扁平dist目录发布为库的顶级目录,就像维护者构建库并运行原始库的方式一样$ npm rub publish ./dist。有什么办法可以做到这一点吗?
编辑:我也通过这个答案知道我可以构建 dist 并将代码提交到这个新分支,但我想要一种更优雅的方式,因此出现了问题。
您可以做两件事
包裹的变更
您有一个事件prepare,postinstall或者install在同一事件中使用以下内容
"postinstall": "cd node_modules/ngx-infinite-scroll && npm i && npm run build"
Run Code Online (Sandbox Code Playgroud)
然后如果你真的想使用 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",
Run Code Online (Sandbox Code Playgroud)
内置 fork
另一种选择是更改 fork 并更新package.json 的 ,以在安装 fork 包时postinstall执行npm run build并创建文件夹dist
编辑:2018 年 3 月 20 日
你是对的,如果我们使用postinstall那么它将创建无限循环。您可以在prepack活动中这样做。
"prepack": "node build.js",
Run Code Online (Sandbox Code Playgroud)
下面是一个示例 github 项目,您可以实际测试
https://github.com/tarunlalwani/ngx-infinite-scroll/tree/so49242809
使用测试它
npm add tarunlalwani/ngx-infinite-scroll#so49242809
Run Code Online (Sandbox Code Playgroud)
安装后它将有 dist 文件夹