前言
我们本次源码的目的是最终完成一个简化版的vue3,我们将他称为vue3-mini,本节我们就开始项目的搭建工作。
生成项目
引入ts
tsconfig.json范本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| { "compilerOptions": { "rootDir": ".", "strict": true, "moduleResolution": "node", "esModuleInterop": true, "target": "es5", "noUnusedLocals": false, "noUnusedParameters": false, "resolveJsonModule": true, "downlevelIteration": true, "noImplicitAny": false, "module": "esnext", "removeComments": false, "sourceMap": false, "lib": [ "esnext", "dom" ], "baseUrl": ".", "paths": { "@vue/*": [ "packages/*/src" ] } }, "include": [ "packages/*/src" ], }
|
引入代码格式化
vscode下载插件prettier
创建文件.prettierrc.js
1 2 3 4 5 6 7 8 9 10
| module.exports = { singleQuote: true, trailingComma: 'es5', semi: false, printWidth: 110, jsxSingleQuote: true, tabWidth: 2, useTabs: false, jsxBracketSameLine: true, }
|
创建文件.prettierignore
1 2 3 4 5 6 7
| # Ignore artifacts: dist build coverage common tsconfig.json README.md
|
后续的代码格式化工具上选择prettier即可
我们这里不使用eslint,不做非常强制的代码校验
创建相关文件
按照vue3源码中的结构进行创建,暂时只创建packages文件夹
引入打包工具
全局安装rollup
1
| npm install --global rollup
|
项目创建rollup配置文件rollup.config.js
output中的name暂时不生效
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| 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: [ { format: 'iife', sourcemap: true, file: './packages/vue/dist/vue.js', name: 'Vue', }, ], plugins: [ typescript({ sourceMap: true, }), resolve(), commonjs(), ], }, ]
|
package.json中增加打包命令
执行打包命令
然后我们在packages/vue/src/index.ts
编写测试代码
1 2 3
| import { isArray } from '@vue/shared' // ts部分我们配置了paths选项
console.log(isArray([]))
|
不出意外的话,这里肯定是正常打包了,并且会生成sourceMap文件。
热更新
package的script中增加一个命令
至此,基础的vue3框架环境我们就搭建完成了。