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

Javascript 有没有办法在package.json中分叉npm库并在安装时运行其构建过程?,javascript,npm,Javascript,Npm,我有一个npm依赖项(例如,ngx infinite scroll),我目前正在尝试分叉(用于修复bug),并将分叉版本作为依赖项包含在我的应用程序中。下面是mypackage.json中包含的示例: "dependencies": { "ngx-infinite-scroll": "github:jcroll/ngx-infinite-scroll#bugfixes", }, "scripts": { ... "prepare": "npm run bui

我有一个npm依赖项(例如,
ngx infinite scroll
),我目前正在尝试分叉(用于修复bug),并将分叉版本作为依赖项包含在我的应用程序中。下面是my
package.json中包含的示例:

  "dependencies": {
    "ngx-infinite-scroll": "github:jcroll/ngx-infinite-scroll#bugfixes",
  },
  "scripts": {
    ...
    "prepare": "npm run build"
  },
在上面的文章中,我已经在github上完成了回购,并创建了一个名为
bugfixes
的新分支

我的问题是,维护人员运行一个构建过程,在
/dist
目录中创建一个工件,然后使用
$npm run publish./dist
将这个平面目录发布到npm。但是,当我通过
$npm I ngx infinite scroll
安装新的forked repo时,将下载整个repo,而不是
dist
目录

现在我知道这是意料之中的。我希望做的一件事是,通过添加到库的
包的脚本,至少在安装时创建
dist
目录。json

  "dependencies": {
    "ngx-infinite-scroll": "github:jcroll/ngx-infinite-scroll#bugfixes",
  },
  "scripts": {
    ...
    "prepare": "npm run build"
  },
但是,我仍然没有看到安装时的
dist
目录。即使这样,我仍然必须修改package.json,将
模块
键指向这个新的嵌套目录入口点

相反,当我从github安装此库时,我希望它将其展开的
dist
目录发布为库的顶级目录,就像维护人员构建库并运行
$npm rub publish./dist
时安装原始库一样。有没有办法做到这一点


编辑:我也知道,通过via,我可以构建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
,以便在安装fork包时执行
npm run build
并创建
dist
文件夹

编辑:2018年3月20日

您是对的,如果我们使用
postinstall
,那么它将创建无限循环。您可以在
prepack
事件中执行此操作

"prepack": "node build.js",
下面是一个可以实际测试的github项目示例

使用

npm add tarunlalwani/ngx-infinite-scroll#so49242809

一旦安装了dist文件夹

有一种更简单的方法:

补丁包允许应用程序作者立即对npm进行修复 依赖关系。它是我们生活中的一个重要的创可贴。 流血边缘

由修补程序包创建的修补程序自动且优雅地 使用npm(>=5)或纱线时应用

不再等待合并和发布拉取请求。 不再为了解决一件小事而进行分岔回购 应用程序停止工作


您的命令不应该是“准备”:“cd node_模块/ngx无限滚动和npm i&&npm运行构建”
?您好,谢谢您的回答。不幸的是,我不确定
postinstall
脚本是否有效。首先(作为旁白),似乎不需要
cd节点\u modules/ngx无限滚动。然而,更重要的是,它似乎创建了一个递归循环:软件包安装的依赖项,因为
npm i
运行,它开始一次又一次地安装软件包,ad Infinitium关于不需要的
cd node_modules/ngx infinite scroll
,我知道现在您正在谈论更改父包的安装后脚本。我试图修改可安装包的postinstall脚本(这是我在这里讨论的最初内容)。我看到您在“内置fork”部分尝试了这一点,但我不确定您的设计是否可行。此外,Tarun我现在尝试更改父包的
postinstall
,但子包的构建脚本在安装过程中中断,因为(我相信)由于嵌套的目录结构,脚本中定义的路径在中不再有效。这似乎可以正常工作。我的最后一个脚本(虽然很难看)确实按照要求构建并展平了依赖关系:
“prepack”:“npm i&&npm run build&&find*-type f-not-name'dist'-not-name'package.json'-not-path'-dist/*'-exec rm-rv{}+&rm rf src示例节点_模块脚本测试dist/package.json&&ls-l&&mv dist/*。”
找到hook Tarun做得很好。您可能不需要那里的
npm i
,因为在执行
预打包时,我可以看到
节点\u模块存在