有没有办法在package.json中分叉npm库并在安装时运行它的构建过程?

时间:2018-03-12 19:09:12

标签: javascript npm

我有一个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目录。

现在我知道这应该是预期的。我希望做的一件事是至少通过添加到库dist的脚本来安装package.json目录:

  "scripts": {
    ...
    "prepare": "npm run build"
  },

但是我仍然没有在安装时看到dist目录。即使这样,我仍然需要更改package.json以将module键指向这个新的嵌套目录入口点。

我希望而不是是当我从github安装这个库时,它将它的展平dist目录发布为库的顶级目录,就像原始库一样由维护者安装构建库并运行$ npm rub publish ./dist。有没有办法做到这一点?

编辑:我也知道通过this answer我可以构建dist并将代码提交给这个新分支,但我想要一个更优雅的方式,因此问题。

1 个答案:

答案 0 :(得分:2)

你可以做两件事

对套餐进行更改

您有一个活动preparepostinstallinstall并在同一个

中使用以下内容
"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以执行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文件夹