npm包开发流程
- 初始化项目
├── package.json
└── src
├── bin.ts
└── index.ts
首行是 Hashbang, Hashbang是一种特殊的注释,以 #! 开头,通常出现在可执行的脚本文件的第一行,用于告诉系统要使用哪个解释器来执行该脚本文件。
#!/usr/bin/env node
const argvs = process.argv.slice(2)
console.log('argvs', argvs)
console.log('Hello, world!')
- 开发&构建
使用 tsup 构建,支持设置多个入口文件,构建后会有 dist/bin.js 文件,这个就是我们最后实际运行的文件
{
"scripts": {
"build": "tsup src/index.ts src/bin.ts --target es6 --format cjs,esm --dts",
"dev": "tsup src/index.ts src/bin.ts --target es6 --format cjs,esm --dts --watch"
}
}
- package.json bin 属性 用来指定命令行工具的入口文件
{
"bin": {
"hello-node": "dist/bin.js"
}
}
- 安装&测试
项目内测试:当我们本地安装这个包的时候,就会在 node_modules/.bin 目录下生成一个 hello-node 的可执行文件,这个文件就是我们的命令行工具;npx hello-node
来运行这个命令;
全局使用:在项目根目录下,cmd,可以通过 npm link --global
将这个包链接到全局,模拟发布到本地,可用于模拟安装依赖,然后在某个测试文件夹下,cmd,npm init -y
,pnpm link --global hello-node
模拟安装hello-node依赖,如hello-node的package.json下的bin对应的命令即scan-word
,即相当于执行依赖包项目性爱的src/index.js文件;测试cmd执行scan-word
如果这个包被发布到了 npm 上,咱们就可以直接 npm i -g xxx
直接安装启用。
- 使用框架
命令行框架 Commander 使用框架,可以简化命令行参数的解析和校验,提高开发效率,并自动生成友好的提示信息。
先安装依赖:npm i commander
创建一个文件: src/commander-test.ts
#! /usr/bin/env node
// 引入Command类和package.json文件
import { Command } from 'commander'
import pkg from '../package.json'
// 创建程序实例并设置版本号
const program = new Command()
program.version(pkg.version)
// 添加命令hello和描述,别名为h,支持选项--exclude和--allow-dirty
program
.command('hello [name]')
.description('打招呼')
.alias('h')
.option('-e, --exclude <globPatterns...>', '排除某些文件进行扫描')
.option(
'--allow-dirty',
'默认屏蔽以下目录(node_modules,.git等),可以设置允许'
)
.action((name, options) => {
console.log('你好', name, options.exclude, options.allowDirty)
})
// 解析命令行参数
program.parse(process.argv)
然后将这个文件添加到构建指令里,构建出 dist 目录下的资源。
设定指令 node-hello
{
"bin": {
"hello-node": "dist/bin.js",
"node-hello": "dist/commander-test.js"
}
}
参考&感谢各路大神
node
宝剑锋从磨砺出,梅花香自苦寒来。