第一章节 搭建mini-vue3框架【手摸手带你实现一个vue3】

大家好,我是作曲家种太阳,本次的专栏会带你一步步实现一个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'

本小节完成以后的目录结构

小结

本章节我们完成了:

  1. 手动创建并初始化 mini-vue3 项目结构
  2. 配置 TypeScript 编译环境
  3. 引入 Prettier 控制代码风格
  4. 使用 Rollup 进行打包配置
  5. 设置路径映射,优化模块引入方式

至此,一个初步框架项目的基础结构已经搭建完成,接下来我们将正式进入 Vue 核心模块的实现阶段!

相关推荐
lpfasd1236 小时前
node-sass 停止维护!老项目迁移 Dart Sass 完整教程
前端·rust·sass
Data analyse4568 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
xiaogai_gai8 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
环境栈笔记9 小时前
指纹浏览器 WebRTC 怎么设置?从 ICE 候选、代理出口到功能验证
前端·人工智能·后端·自动化
赵大仁9 小时前
官网性能优化实战:LCP 3.2s → 2.1s、CLS 0.107 → 0,以及被我推翻的 6 个判断
前端·性能优化·cls·lcp·core web vitals
xiancai_xianyu9 小时前
Text2SQL落地生产库前,SQL要过哪三道闸
前端·数据库·sql·sql注入·text2sql·ai agent开发·企业级ai框架
小羊没烦恼!10 小时前
T-SQL查询进阶--理解SQL SERVER中的分区表
服务器·开发语言·前端·javascript·html
史瓦辛格10 小时前
给 DeepSeek Harness 写费用插件:把「这次会话花了多少钱」算准
前端·deepseek
星光不问赶路人10 小时前
Vue 3 + TypeScript 中 enum 的使用实践
前端·vue.js
鸥梨菌Honevid10 小时前
UVM 中 REQ 和 RSP 类型详解:从通信模型到 item_done 与 put_response
java·前端·servlet