vue3源码(一)搭建开发环境

Monorepo:是管理项目代码的一个方式,指在一个项目仓库(repo)中管理多个模块/包(package)
vue3源码采用Monorepo管理项目

vue3项目架构

在这里插入图片描述

搭建Monorepo环境

1.全局安装pnpm

npm install pnpm -g # 全局安装pnpm
pnpm init -y # 初始化配置文件

创建.npmrc文件:如果某些工具仅在根目录的node_modules时才有效,可以将其设置为true来提升那些不在根目录的node_modules,就是将你安装的依赖包的依赖包的依赖包的…都放到同一级别(扁平化)

shamefully-hoist = true

配置workspace
新建 pnpm-workspace.yaml :将packages下所有的目录都作为包进行管理

packages:- 'packages/*'

2.安装环境

pnpm install typescript rollup rollup-plugin-typescript2 @rollup/plugin-json @rollup/plugin-node-resolve @rollup/plugin-commonjs minimist execa@4 esbuild   -D -w
  • typescript vue3使用ts
  • rollup 打包工具
  • rollup-plugin-typescript2 rollup 和 ts的 桥梁
  • @rollup/plugin-json 支持引入json
  • @rollup/plugin-node-resolve 解析node第三方模块
  • @rollup/plugin-commonjs 将CommonJS转化为ES6Module
  • minimist 命令行参数解析
  • execa@4 开启子进程
  • esbuild

3.ts

初始化:pnpm tsc --init
常用配置文件:

