Node 安装钩子

Node 安装钩子允许在安装新 npm 模块时添加自定义代码 - 适用于节点和外部模块。

钩子

preInstall

在运行 npm install 安装 npm 模块之前调用。

该钩子传递一个 InstallEvent 对象,包含有关要安装的模块的信息。

{
    "module": "<npm 模块名称>",
    "version": "<要安装的版本>",
    "url": "<可选的安装来源网址>",
    "dir": "<运行安装的目录>",
    "isExisting": "<布尔值> 这是我们已经知道的模块",
    "isUpgrade": "<布尔值> 这是升级而不是新安装",
    "args": [ "一个数组", "的参数", "将传递给 npm"]
}

该钩子可以修改 InstallEvent 以更改 npm 的运行方式。 例如,可以修改 args 数组来改变传递给 npm 的参数。

如果钩子返回 false,则会跳过 npm install,并继续处理,就好像它已被运行一样。这将允许使用一些替代机制 - 只要它导致模块在预期的 node_modules 目录下被安装。

如果钩子抛出错误,则安装将干净地失败。

RED.hooks.add("preInstall", (installEvent) => {
    console.log(`即将安装 ${installEvent.module}@${installEvent.version}`);
});

postInstall

npm install 完成安装 npm 模块后调用。

注意 如果 preInstall 钩子返回了 false,则 npm install 并未运行,但该钩子仍会被调用。

该钩子可用于运行任何需要的后安装活动。

例如,当在 Electron 环境中运行时,必须重建模块:

RED.hooks.add("postInstall",  (installEvent, done) => {
    child_process.exec("npm run rebuild " +  installEvent.module,
        {cwd: installEvent.dir},
        (err, stdout, stderr) => {
            done();
        }
    );
});

如果钩子抛出错误,安装将干净地失败。

如果之前的 npm install 返回了错误,则不会调用该钩子。

preUninstall

在运行 npm remove 卸载 npm 模块之前调用。

该钩子传递一个 UninstallEvent 对象,包含有关要移除的模块的信息。

{
    "module": "<npm 模块名称>",
    "dir": "<运行移除的目录>",
    "args": [ "一个数组", "的参数" , "我们将传递给 npm"]
}

该钩子可以修改 UninstallEvent 以更改 npm 的运行方式。 例如,可以修改 args 数组以改变传递给 npm 的参数。

如果钩子返回 false,则会跳过 npm remove,并继续处理,就好像它已被运行一样。这将允许使用一些替代机制。

如果钩子抛出错误,卸载将干净地失败。

RED.hooks.add("preUninstall", (uninstallEvent) => {
    console.log(`即将移除 ${uninstallEvent.module}`);
});

postUninstall

npm remove 完成移除 npm 模块后调用。

注意 如果 preUninstall 钩子返回了 false,则 npm remove 并未运行,但该钩子仍会被调用。

该钩子可用于运行任何需要的后卸载活动。

如果钩子抛出错误,将被记录,但卸载将正常完成,因为我们无法在 npm remove 完成后回滚操作。

RED.hooks.add("postUninstall",  (uninstallEvent) => {
    console.log(`已移除 ${uninstallEvent.module}`);
});

事件对象

InstallEvent 对象

{
    "module": "<npm 模块名称>",
    "version": "<要安装的版本>",
    "url": "<可选的安装来源网址>",
    "dir": "<运行安装的目录>",
    "isExisting": "<布尔值> 这是我们已经知道的模块",
    "isUpgrade": "<布尔值> 这是升级而不是新安装",
    "args": [ "一个数组", "的参数", "我们将传递给 npm"]
}

UninstallEvent 对象

```json { “module”: “", "dir": "<运行移除的目录>", "args": [ "一个数组", "的参数", "我们将传递给 npm"] }