2019年个人 TypeScript 轮子这样写

(本文近日施工中...)webpack

与各位分享近期笔者写一个较繁复的轮子的过程,以及其中的踩坑与思考。如有更佳实践,还望不吝赐教。git

要素察觉:目录结构, git 分支策略, TS 与 Lint ,多个构建入口和目标包格式 (TS 与 构建,TS 与 Jest(测试) ,Rollup), tree shaking 与摇不下来的反作用,蛋疼的 jest debug 与 source map 。github

轮子样貌

轮子是作 Flow-based Programming 用的,主要和我导师项目有关,若是你对这种编程范式有兴趣,能够进入 这个 Wiki 传送门 和 这个 awesome-fbp 项目看看相似的 FBP 项目。用过 IBM 的 UML 工具的同窗可能更好理解,它相似活动和状态图。拿经常使用的库做比较的话,这个库性质相似 lodash, RxJS 这种辅助 coding 的工具库,这种范式有函数式和响应式编程的味道,具体是属于数据流编程的一种。由于解释起来很麻烦,因此略去千字...web

一些小目标

覆盖主要几种包格式

  • CommonJS:Node.js 的寻常包格式,用 npm 安装再直接 require 那种
  • ES Module:ES2015 标准推的 JS 模块标准,搭配 webpack/rollup 摇一摇食用更佳,rollup 还会作数据流分析,摇树的力度更大。咱们把 ESM 版本也放在 npm 发布的包里,提供 package.json 中的 module 字段和一个 path-mapping 文件(给 Babel/webpack/rollup 配置时用的),将用户普通 require 的目标重定向到 ESM 版本
  • UMD:一种兼容 CJS,ESM,AMD 以及全局导出的包格式。一般直接 HTML 里 <script src="..."> 的那种。一样把它放在 npm 包中,再给 package.json 添加 unpkg, jsdelivr 字段,这两家是 npm 的 CDN ,使用户从 CDN 加载时指向 UMD 格式的包。
  • ES Module (browser): ESM 格式的包,给浏览器用的,<script type="module" src="..."></script> 的那种。
CJS 和 ESM 发布的包应是模块化、多文件的,UMD 和 ESM-browser 则将全部文件打成一个包,方便用户下载和导入。
  • typings:TypeScript 的声明文件,建议看成一个版本,单独放在一个文件夹;否则 *.js, *.js.map, *.d.ts 在一块儿看着很挤,版本之间又重复

使用多个构建入口和常量,而非环境变量

(本文近日施工中...)npm

相关文章
相关标签/搜索