创建⼯程
mkdir vue-mini-cli
cd vue-mini-cli
npm init -y
npm i commander download-git-repo ora handlebars figlet clear chalk open
在vue-mini-cli文件夹中创建文件夹bin,在bin下创建index.js
bin/index.js
#指定脚本解释器为node
#!/usr/bin/env node
package.json
“bin”: {
“index”: “./bin/index.js”
},
将npm 模块链接到对应的运⾏项⽬中去
npm link
删除的情况
ls /usr/local/bin/
rm /usr/local/bin/
在bin下面的index.js中写入下面代码
#!/usr/bin/env node;
const program = require('commander');
const inquirer = require('inquirer');
const symbols = require('log-symbols');
const chalk = require('chalk');
const fs = require('fs');
const path = require('path');
const { promisify } = require('util')
const spawn = async (...args) => {
const { spawn } = require('child_process')
return new Promise(resolve => {
const proc = spawn(...args)
proc.stdout.pipe(process.stdout)
proc.stderr.pipe(process.stderr)
proc.on('close', () => {
resolve()
})
})
}
const clone = async (repo,desc) => {
const download = promisify(require('download-git-repo'))
const ora = require('ora')
const process = ora(`下载.....${repo}`)
process.start()
await download(repo, desc)
process.succeed()
}
const log = content => console.log(chalk.green(content))
program.version('1.0.0', '-v, --version').
command('init <name>').
action(name => {
// fs.existsSync 如果路径存在,则返回 true,否则返回 false
if (!fs.existsSync(name)) {
log(`创建项目:` + name)
//当前命令所在的上一个目录
inquirer.prompt([
{
name: 'description',
message: '请输入项目描述'
},
{
name: 'author',
message: '请输入作者名称'
}
]).then(async res => {
await clone('https://github.com:xfbaby/xxxxx', name);
log('安装依赖')
let pathname = path.resolve(__dirname,name+'/package.json');
const filename = pathname;
const content = fs.readFileSync(filename).toString();
let dt = JSON.parse(content);
dt.author = res.author;
dt.description = res.description
fs.writeFile( pathname ,`${JSON.stringify(dt)}`,function(err){
})
})
} else {
console.log(symbols.error, chalk.red('项目已存在'));
}
})
program.parse(process.argv);
发布npm
npm config get registry # 检查仓库镜像库
npm config set registry=http://registry.npmjs.org
echo '请进⾏登录相关操作:'
npm login # 登陆
echo "-------publishing-------"
npm publish # 发布
npm config set registry=https://registry.npm.taobao.org # 设置为淘宝镜像
echo "发布完成"
exit