原因:经历过多次的从0到1,手动搭建了N个项目之后,大量的重复性劳动
所以:DRY(Don’t repeat yourself)一个简单cli 避免更多的重复
1、创建一个目录
2、npm init
3、你可能需要这些依赖加入到你的package.json中
"dependencies": {
"chalk": "^2.4.1",
"commander": "^2.18.0",
"figlet": "^1.2.0",
"inquirer": "^6.2.0",
"shelljs": "^0.8.2"
"git-clone":"^0.1.0"
}
自己写clone文件或直接使用npm包 git-clone
4、创建一个js文件姑且叫它index.js
#!/usr/bin/env node
//这里要注意开头的 #!/usr/bin/env node这个语句必须加上,主要是为了让系统看到这一行的时候,会沿着该路径去查找 node 并执行,主要是为了兼容 Mac ,确保可执行。
const program = require('commander'); // node.js命令行界面的完整解决方案
const shell = require('shelljs'); // Nodejs使用ShellJS操作目录文件
const chalk = require('chalk'); // 添加背景色
const inquirer = require('inquirer'); //一个用户与命令行交互的工具
const clone = require('./lib/clone'); //git-clone或者自己写的
const pkg = require('./package');
program
.version(pkg.version)
.usage("hao <command>")
.description(pkg.dependencies)
program
.command('init')
.alias('i')
.description('请选择模版初始化工程')
.action(function() {
require('figlet')('H A O', function(err, data) {
....省略若干
})
program
.on('--help', function() {`在这里插入代码片`
console.log('');
console.log('Examples:');
console.log('');
});
program.parse(process.argv);
5、再package.json文件中添加bin(bin 用来指定每个命令所对应的可执行文件的位置)
"bin": {
"x'x": "./index.js",
"x'x-cli": "./index.js"
},
然后在根目录下执行 npm link
(就是把命令挂载到全局的意思),这样我们每次只要输入 xx,就可以直接运行
6、发布npm包
1、npm adduser
在发布npm包前,需要先登录npm。
2、npm publish
在工程的根目录,执行这命令即可。
7、可以安装npm install xx-cli -g
8、执行xx-cli 即可安照cli源码写的步骤进行