Vite
+ TypeScript
+ Node
Vite
知识,一点点 JavaScript
知识(不会 TypeScript
也没事),少许 Node
知识,这样你就可以开始开发一个 Cli
了Vite
将 TypeScript
打包成 JavaScript
文件 从而使 Node
识别package.json
# 创建文件夹
mkdir project-cli
# 进入文件夹根目录
cd project-cli
# 初始化 package.json
npm init -y
# dependencies
npm i commander download-git-repo
# devDependencies
npm i @types/node typescript vite -D
依赖特性
commander
: 命令download-git-repo
: 下载模板工具vite
: 项目构建工具typescript
: 编程语言命令配置文件
// package.json
{
"bin": {
"create-mine": "bin/create-mine.js",
"me": "bin/create-mine.js"
},
"scripts": {
"build": "node scripts/build",
}
}
// bin/create-mine.js
#!/usr/bin/env node
require('../index.js')
// scripts/build.js
const { resolve } = require('path')
const { build } = require('vite')
!(async () => {
try {
await build({
configFile: resolve(__dirname, '../vite.config.ts')
})
} catch (e) {
process.exit(1)
}
})()
import { UserConfig } from 'vite'
import { resolve } from 'path'
const config: UserConfig = {
root: __dirname,
resolve: {
alias: {
'@': resolve(__dirname, './src')
}
},
build: {
target: 'esnext',
outDir: resolve(__dirname, './dist'),
lib: {
entry: resolve(__dirname, './src/index.ts'),
formats: ['cjs']
},
rollupOptions: {
external: ['path', 'child_process', 'fs', 'commander', 'download-git-repo'],
output: {
entryFileNames: '[name].js'
}
},
ssr: false,
ssrManifest: false,
emptyOutDir: true
}
}
export default config
// index.ts
import { program } from 'commander'
import { version } from '@/../package.json'
program.version(version, '-v, --version', '输出版本号') // 重置指令
program.parse(process.argv) // 解析命令
// down.ts
import download from 'download-git-repo'
// `direct:模板地址#分支`
download(`direct:https://gitee.com/biaovorg/project-template.git#vue`, process.cwd(), { clone: true })
# 关联
npm link
# 测试
me -v
#或者
create-mine -v
npm
官网(确保你的源是 npm
,而不是 taobao
),则需要登录# 登录
npm login
# 发布
npm publish
npm
官网上看发布是否成功:create-minehttps://www.npmjs.com/package/包名
,例如:https://www.npmjs.com/package/create-mine