实现小型打包工具

思路图解

image

思路:

A方法
  1. 找出入口文件全部的依赖关系css

    1. 读取并编译入口文件代码
    2. 依据入口文件代码广度遍历全部依赖文件(包括子级)
    3. 对外输出依赖关系
  2. 经过构建CommonJS代码来获取exports导出的内容git

    1. 构建modules对象字符串(key为文件id, 值为[对应的函数, mapping]
    2. 构建result函数字符串,并传入modules参数,函数中构建require函数,用于获取并执行对应文件
    3. 执行require(entry), 即执行对应的文件

有哪些功能点github

  1. 读取并编译文件代码
  2. 获取全部依赖文件
  3. 实现打包功能(构建出CommonJS的写法)

缺点:app

  1. 是用relativePath作文件模块的惟一标识,容易冲突
B方法

与A方法大致思路一致。函数

区别ui

  1. createCode函数 -》createAsset函数。 createAsset函数在返回值对象时,多一个标识符id(自增数字)
  2. getDependencies -》 createGraph, 给每一个文件item添加mapping对象用来保存本身所依赖的文件path:id对象,方便使用时找到id
  3. bundle函数。构建modules字符串时,是 id和[function, mapping]作key, value。构建result字符串时,require函数,接收的是filepath对应的id. 有localRequire函数

综上所述:spa

主要区别是此方法使用自增的id做为文件模块的惟一标识(不会重复)而不是文件相对路径(容易重复)
可是这也致使代码有更大复杂性,好比模块自身需记录mapping(来记住依赖文件相对路径和其id的对应关系)。用到localRequire方法来进行相对路径和id的转换。code

A方法多了处理css文件的能力对象

代码:

见github https://github.com/sunchengua...blog

参考资料

https://juejin.im/book/5bdc71...

https://zhuanlan.zhihu.com/p/...

https://zhuanlan.zhihu.com/p/...

相关文章
相关标签/搜索