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

相关推荐
锋行天下13 分钟前
大屏可视化适配不同宽高比屏幕,保持网页宽高比不变的代码
前端
依辰21 分钟前
小程序SAAS产品定制化需求解决方案
前端·javascript·微信小程序
anyup26 分钟前
uni-app 蓝牙打印:实现数据分片传输机制
前端·uni-app·trae
云端看世界42 分钟前
为什么要学习 ECMAScript 协议
前端·javascript·ecmascript 6
91744 分钟前
无缝轮播图实现:从原理到实践
前端
我爱鸿蒙开发1 小时前
🥇聊聊鸿蒙的一端开发,多端部署。
前端·开源·harmonyos
前端付杰1 小时前
深入理解 IndexedDB:索引与游标查询的高效应用
前端·javascript·indexeddb
best6661 小时前
前端项目SVG展示方案总结,以Vue3+TS为例
前端
啊花是条龙1 小时前
Angular 开发指南:组件、数据绑定、指令、服务、HTTP、路由和表单
前端·angular.js
小桥风满袖1 小时前
Three.js-硬要自学系列12 (各种贴图的综合应用)
前端·css·three.js