基于浏览器的实时构建探索之路

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1.
2. 基于浏览器器的实时构建探索之路路 RichLab 花呗借呗前端团队 - 姜维(⽞玄寂)
3. ⾃自我介绍 dora spm ant-tool amb IDE umi babel Gravity webpack pigcan 猪罐头
4. 基于浏览器器实时构建的案例例
5. ⽬目录 • 背景 • 机遇与挑战 • 架构⼤大图 • 专题深⼊入 • 未来
6. 背景
7. 背景 - 前端构建史 模块化: 模块定义 源⽣生态 bundler 2011 复⽤用性: 粒⼦子化 合并、压缩 2019 2013 Don’t Build That App! Luke Jackson / April 4, 2019 A Future Without Webpack Fred K. Schott / March 12, 2019
8. 背景 - 声⾳音的背后 - 学习曲线 • • • • • • • 前端构建的概念 如何在琳琅满⽬目的打包⼯工具中做选择 如何安装环境,如何执⾏行行构建,如何执⾏行行调试 如何配置 - webpack、webpack loaders and plugins etc. 如何写插件 - babel APIs、webpack APIs etc. 如何调试插件 如何解决依赖升级 - babel 5 -> 6 -> 7, webpack 1 -> 2 -> 3 -> 4 -> 5
9. 背景 - 声⾳音的背后 - 包管理理
10. 背景 - 声⾳音的背后 - 包管理理 太阳 中⼦子星 ⿊黑洞洞 node_modules
11. 背景 - 趋势 2019 云化 可视化编程 ? 包管理理 Bundler ? 资源分发 资源加载
12. 机遇与挑战
13. 机遇 - 2019 年年在发⽣生哪些变化 Pro / Low Code
14. 机遇 - 变化背后的构建 专业 Codesandbox、Stackbiltz、Gitlab Web IDE、Ali Cloud IDE 辅助 Outsystems、Mendix、云凤蝶 - 编辑器器 / 画板 三种态度 - 编辑器器 / 画板 + 限制性的研发环境 - 编辑器器 / 画板 + 开放性的研发环境 两种⽅方案 - 容器器 - 基于浏览器器的加载策略略
15. 机遇 - 变化背后的构建 两种⽅方案 两种类型 - 容器器 - 基于浏览器器的加载策略略 - 服务端能⼒力力的输出 - 客户端能⼒力力的释放 优势: 服务端拥有和本地研发环境⼀一致化的环境 缺点: 即时性较差、效率较差、⽆无法离线、成本⾼高昂 优势: ⽆无服务端依赖、即时性、⾼高效率、可离线运⾏行行 缺点: ⽆无法输出系统级能⼒力力,所有能⼒力力建设都围绕着浏览器器技术
16. 机遇 - ⾯面向未来
17. 机遇 - 声⾳音 Don’t Build That App! Luke Jackson / April 4, 2019 A Future Without Webpack Fred K. Schott / March 12, 2019
18. 机遇 - 声⾳音背后 Bundless
19. 机遇 - 声⾳音背后 - Bundless 的实现 — 模块加载器器: 获取依赖 -》编译依赖 systemjs 0.21.x & JSPM 1.x @stackblitz @codesandbox — Native-Module 加载⽅方案 systemjs >= 3.x & JSPM 2.x @pika/web
20. 机遇 - 未来 云 + Browser Based Bundless + Web NPM Gravity
21. Gravity 的挑战 — 如何基于浏览器器实现: - nodejs ⽂文件系统 - nodejs ⽂文件 resolve 算法 - nodejs 内置模块 - 任意模块格式的加载 - 多媒体⽂文件 - 单⼀一⽂文件多种编译⽅方式 - 缓存策略略 - 包管理理 - …… 总结为: - 如何设计资源⽂文件的加载器器 - 如何设计资源⽂文件的编译体系 - 如何设计浏览器器端的⽂文件系统 - 如何设计浏览器器端的包管理理
22. Gravity 架构⼤大图
23. 我们现在⾛走的路路 Gravity 核⼼心 插件系统 编译器器 preset babel code style 编译链 ⼯工具类 validator rule set runtime config error json cache loader factory entry svg …… …… helper …… gravityfs / with multiple backends offgravityjs/ systemjs/ runtime module loader gravity CDN/ NPM web solution …… tapable offgravityjs browser-resolve gravityfs browserfs systemjs less ……. babel-standalone BASE
24. 核⼼心在解决的问题 编译体系 ⽂文件系统 插件系统 编译器器 preset babel code style 编译链 加载器器 包管理理 ⼯工具 validator rule set runtime config error json cache loader factory entry svg …… …… helper …… …… gravityfs / with multiple backends offgravityjs/ systemjs/ runtime module loader gravity CDN/ NPM web solution
25. 名词解释 index.axml 对应的 Ruleset Transpiler 代码 A 转换为代码 B 转换器器 JSONTranspiler Preset 是⼀一份构建描述集合,该集合包含了了模块加载器器⽂文件加载的描述, 转换器器的描述,插件的描述等。 Ruleset 具体⼀一个⽂文件应该被怎么样的 transpilers 来转换。 demoPreset
26. Gravity 的消费链 ⼩小程序 Web IDE 云凤蝶 载体 …… Preset ⼩小程序 React Vue appx CRA Vue-cli …… …… …… Gravity 核⼼心 更更多的 垂直业务 资源⽂文件 加载策略略描述
27. Gravity 到底是什什么 Gravity 是实现浏览器器实时构建的事件流集合,它不不指代某种通⽤用业务。
28. 专题深⼊入
29. 专题 1:插件机制
30. Gravity 是如何运作的 emit Plugin done 1 code preset 3 bfs 2 validate 2 Gravity - Core 7 transpile 4 fetch-data 5 generate -entry 1 loader 6
31. Gravity 是如何运作的 Gravity 本质上是事件流机制,它的核⼼心流程就是将插件连接起来。 • • • 如何进⾏行行事件编排 如何保证事件执⾏行行的有序性 如何进⾏行行事件的订阅和消息的分发
32. 似曾相识 Webpack <- Tapable
33. Tapable sync Tapable async SyncHook 串串⾏行行 SyncBailHook 串串⾏行行,有返回则中断 SyncWaterfallHook 串串⾏行行,上个订阅返回传递给下个 SyncLoopHook 循环,订阅⾄至返回 undefined AsyncParallelHook 并发 AsyncParallelBailHook 并发,有返回则中断,执⾏行行最后回调 AsyncSeriesHook 串串⾏行行,不不关注回调 AsyncSeriesBailHook 串串⾏行行,回参不不为null,执⾏行行最后回调 AsyncSeriesWaterfallHook 串串⾏行行,回参可以作为下⼀一回调参数
34. 举个例例⼦子 2 ⾃自定义插件 订阅事件 Core - Plugin Core 1 申明⼀一个可以被订阅的事件 3 绑定订阅事件 4 分发事件
35. Gravity 的抽象 Core Plugin Custom Plugins 编排事件并分发 声明事件 订阅事件
36. 专题 2:如何实现编译链
37. 回看⽂文件编译规则 Ruleset ⽂文件编译规则集合 Ruleset-A Ruleset-B … Ruleset-C Ruleset-D lessPlugins base64 less png plugins 语义配置 presets transformConfig …… 转换器器 babel appx …
38. Ruleset 的含义 index.axml 对应的 Ruleset index.axml Babel-Transpiler Ruleset-A Appx-Transpiler
39. 编译链的含义 index.axml result Appx-Transpiler result Babel-Transpiler 下级消费链路路
40. 编译链的本质 解决事件有序性的问题
41. 似曾相识 Tapable
42. AsyncSeriesWaterfallHook sync Tapable async SyncHook 串串⾏行行 SyncBailHook 串串⾏行行,有返回则中断 SyncWaterfallHook 串串⾏行行,上个订阅返回传递给下个 SyncLoopHook 循环,订阅⾄至返回 undefined AsyncParallelHook 并发 AsyncParallelBailHook 并发,有返回则中断,执⾏行行最后回调 AsyncSeriesHook 串串⾏行行,不不关注回调 AsyncSeriesBailHook 串串⾏行行,回参不不为null,执⾏行行最后回调 AsyncSeriesWaterfallHook 串串⾏行行,回参可以作为下⼀一回调参数
43. 问题被简化为 如何动态创建 AsyncSeriesWaterfallHook 事件,以及如何分发
44. 专题 3:⽂文件系统和包管理理
45. ⽂文件系统 站在巨⼈人的肩膀上
46. ⽂文件系统 backends FileSystem API
47. ⽂文件系统如何介⼊入包管理理 1 思路路:浏览器器内实现 NPM NPM • • • 包信息拉取 包依赖处理理 包安装 …… • • 依赖拓拓扑结构 ⽂文件编译 browserfs • 存储
48. ⽂文件系统如何介⼊入包管理理 1 思路路:浏览器器内实现 NPM 的缺点: • • • 慢 存储量量⼤大 依赖 NPM Scripts 的包如何解决 完整的移植 NPM 在⾯面向浏览器器时这种包管理理的形式是否合理理?
49. Turbo CDN 引起的思考 https://medium.com/stackblitz-blog/introducing-turbo-5x-faster-than-yarn-npm-and-runs-natively-in-browser-cc2c39715403
50. Turbo CDN 引起的思考 服务化 数据结构 NPM • • • 包信息拉取 包依赖处理理 包安装 …… • • 依赖拓拓扑结构 ⽂文件编译 browserfs • 存储
51. 基于⽹网络的⽂文件系统 - unpkg / jsdelivr 结构获取 package 服务端 meta 依赖结构 bfs tree tree bfs dynamic-load file ⽂文件获取 package/file
52. 基于⽹网络的⽂文件系统 - 本质 • 下发策略略 • 桥接浏览器器⽂文件系统 - 依赖的下发策略略 - 基于项⽬目维度 - 基于⼊入⼝口⽂文件分析的⾸首次下发逻辑 - 默认策略略不不满⾜足时,动态下发 - 数据结构记录依赖关系 - 缓存依赖信息 - 数据结构和浏览器器⽂文件系统建⽴立桥接 - ⽂文件 resolve,读取
53. 未来
54. PVC • Pipelined 流⽔水线化 垂直业务场景所对应的 Preset 的产出,可以按着某个流程,⽤用极少的成本⾃自由组合⼀一下就可以使⽤用。 • Visualized 可视化 所有搭建 Preset 、以及 Preset 内配置都为可视化⽅方式露露出 • Clouds 云化 能⼒力力服务化
55. 总结
56. 总结 浏览器器的实时构建 - 如何设计资源⽂文件的加载器器 - 如何设计资源⽂文件的编译体系 - 如何设计浏览器器端的⽂文件系统 - 如何设计浏览器器端的包管理理
57. 感谢聆听
58. 演讲调查问卷 个⼈人微信号

ホーム - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-15 18:01
浙ICP备14020137号-1 $お客様$