在任何 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 --save 与 npm install --save-dev 的区别
text git hook在`git pull`之后运行命令如果指定的文件被更改。在这个例子中它用于运行`npm install`如果package.json ch