一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情 。
创建项目
初始化
mkdir deploy-cli
cd deploy-cli
pnpm init || npm init
得到的package.json内容如下
{
"name": "@deploy/cli",
"version": "0.0.1",
"description": "快速部署项目到测试环境",
"main": "index.ts",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
安装一些依赖
pnpm add typescript -D
pnpm add @types/node -D
pnpm add chalk
生成 Typescript 的配置文件
tsc --init
在 typescript.json中设置的 "outDir ": "bin"
试运行
- 创建
src目录, 目录下创建index.ts, 测试代码如下
import chalk from 'chalk';
console.log(chalk.blue('Hello world!'));
此时ts会报错:
我们需要把
typescript.json设置"moduleResolution": "node"。
如果想要直接运行
ts文件, 我们需要安装ts-node, 这里我直接安装到全局
pnpm add ts-node -g
接下来运行 ts-node .\src\index.ts,报错信息如下:
通过查看报错信息, 我们需要将
"type": "module",添加到package.json中,再次运行 ts-node .\src\index.ts命令。
这个报错是因为
ts-node 的esm支持现阶段是实验性质的, 详情查看:github.com/TypeStrong/…。我们需要将命令修改为ts-node --esm .\src\index.ts, 结果如下:
到这里试运行的阶段就结束了。
安装依赖
commander
commander.js是完整的node.js命令行解决方案。详情点击 github。
首先安装commander。
pnpm add commander
根据手册, 在src/index.ts文件里书写引入示例,
import { Command } from "commander";
const program = new Command();
program.version(`0.0.1`, "-v, --version", "查看版本号")
输入 ts-node --esm .\src\index.ts --help命令, 结果如下:
commander正常运行。
chalk
chalk的作用是: 让我们命令行的文字加上颜色。详情请看:chalk-npm
修改src/index.ts 为
import chalk from "chalk";
import { Command } from "commander";
const program = new Command();
program.version(`版本号: ${chalk.bold.green('0.0.1')}`, "-v, --version", "查看版本号")
program.parse(process.argv);
运行 ts-node --esm .\src\index.ts -v, 得到的结果如下:
字体成功修改,chalk运行正常。
精简命令
我感觉每次都到输入一大串命令有点不优雅, 所以我们我们把命令写进脚本里,在package.json文件里script选项中添加 "dev": "ts-node --esm .\\src\\index.ts "。
运行pnpm dev -h,结果如下:
并没有输出帮助信息, 这里要注意, 如果要传参,需要添加--, 所以正确的命令应该是pnpm dev -- -h, 结果如下
测试命令是否可用
- 运行
tsc,将typescript打包到bin文件夹。 - 使用
link命令,将npm模块链接到全局。
pnpm link -g
- 运行
deploy-cli -v, 结果正常
文章有误的地方,欢迎掘友们指正,点个赞再走吧!