vue-cli v2源码详解
总结
vue init <template-name> <project-name> 执行过程分析
- 获取参数
1
2
3
4
5
6
7
8
9
10
11
12/**
* Usage.
* 从命令中获取参数
* program.args[0] 模板类型
* program.args[1] 自定义项目名称
* program.clone clone
* program.offline 离线
*/
program
.usage('<template-name> [project-name]')
.option('-c, --clone', 'use git clone')
.option('--offline', 'use cached template') - 获取模板路径
1
2
3
4
5
6
7
8
9
10
11// rawName存在或者为“.”的时候,视为在当前目录下构建
const inPlace = !rawName || rawName === '.'
// path.relative():根据当前工作目录返回相对路径
const name = inPlace ? path.relative('../', process.cwd()) : rawName
// 合并路径
const to = path.resolve(rawName || '.')
// 检查参数是否clone
const clone = program.clone || false
// path.join():使用平台特定分隔符,将所有给定的路径连接在一起,然后对结果路径进行规范化
// 如 : /Users/admin/.vue-templates/webpack
const tmp = path.join(home, '.vue-templates', template.replace(/[\/:]/g, '-')) - run 函数:区分本地和离线,下载模板
1
2
3
4
5
6
7
8
9
10
11
12
13// 本地路径存在
if (isLocalPath(template)) {
// 获取绝对路径
const templatePath = getTemplatePath(template)
// 本地下载...
} else {
// 不包含“/”,去官网下载
if (!hasSlash) {
const officialTemplate = 'vuejs-templates/' + template
// 包含“/”,去自己的仓库下载
} else {
}
}
generate方法模板渲染的流程:
- 获取模板配置,
- 初始化 Metalsmith,添加变量至 Metalsmith
- handlebars 模板注册 helper
- 执行 before 函数(如果有)
- 询问问题,过滤文件,渲染模板文件
- 执行 after 函数(如果有)
- 构建项目
- 构建完成后,有 complete 函数则执行,没有则打印配置对象中的 completeMessage 信息,有错误就执行回调函数 done(err)
参考
vue-cli v2源码详解
http://arch94.github.io/2023/08/31/vue-cli v2源码详解/