如何在Sails.js运行Shell脚本时禁用指定Hook(如Sockets)
解决Sails.js运行Shell脚本时单独禁用指定Hook的问题
我懂你遇到的麻烦——直接在.sailsrc里全局禁用sockets这类Hook的话,连正常启动服务器都会受影响,这肯定不是你想要的结果。那咱们可以用两种灵活的方式来实现仅在运行Shell脚本时禁用指定Hook,完全不影响日常的服务器启动:
方式一:通过环境变量+动态配置实现(推荐长期使用)
这种方式适合需要频繁运行脚本的场景,配置一次之后就能重复用:
- 在项目根目录新建
config/local-hooks.js文件,写入以下代码:module.exports = function() { const hookSettings = {}; // 检测是否处于运行Shell脚本的环境 if (process.env.SAILS_SCRIPT_MODE === 'true') { // 禁用sockets Hook,还可以添加其他需要禁用的Hook hookSettings.sockets = false; // 比如如果不需要Grunt,也可以加上:hookSettings.grunt = false; } return { hooks: hookSettings }; }; - 运行Shell脚本时,提前设置环境变量:
这样只有在执行这条命令时,sockets Hook才会被禁用,正常启动服务器(SAILS_SCRIPT_MODE=true sails run your-script-namesails lift)时完全不受影响。
方式二:直接通过命令行参数临时禁用(适合一次性场景)
如果只是偶尔运行脚本,不想改配置文件的话,直接在命令里加参数就行:
sails run your-script-name --hooks.sockets=false
这种方式完全是临时生效的,不会改动任何配置文件,用完就没影响,非常适合单次执行的脚本任务。
原理说明
Sails.js的配置优先级是:命令行参数 > 动态配置文件 > .sailsrc全局配置,所以咱们利用这个优先级,就能实现只在脚本运行时覆盖Hook的启用状态,完美解决全局配置的副作用问题。
内容的提问来源于stack exchange,提问作者Utility
相关产品推荐
相关产品推荐

