初步探索commander的使用

313 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

接上文 初步探索使用nodeJs + ts编写cli命令行工具 - 掘金 (juejin.cn)

一些修正

我在后续开发程序中发现, 当我导入外部的ts文件时, ts-node会报错, 让我去添加后缀,但是ts引入ts文件加.ts后缀也会报错。只能将后缀加成.js现阶段没有找的更好的办法, 在这过程中我修改了一些配置

  1. 我在typescript.json配置中修改了:
{
  "compilerOptions": {
   	"target": "esnext", 
    "module": "ESNext", 
    "moduleResolution": "node"
  },
  "ts-node": {
    "esm": true
  },
  "exclude": [
    "node_modules",
    "bin"
  ],
  "include": ["**/*.ts", "src/init.mts"]
}

其中"ts-node": {"esm": true}会精简我们的命令。

  1. 修改package.json 中:
{
	"scripts": {
   	 "test": "tsc && pnpm link -g",
   	 "dev": "ts-node ./src/index.ts"
  },
}

commander的使用

添加init命令

本段的目的是完成init命令,在执行init时, 在当前的目录下自动生成后续功能所需要的配置文件。

  1. 添加init命令
program.command("init").description("初始化配置文件").action(() => {
	// 做一些事情
});
  1. 将init的命令操作单独封装, 以便以后扩展更多功能。

该功能的主要思想就是: 在执行时使用fs.writeFile方法,生成json文件,文件的内容使用Object形式去保存(之所以不用读取文件的方式是因为想了很久觉得没必要):

import chalk from "chalk";
import  fs from "fs";

const config = {
  baseUrl: "/",
};

export function creatJSON() {
  console.log(chalk.green('开始创建'))
  fs.writeFile("deploy-config.json", JSON.stringify(config), (err) => {
    if (err) {
      console.log(chalk.red(err));
      return
    }
    console.log(chalk.green('创建完成'))
  });
}

测试

  1. 运行 pnpm test

image.png

  1. 运行deploy-cli init, 这里 deploy-cli package.json的name一致.

image.png

这里卡最久的地方是: 如何在ts文件中合理的引用ts文件.

我通过github.com/mochajs/moc…的指示进行了各种的尝试, 发现还是把后缀名直接改成.js最好使.