【问题标题】:Catch exit sign from npm script package.json从 npm 脚本 package.json 捕获退出标志
【发布时间】:2021-02-15 05:37:13
【问题描述】:

是否可以挂钩 npm 脚本的退出标志?

"scripts": {
    "serve": "docker-compose up && npm start"
}

我希望能够在使用ctrl+c 退出脚本时调用docker-compose down

使用 shell 脚本,这可以通过“捕获”已签名的出口 0 来实现

#!/bin/bash

trap 'docker-compose down ; echo Stopped ; exit 0' SIGINT

docker-compose up &
npm start

done

我宁愿不使用 shell 脚本,这样它就可以在其他操作系统上运行,而不是类 Unix 系统。

【问题讨论】:

    标签: javascript npm docker-compose scripting package.json


    【解决方案1】:

    我宁愿不使用 shell 脚本,这样它就可以在其他操作系统上运行,而不是类 Unix 系统。

    您可以在 Node.js 中编写脚本,使其与任何可以运行 npm start 的操作系统兼容。

    #!/usr/bin/env node
    
    'use strict';
    const childProcess = require('child_process');
    
    childProcess.spawnSync('docker-compose', ['up'], { stdio: 'inherit'});
    
    process.on('SIGINT', () => {
      console.log('SIGINT caught, running docker-compose down');
      childProcess.spawnSync('docker-compose', ['down'], { stdio: 'inherit' });
      process.exit(0);
    });
    
    console.log('go ahead, press control-c');
    childProcess.spawnSync('npm', ['start'], { stdio: 'inherit' });
    

    【讨论】:

    • 我喜欢这个主意,所以我想没有直接来自 package.json 的选项?
    【解决方案2】:

    在后台运行 docker compose (-d) 时,我能够在 npm 脚本 (package.json) 中使用您的初始脚本。

    "scripts": {
       ...
       "up": "trap 'docker-compose down ; echo Stopped ; exit 0' SIGINT; docker-compose up -d && npm start"
       ...
    }
    

    【讨论】:

      猜你喜欢
      • 2015-12-17
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 2011-07-05
      • 2014-06-26
      • 1970-01-01
      相关资源
      最近更新 更多