在任何 npm install 命令之后挂钩(特别是安装后)

Posted

技术标签:

【中文标题】在任何 npm install 命令之后挂钩(特别是安装后)【英文标题】:Hook (specifically postinstall) after any npm install command 【发布时间】:2018-10-06 15:54:31 【问题描述】:

在命令行使用NPM,有没有官方可以配置的hook,也就是说对于任何npm install命令(包括npm install x),都会运行某个hook?

现在,我看到了某些限制 -

如果我运行npm install x,它将不会为另一个依赖项运行挂钩(显然),但它似乎也不会为主/父包运行挂钩。

普通的旧 npm install 将为主/父包运行 preinstall / postintall 挂钩。

【问题讨论】:

npm 没有内置功能来提供你想要的那种我知道的钩子。我回答了关于postinstall 钩子的类似问题here。该解决方案需要通过 shell 脚本使用您自己的自定义逻辑覆盖 npm install x 命令。 所以你希望当有人将你的包添加到他们的仓库时你的 postinstall 应该被调用?或者你希望在安装你的包之后,任何 npm install 都会调用你的钩子? @TarunLalwani,一旦用户安装了我的包,任何后续的npm install 命令都会运行一个钩子......该钩子将为安装的任何其他包运行。可能不可能,只是想知道。 如果您想分享您的包裹的意图是什么(您希望它完成的最终任务,因此需要“钩子”),也许我或其他人可以帮助您提供其他解决方案,因为依赖于改变 npm install 的原始行为似乎并不实用 @Olegzandr,这和无意/有意的病毒一样好,想象一下我安装了你的包,每次我安装一个包时,你都想运行自己的东西。这可以做任何事情,报告我安装的包或其他东西 【参考方案1】:

如果您使用的是 npm v6.X,则可以使用 Hook Scripts 在 npm install <package> 上运行脚本。 不幸的是,功能似乎一直是removed in newer versions。

为此,您需要在node_modules/.hooks/eventname 中创建一个脚本,其中eventname 是您要挂钩的事件。 例如要挂上postinstall,你需要node_modules/.hooks/postinstall

但有一个问题:它无法在 Windows 上运行,因为它无法将文件识别为可执行文件,因为它缺少文件扩展名。

一个不太漂亮的解决方法是创建一个postinstall.cmd 和软(或硬/H)链接它与mklink postinstall postinstall.cmd

这将确保 Windows 将文件识别为 .cmd 可执行文件以正确运行它。

【讨论】:

以上是关于在任何 npm install 命令之后挂钩(特别是安装后)的主要内容,如果未能解决你的问题,请参考以下文章

我在本地计算机上的何处放置'$ npm install $ npm development']]

npm installnpm install --save与npm install -dev区别

Yarn v3.0.2 为啥不安装 node_modules 文件夹?需要在 yarn 的命令之后运行 npm install 吗?

使用 npm install 命令创建 .bat 文件

npm install --save 与 npm install --save-dev 的区别

text git hook在`git pull`之后运行命令如果指定的文件被更改。在这个例子中它用于运行`npm install`如果package.json ch