0x0001 vue 3.0 源码环境搭建

环境准备

git、yarn1.19.0、node10+、npm、vscode

vscode 插件
Code Spell Checker -- 用于检查单词拼写
Prettier -- 用于格式化代码
Gitlens -- git 的可视化插件

开发环境搭建

git clone https://github.com/vuejs/vue-next
yarn

工程整体介绍

采用 rollup 作为模块打包工具,
prettier 作为代码 lint 工具,
lerna 作为前端 packages 包管理工具,
采用了 typescript 作为开发语言

运行开发环境及部分代码解析

工程根目录下执行 yarn dev ,可在 package.json 中看到运行了 node scripts/dev.js,点击该文件查看,文件主要是通过 execa 插件(子进程管理,调用 shell 和外部程序的 JavaScript 的封装)调用 rollup 进行开发环境工程打包。

由于未通过设置参数声明打包的目标使用环境,因此 dev.js 文件中的 target 值为 vue,formats 值为 undefined,而 commit 值是获取当前 git rev-parse HEAD 的最新一次的 commit id 的前 7 位字符。因此最终启动子进程 rollup -wc --environment COMMIT:xxxxxxx,TARGET:vue,FORMAT:global,同时将 environment 中的参数设置到 process.env 对应的环境变量上,具体说明请查看 rollup 官方文档https://rollupjs.org/guide/en/#overview

执行 rollup 子进程时,启动参数中存在 -c ,该参数含义为指定启动配置文件,如果没有指定文件,默认配置文件为 rollup.config.js,因此接下来是解析 rollup.config.js 文件。

文件最开始定义部分常量,path.resolve 和 path.join 可参考path.join()和path.resolve()的区别

const packagesDir = path.resolve(__dirname, 'packages')
const packageDir = path.resolve(packagesDir, process.env.TARGET)
const name = path.basename(packageDir)
const resolve = p => path.resolve(packageDir, p)
const pkg = require(resolve(`package.json`))
const packageOptions = pkg.buildOptions || {}

接下来通过 rollup-plugin-alias 插件为每个 package 的 index.ts 入口文件设置别名,最终 aliasOptions 对象为

{
    "resolve": [".ts"],
    "@vue/compiler-core": "/Users/yida/Documents/coding/vue-next/packages/compiler-core/src/index",
    "@vue/compiler-dom": "/Users/yida/Documents/coding/vue-next/packages/compiler-dom/src/index",
    "@vue/reactivity": "/Users/yida/Documents/coding/vue-next/packages/reactivity/src/index",
    "@vue/runtime-core": "/Users/yida/Documents/coding/vue-next/packages/runtime-core/src/index",
    "@vue/runtime-dom": "/Users/yida/Documents/coding/vue-next/packages/runtime-dom/src/index",
    "@vue/runtime-test": "/Users/yida/Documents/coding/vue-next/packages/runtime-test/src/index",
    "@vue/server-renderer": "/Users/yida/Documents/coding/vue-next/packages/server-renderer/src/index",
    "@vue/shared": "/Users/yida/Documents/coding/vue-next/packages/shared/src/index",
    "@vue/template-explorer": "/Users/yida/Documents/coding/vue-next/packages/template-explorer/src/index"
}

未完待续。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 7,903评论 0 3
  • core package 概要:Core是所有其他包的基础包.它提供了大部分功能包括metadata,templa...
    LOVE小狼阅读 7,650评论 0 3
  • 在分析Vue的源码之前我们需要了解一些前置知识,如Flow、源码目录、构建方式、编译入口等。 认识 Flow Fl...
    oWSQo阅读 4,781评论 1 2
  • 晨读父母规,百日行动第100天[太阳]各位早安!成功坚持到100 天,从最初的字面上理解的父母和孩子,到内心觉察自...
    春艳敬荷阅读 6,614评论 0 0
  • 日子是开心要过,不开心也要过。控制情绪真的很重要! 把才华释放出来,把负面情绪抛开 不要遇到问题就急就烦,人到这个...
    fea6cdbd95c4阅读 2,515评论 0 0

友情链接更多精彩内容