{"compilerOptions": {"outDir": "dist", // 输出的目录"sourceMap": true, // 采用sourcemap"target": "es2016", // 目标语法"module": "esnext", // 模块格式"moduleResolution": "node", // 模块解析方式"strict": false, // 严格模式"resolveJsonModule": true, // 解析json模块"esModuleInterop": true, // 允许通过es6语法引入commonjs模块"jsx": "preserve", // jsx 不转义"lib": ["esnext", "dom"], // 支持的类库 esnext及dom}
}

4.创建模块

在这里插入图片描述
reactivity/package.json

{"name": "@vue/reactivity","version": "1.0.0","main": "index.js","module":"dist/reactivity.esm-bundler.js","unpkg": "dist/reactivity.global.js","buildOptions": {"name": "VueReactivity","formats": ["esm-bundler","cjs","global"]}
}

shared/package.json

{"name": "@vue/shared","version": "1.0.0","main": "index.js","module": "dist/shared.esm-bundler.js","buildOptions": {"formats": ["esm-bundler","cjs"]}
}

formats为自定义的打包格式:

  • esm-bundler在构建工具中使用的格式
  • esm-browser在浏览器中使用的格式
  • cjsnode中使用的格式
  • global立即执行函数的格式
pnpm install @vue/shared@workspace --filter @vue/reactivity"baseUrl": ".",
"paths": {"@vue/*": ["packages/*/src"]
}

5.开发环境esbuild打包

"scripts": {"dev": "node scripts/dev.js reactivity -f global"
}
const { build } = require('esbuild')
const { resolve } = require('path')
const args = require('minimist')(process.argv.slice(2));const target = args._[0] || 'reactivity';
const format = args.f || 'global';const pkg = require(resolve(__dirname, `../packages/${target}/package.json`));const outputFormat = format.startsWith('global')// 输出的格式? 'iife': format === 'cjs'? 'cjs': 'esm'const outfile = resolve( // 输出的文件__dirname,`../packages/${target}/dist/${target}.${format}.js`
)build({entryPoints: [resolve(__dirname, `../packages/${target}/src/index.ts`)],outfile,bundle: true,sourcemap: true,format: outputFormat,globalName: pkg.buildOptions?.name,platform: format === 'cjs' ? 'node' : 'browser',watch: { // 监控文件变化onRebuild(error) {if (!error) console.log(`rebuilt~~~~`)}}
}).then(() => {console.log('watching~~~')
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/422121.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 Redis 实现高性能、低延迟的延时消息的方案演进

🎉欢迎来系统设计专栏:基于 Redis 实现高性能、低延迟的延时消息的方案演进 📜其他专栏:java面试 数据结构 源码解读 故障分析 🎬作者简介:大家好,我是小徐🥇☁️博客首页&#xff1…

C++--入门(命名空间缺省参数函数重载)

目录 0.前言 1. C关键字(C98) 2. 命名空间 3. C输入&输出 4. 缺省(默认)参数 5. 函数重载 6.C支持函数重载的原理--名字修饰(name Mangling) 0.前言 C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题&#xff0c…

I2C接口简介

一、简介 11I2C(Inter-IntegratedCircuit)总线是由PHILIPS公司开发的两线式串行通信总线,使用多主从架构,用于连接微控制器及其外围低速设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形…

了解森林消防灭火泵:为何它是森林安全的关键

在森林火灾中,火势蔓延速度极快,一旦发生火灾,很难及时控制和扑灭。传统的灭火方法主要是利用水扑救,这种方法具有经济、简单、有效等优点。然而,在我国森林火灾中,水资源一直没有得到充分的利用。至今&…

【C++】string的基本使用二

我们接着上一篇的迭代器说起,迭代器不只有正向的,还有反向的,就是我们下边的这两个 它的迭代器类型也是不同的 rbegin就是末尾,rend就是开头,这样我们想遍历一个string对象的话就可以这样做 int main() {string s1(…

CC工具箱使用指南:【检查现状规划用地变化】

一、简介 在规划工作中,有一个普遍性的需求,就是需要检查规划前后在用地上究竟发生了哪些变化。 这一点很重要,不仅是要展示给别人看,自己也要十分注意。 规划方案完成后,一定要进行用地变化的检查,曾经…

从一到无穷大 #21 从基于多数据模型分析负载的Benchmark讨论多模数据库的发展方向

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言M2Bench测试结果从Lindorm看待多模的发展方向总结 引言 《M2Bench: A Database …

VSCode无法下载插件,提示 Error while fetching extensions : XHR failed

解决方案: 打开vscode,依次点击File->Preferences->settings,中文就是文件->首选项->设置,打开如下图: 我们去搜索:Proxy , 然后回车 最重要的一步:将Http Prox…

【GitHub项目推荐--智能家居项目】【转载】

如果你具备硬件、软件知识,这个项目肯定符合你的胃口。 物美智能是一套软硬件结合的开源项目,该系统可助你快速搭建自己的智能家居系统。你可以学习到设备的集成和软硬件交互。 PC 端或者手机与服务端通信,单片机可以接受遥控设备和服务器的…

【Web实操10】定位实操_图片上面定位文字

参考实现的效果是这样的: 目前还没有学到渐变色,所以标签效果的渐变色没有实现,只是利用radius设置了圆角图形,辅之以背景色和设置其中文本文字的颜色和居中对齐。 在自己写的过程中,对于标签的定位写成了相对定位&a…

YOLOv8改进 | Conv篇 | 2024.1月最新成果可变形卷积DCNv4(适用检测,Seg,,分类、Pose、OBB)

一、本文介绍 本文给大家带来的改进机制是2024-1月的最新成果DCNv4,其是DCNv3的升级版本,效果可以说是在目前的卷积中名列前茅了,同时该卷积具有轻量化的效果!一个DCNv4参数量下降越15Wparameters左右,。它主要通过两个方面对前一版本DCNv3进行改进:首先,它移除了空间聚…

【Linux】

Linux零基础入门 列出文件/文件夹新建/切换路径查看当前路径重命名或者移动文件夹拷贝文件/文件夹删除文件夹设置环境变量编辑文本文件压缩和解压查看cpu的信息查看/杀死进程查看进程的CPU和内存占用重定向日志场景一场景二场景三场景四 列出文件/文件夹 命令:Ls(L…