第一章节 搭建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 核心模块的实现阶段!

相关推荐
OEC小胖胖7 分钟前
连接世界:网络请求 `wx.request`
前端·微信小程序·小程序·微信开放平台
jingling55520 分钟前
解决微信小程序真机调试中访问本地接口 localhost:8080 报错
前端·微信小程序·小程序
en-route21 分钟前
使用 Flask 构建 Web 应用:静态页面与动态 API 访问
前端·python·flask
IT_陈寒22 分钟前
Vite 5年迭代揭秘:3个核心优化让你的项目构建速度提升200%
前端·人工智能·后端
怎么吃不饱捏38 分钟前
vue3+vite,引入阿里巴巴svg图标,自定义大小颜色
前端·javascript·vue.js
无敌最俊朗@39 分钟前
MQTT 关键特性详解
java·前端·物联网
JAVA学习通40 分钟前
微服务项目->在线oj系统(Java-Spring)----[前端]
java·开发语言·前端
excel44 分钟前
Vue3 响应式系统核心执行器:Reactive Effect 与依赖调度机制
前端
南玖i3 小时前
vue3 通过 Vue3DraggableResizable实现拖拽弹窗,可修改大小
前端·javascript·vue.js
excel3 小时前
Web发展与Vue.js导读
前端