tj大神出品

平级命令执行

最近在研究antd库,自带antd-tools命令工具处理编译逻辑,就好奇这块的配置。antd-tools run compile追踪到 antd-tools/lib/cli/index.js, 发现它只是普通代码,并没有触发其他任务,那么antd-tools run compile的任务执行逻辑呢
后来发现,commander的command方法有这么一段逻辑

antd-tools代码

  1. #!/usr/bin/env node
  2. 'use strict';
  3. require('colorful').colorful();
  4. const program = require('commander');
  5. const packageInfo = require('../../package.json');
  6. program
  7. .version(packageInfo.version)
  8. // run compile
  9. .command('run [name]', 'run specified task')
  10. .parse(process.argv);
  11. // https://github.com/tj/commander.js/pull/260
  12. const proc = program.runningCommand;
  13. if (proc) {
  14. proc.on('close', process.exit.bind(process));
  15. proc.on('error', () => {
  16. process.exit(1);
  17. });
  18. }
  19. const subCmd = program.args[0];
  20. if (!subCmd || subCmd !== 'run') {
  21. program.help();
  22. }
  1. let bin = path.basename(scriptPath, path.extname(scriptPath)) + '-' + subcommand._name;
  2. // scriptPath就是 antd-tools/lib/cli/ 子命令_name为run 参数为compile
  3. if (subcommand._executableFile) {
  4. bin = subcommand._executableFile;
  5. }
  6. // 也就是会执行 antd-tools/lib/cli/run.js 继而执行链出来了
  7. proc = childProcess.spawn(bin, args, { stdio: 'inherit' });

```