项目初始化
yarn init -y
//初始化一个package.json
创建一个cli.js , 用于给命令行调用
console.log('this is cli.js')
运行 node cli 即可打印。
commander
commander被广泛运用于命令行开发
comamnder有几个常用的api
- program.version
program.version可以是用户了解到当前的版本,我们可以通过package.json来直接对其动态赋值
const pkg = require('./package.json');
program.version(pkg.version);
- process.argv
process.argv 是一个数组,可以用来获取用户输入的命令
我们可以通过 process.argv.length 来了解到用户输入了几个单词
- program.option
program.option('-x, --xxx', 'wait the x')
program.option 一般用于需要用户输入 “-” 的命令
- program.command
program
.command('clear')
.description('清除所有任务')
.action(() => {
//.....
});
program.command 用于设置用户不需要输入 “-” 的命令,他可以处理一些复杂的逻辑。
node中的导入导出
nodejs与js不同,他有特殊的导出方法
//导出
const obj = {}
module.exports = obj
//导入
const obj = require('...')
home目录与拼接路径
- 获取home路径
const homedir = process.env.HOME || require('os').homedir();
// process.env.HOME 获取环境变量中的 home路径
// require('os').homedir() 获取系统的home路径
- 拼接路径
const p = require('path')
const dbpath = p.join(homedir, '.todo2')
fs文件系统
通过node中的fs,我们可以进行 读取/写入 等操作
- fs.readFile
fs.readFile(path, {flag: 'a+'}, (err, data) => {
//xxxxx
})
{flag: 'a+'} 表示:若无该文件,则创建一个
- fs.writeFile
fs.writeFile(path, data, (error) => {
//xxxxx
})
由于上述的方法为异步操作,我们可以使用Promise与其配合,通过回调函数进行一些操作。
inquirer
inquirer 是命令行中的一个类似菜单的一个库
需要注意:inquirer 中的 choice 可以是 数组,对象,函数。当其为对象时,value最好为字符串(而不是数字),否则可能会有bug
发布到npm
- package.json
- name 必须为唯一值
- bin 发布以后的命令
- files 命令行用到的文件
- main 程序的主文件入口
- 需要在cli文件中加入shebang
- #!/usr/bin/env node
-
在项目文件中指向 chmod +x xxx.js 加入可执行权限
-
使用 nrm use npm 将npm源切换到原始源
-
npm adduser 登录npm
-
npm publish 发布
如何发布一个TS npm包
- 全局安装typescript
- 运行tsc --init 初始化一个tsconfig.json
- 创建一个dist目录,将config中的outDir改为 "dist/"
- 运行 tsc -p .
- 将package.json 中的 files 改为 ["dist/**/*.js"]
- 其余和发布普通包一样