通过vue-cli
我们可以快速的,无配置的创建我们的项目,vue-cli
为我们写好了webpack
配置,在创建项目时又可以根据命令行交互集成vue-router,post-css,less或者sass,babel,eslint
等等,还有非常友好的图形化界面帮助我们完成自己的项目配置。
但是我们的项目总有需要定制化的配置,比如,我们需要引入我们想要的UI
框架,比如,我们想要引入axios
完成http
请求等;平时项目开发中,往往与后台的http
交互都是约定好的,项目配置只需写一次就好,但是通过vue-cli
一键生成项目之后,相关的配置我们还得再写一次,比较麻烦,所以我们可以完成一个个性化配置好的脚手架,平时创建项目时通过该脚手架一键生成,并同时完成所有需要的配置,以快速开发。
该脚手架完成的前提是将自己配置好的模板项目上传到github
仓库,以自己配置好的vue
项目为模板,创建新的项目;
1,脚手架的工作原理
(1)通过命令行交互询问用户问题;
(2)根据用户回答的结果生成文件;
2,创建cli准备工作
(1)新建cli
文件夹,通过npm init
生成package.json
文件,并删除不必要的scripts
字段;
(2)在项目根目录下创建bin.js
文件,在package.json
文件中增加一个bin
字段并指向bin.js
,用于指定模块的入口文件:
"bin": "bin.js",
(3)需要特别注意的一点是:我们要在bin.js
文件头部需要添加#!/usr/bin/env node
,用于指定该文件需要使用node
来运行,让系统动态的去查找node
,以解决不同机器不同用户设置不一致问题;
(4)在终端中通过npm link
将我们的包映射到全局,这样就可以通过运行模块名来运行我们的模块,以方便我们在本地测试。
至此装备工作已完成,现在就可以在bin.js
文件中写我们模块的逻辑啦。
3,创建cli所需要的依赖模块
commander
实现控制台命令行问题交互;
chalk
为控制台输出的文字着色;
download-git-repo
拉去github
项目代码;
ora
实现控制台进度条样式;
4,实现脚手架代码
1,引入所需依赖
#!/usr/bin/env node
const program = require('commander');//cmd控制台交互
const ora = require('ora');//进度条
const chalk = require('chalk');//给提示文案着色
const download = require('download-git-repo');//拉取github项目
const fs = require('fs');
2,配置错误文案和成功文案的样式
// 提示样式
const success = chalk.blueBright;
const error = chalk.bold.red;
3,设置github
模板项目的地址链接
const templateUrl = 'direct:https://github.com/chang229/vue.git';//github项目地址
4,创建命令
program.version('0.1.0')
.option('-i, init [name]', '初始化项目')
.parse(process.argv);
通过运行init
命令快速创建项目,通过pargram.init
可以拿到init
之后的项目名称;
5,运行init
命令之后开始拉去代码
// 拉取项目代码
if (program.init && typeof program.init === "string") {
const spinner = ora('正在拉取模板...').start();//开启进度条
download(templateUrl, program.init, { clone: true }, function (err) {
if (!err) {
spinner.succeed(success('拉取成功'));
// 更改 package.json 中的 name 和版本号
changePackage()
} else {
console.log(err);
spinner.fail('拉取失败');
}
});
} else {
console.error(error('请在init后输入目录名'));
}
6,替换模板文件中package.json
文件中的name
字段
// 替换模板package.json文件的name字段
const changePackage = () => {
fs.readFile(`${process.cwd()}/${program.init}/package.json`, (err, data) => {
if (err) throw err;
let _data = JSON.parse(data.toString());
_data.name = program.init;
_data.version = '1.0.0';
let str = JSON.stringify(_data, null, 4);
fs.writeFile(`${process.cwd()}/${program.init}/package.json`, str, function (err) {
if (err) throw err;
})
});
};
5,完成
等控制台进度完成之后,就可以cd
进入创建好的项目,执行npm install
安装所有依赖,然后就可以开心的开发项目啦.