只有 运行 我的 sails.js 挂钩在 `sails lift` 上,而不是 `sails 运行`

Only run my sails.js hook on `sails lift`, not `sails run`

我有一个实现 Websocket 服务器的自定义 sails.js 挂钩(我们不能使用内置的 socket.js 挂钩,因为我们需要匹配旧的 API)。

我还有一个执行后台处理的自定义 sails run 脚本。

现在,当 sails run -name-of-my-script 命令是 运行 时,它也 运行 我的钩子,它为这个钩子使用的所有事件创建额外的监听器。

我想让挂钩仅在主应用程序启动时启动(sails lift 或等效的 node app.js),而不是在 sails run ....

我已经查看了代码和文档,但我似乎看不到任何官方方法可以做到这一点。

我能想到两个方案:

  1. 在挂钩中,检查脚本是否正在运行并且不初始化。
  2. 在脚本中,禁用钩子。

有什么方法可以做到这两点吗?

现在,没有内置的方法来执行此操作,因为 Sails 脚本无法修改配置 - 它们使用默认的 sails 实例及其默认设置。

这是我用来让它工作的技巧:

  1. 在钩子的初始化方法中添加对配置选项的检查:

    if (app.config.notifier.active === false) {
        sails.log.verbose('Notifier disabled');
        return cb();
    }
    
    // Continue with notifier hook setup here
    
  2. 在脚本顶部添加设置环境变量(在 module.exports:

    process.env.sails_notifier__active = false;
    

(注意:第 1 步基于 this answer,但那里链接的包不再使用此技术。该问题和答案也非常古老 - 至少作为 Sails.js 答案 - - 在 sails run 存在之前。)