【源码阅读】| 从零阅读 cac 源码(通用部分) | 催学社

308 阅读2分钟

CAC 源码阅读(通用部分)

今天所阅读的库为CAC,在分析一个库时,经常会发现有很多通用的配置文件,那么我们首先分析一下这些通用的配置。

github.com/cacjs/cac#u…

项目目录结构

cac
├─.editorconfig ------------------------------ 保持不同IDE规范编码风格 [【官网】](https://editorconfig.org/)
├─.gitattributes ------------------------------ 可以设置文件的属性,如行尾字符
├─.gitignore ---------------------------------- 配置`git`忽略不想提交的文件
├─.prettierrc ---------------------------------- prettier 代码格式化工具配置项
├─circle.yml ---------------------------------- Circle CI持续集成配置
├─index-compat.js -------------------------- 项目主入口
├─jest.config.js ------------------------------ jest 配置文件
├─LICENSE ---------------------------------- 开源协议文件
├─mod.js -------------------------------------- 兼容deno
├─mod.ts -------------------------------------- 兼容deno
├─mod_test.ts
├─package.json ------------------------------ npm 项目描述文件
├─README.md ------------------------------ 项目简介
├─rollup.config.js ----------------------------- rollup 配置文件(打包工具)
├─test.js
├─tsconfig.json
├─yarn.lock
├─src  -------------------------------------------- 项目主目录
|  ├─CAC.ts
|  ├─Command.ts
|  ├─deno.ts
|  ├─index.ts
|  ├─node.ts
|  ├─Option.ts
|  ├─utils.ts
|  ├─__test__
|  |    ├─index.test.ts
|  |    ├─__snapshots__
|  |    |       └index.test.ts.snap
├─scripts ---------------------------------------- 项目中用到的脚本文件
|    └build-deno.ts
├─examples ------------------------------------ 项目示例
|    ├─basic-usage.js
|    ├─command-examples.js
|    ├─command-options.js
|    ├─dot-nested-options.js
|    ├─help.js
|    ├─ignore-default-value.js
|    ├─negated-option.js
|    ├─sub-command.js
|    └variadic-arguments.js
├─.github
|    ├─FUNDING.yml
|    └ISSUE_TEMPLATE.md
├─.git ---------------------------------------------- git的相关配置,如git的钩子函数

.editorconfig 是干嘛的

  • 保持不同IDE规范编码风格 【官网】
  • 如win环境下换行符为CRLF,mac环境下是LF

.gitattributes 是干嘛的

  • 为了在git commit阶段保证文件的属性一致性,如行尾字符,行尾是否换行等

持续集成是如何实现的

  • 通过配置git hook触发对应的流程,如自动化测试,然后通过Jenkins一类的工具来触发自动化构建和部署

  • circle.yml 是如何配置的

单元测试环境是如何搭建的

  • ts-jest 是解决什么问题的

    • jest是一个JavaScript的测试框架,它集成了断言+测试的功能, 无须组合其他工具即可实现单元测试。
      • 如果没有 ts-jest 的话 你会搭建基于 ts 的 jest 的环境嘛? (@TODO)
        • 写个 demo? (@TODO)
  • jest.config.js 这几个字段都有什么用?

  • 官网配置文档

package.json 里面的字段都是干嘛的

  • 官网配置文档
  • 发布一个库需要用到哪些字段
    • name包名
    • version 版本号
    • author 作者名称
    • license 开源协议

写一个库的 README 需要哪几个部分?

  • 介绍这个库是为了解决什么问题的
  • 这个库有什么特点
  • 这个库的一些安装,使用方法
  • 提供相关的example让读者更好的理解和使用
  • 如果读者想提交PR,以怎么样的方式去提交
  • 有哪些可以快速生成 readme 的库

tsconfig 里面的配置项

官网文档