大家好,我是作曲家种太阳,本次的专栏会带你一步步实现一个mini-vue3,每个小节都都回有一些测试,验证当前的一个逻辑,并且我已经把代码上传到github上了,可以根据每个章节去看对应的源码提交记录。
本章搭建 mini-vue 的环境,只有少量代码,预计15分钟搞定
第一步:创建项目结构
bash
mkdir mini-vue3
cd mini-vue3
code .
npm init -y
项目结构规划
md
mini-vue3/
├── packages/
│ ├── vue/ # 框架入口、打包配置、测试实例
│ ├── shared/ # 工具函数公共模块
│ ├── compiler-core/ # 编译器核心模块
│ ├── compiler-dom/ # 编译器 DOM 相关模块
│ ├── reactivity/ # 响应式系统模块
│ ├── runtime-core/ # 运行时核心模块
│ └── runtime-dom/ # 浏览器运行时模块
└── tsconfig.json # TypeScript 配置
第二步:配置 TypeScript
在项目根目录下创建 tsconfig.json
:
json
// https://www.typescriptlang.org/tsconfig,也可以使用 tsc -init 生成默认的 tsconfig.json 文件进行属性查找
{
// 编辑器配置
"compilerOptions": {
// 根目录
"rootDir": ".",
// 严格模式标志
"strict": true,
// 指定类型脚本如何从给定的模块说明符查找文件。
"moduleResolution": "node",
// https://www.typescriptlang.org/tsconfig#esModuleInterop
"esModuleInterop": true,
// JS 语言版本
"target": "es5",
// 允许未读取局部变量
"noUnusedLocals": false,
// 允许未读取的参数
"noUnusedParameters": false,
// 允许解析 json
"resolveJsonModule": true,
// 支持语法迭代:https://www.typescriptlang.org/tsconfig#downlevelIteration
"downlevelIteration": true,
// 允许使用隐式的 any 类型(这样有助于我们简化 ts 的复杂度,从而更加专注于逻辑本身)
"noImplicitAny": false,
// 模块化
"module": "esnext",
// 转换为 JavaScript 时从 TypeScript 文件中删除所有注释。
"removeComments": false,
// 禁用 sourceMap
"sourceMap": false,
// https://www.typescriptlang.org/tsconfig#lib
"lib": ["esnext", "dom"],
"paths": {
"@vue/*": ["packages/*/src"]
}
},
// 入口
"include": [
"packages/*/src"
]
}
第三步:配置 Prettier
为了保持代码风格统一,使用 Prettier 进行代码格式化:
- 安装 VSCode 插件:
Prettier - Code formatter
- 在项目根目录创建
.prettierrc
文件:
json
{
"semi": false,
"singleQuote": true,
"printWidth": 100
}
第四步:配置 Rollup 打包工具
安装依赖:
bash
npm install -D rollup @rollup/plugin-commonjs @rollup/plugin-node-resolve @rollup/plugin-typescript typescript tslib
创建配置文件 rollup.config.js
:
js
import resolve from '@rollup/plugin-node-resolve'
import commonjs from '@rollup/plugin-commonjs'
import typescript from '@rollup/plugin-typescript'
export default [{
input: 'packages/vue/src/index.ts',
output: [{
sourcemap: true,
file: 'packages/vue/dist/vue.js',
format: 'iife',
name: 'Vue'
}],
plugins: [
typescript({ sourceMap: true }),
resolve(),
commonjs()
]
}]
在 packages/vue/src/index.ts
中写入:
ts
console.log('hello mini-vue3')
配置构建命令,在 package.json
中添加:
json
"scripts": {
"build": "rollup -c"
}
"type": "module",
执行构建:
bash
npm run build
第五步:配置路径映射
在 tsconfig.json
中添加路径映射:
json
"paths": {
"@vue/*": ["packages/*/src"]
}
使用示例:
ts
import { isArray } from '@vue/shared'
本小节完成以后的目录结构

小结
本章节我们完成了:
- 手动创建并初始化
mini-vue3
项目结构 - 配置 TypeScript 编译环境
- 引入 Prettier 控制代码风格
- 使用 Rollup 进行打包配置
- 设置路径映射,优化模块引入方式
至此,一个初步框架项目的基础结构已经搭建完成,接下来我们将正式进入 Vue 核心模块的实现阶段!