library-rollup-template:构建库libra

2021-02-02  本文已影响0人  科研者

构建过程是复杂的前端项目必不可少的环节;但 业务代码 与 公用代码(如:封装的库、组件、工具等被复用的代码)的构建需求是不一样的;我发现很多 npm 贡献者都没意识到这一点,他们用传统的业务项目的 webpack 配置 去打包 公用代码,虽然能运行,但实际潜藏着许多问题,甚至都不经过编译构建,直接发布单纯的源码到 npm 上;由于本人经常封装一些东西,为了方便,就分别使用 rollup 和 webpack 开发并配置了专门用于构建公共代码的配置模板;本仓库是 rollup 版本的配置模板;webpack 版本的配置模板请看 library-webpack-template

目录

内容

注意:
为了方便下文描述,我把 业务代码 构建出的最终产品称为 应用程序;把 公用代码 构建的出产品称为 组件

1. 简介

library-rollup-template 称为 库构建模板,又称 公共代码构建模板 ,是专门用于构建 公共代码(如:封装的库、工具等) 的 rollup 配置模板;针对不同的开发环境(如:TypeScript、JavaScript 等等)library-rollup-template 仓库以分支的方式提供了多种配置模板,当需要开发和构建公共代码时,直接下载相应分支,并默认在的 src 目录下开发即可。

具有以下特性:

详情请看:

如果您在使用的过程中遇到了问题,或者有好的建议和想法,您都可以通过以下方式联系我,期待与您的交流:

2. 分支介绍

针对不同的开发环境(如:TypeScript、JavaScript 等等),library-rollup-template 有多种配置模板,为了后续维护升级方便 和 体现种模板间的差异,本仓库采用如下策略来管理各个模板:

提示:关于子分支母分支的概念,请参看Git并行工作流程规范

所以,本仓库的分支结构如下:

common  # 仓库的公共分支,即:所有分支的公共分支;不能用作公共代码的构建模板;
js/   # 针对 JavaScript 开发环境的配置模板 都放在这个路径下
  ├── common    # 所有 JavaScript 开发环境配置模板的公共配置;不能用作公共代码的构建模板;基于 common 分支创建;
  ├── babel/    # 用 babel 作为 编译器的配置模板 都放在这个路径下
  │     ├── base    # 仅支持已规范的特性,不支持处于实验阶段的特性;基于 js/common 分支创建;
  │     └── stage    # 基于 base 创建,支持已规范的特性 和 处于实验阶段的特性;基于 js/babel/common 分支创建;
  └── buble    # 用 buble 作为 编译器的配置模板
ts/   # 针对 TypeScript 开发环境的配置模板 都放在这个路径下
  ├── common    # 所有 TypeScript 开发环境配置模板的 公共配置;不能用作公共代码的构建模板;基于 common 分支创建;
  ├── babel    # 用 babel 作为 编译器的配置模板;基于 ts/common 分支创建;
  ├── tsc    # 用 TypeScript编译器 作为 编译器的配置模板;基于 ts/common 分支创建;
  └── tsc-babel   # 用 TypeScript编译器 编译后 再经过 babel编译器 进行编译 的配置模板;基于 ts/tsc 分支创建;

3. 使用

  1. git仓库 下载相应的分支到本地;
  2. package.json 文件中 library-rollup-template 库和作者相关的信息替换为您期望的信息;注意:files 以上的配置项都是你需要根据自己的库进行定制的配置
  3. 然后默认从 src/index 文件开始写代码;

4. 命令

library-rollup-template 项目支持如下构建命令:

如果已经全局安装了 rollup 命令,也可以在项目根目录下执行如下命令:

5. 所有可能需要的更改

5.1. 更改库的相关信息

技巧:

  1. 全局将 library-rollup-template 字符串 替换成 你的包名;
  2. 全局将 郭斌勇 字符串替换成 您的名字;
  3. 全局将 guobinyong@qq.com 字符串 替换成 您的邮箱;

5.2. 禁止输出某种模块的包

library-rollup-template 默认构建输出了以下几种模块格式的包:

输出的包名的格式是 <包名>.<格式>.js,如果不需要输出某种格式的包,只需将对应格式的配置块注释掉即可;

6. 业务代码与公用代码的构建特点

6.1. 业务代码

6.2. 公用代码

7. 构建工具的选择

前端的构建工具有很多,像:Webpack、rollup、Browserify、Parcel、Grunt、Gulp等等;

目前,对于构建公共代码的工具较常用的是 rollup,对于构建业务代码,较常用的工具是 Webpack;不过,Webpack 也是可以用于构建公共代码的,详见library-webpack-template

相比 rollup ,要构建库方面,Webpack有以下缺点:

所以,推荐使用 rollup 构建 库;本项目就是使用 rollup 来搭建的模板;

如果想用 Webpack 来构建库,可以使用另一个模板 library-webpack-template

8. 公共代码构建的配置目标

公共代码构建的配置目标其就是实现上文所述的公共代码的构建特点,总结如下:

9. 组织结构

模板项目中默认包含了一些文件和目录,它们的组织结构和作用如下所示:

library-rollup-template/   # 构建前端库的webpack打包配置模板项目根目录
   ├── package.json            # npm 的包管理配置文件
   ├── src/                    # 默认的包含项目源代码的目录
   │   └── index               # 默认的构建入口文件
   ├── test/                   # 默认的包含测试代码的目录
   │   └── index               # 默认的构建入口文件
   ├── dist/                   # 默认的构建输出目录
   ├── LICENSE                 # 开源证可证;默认是 MIT 许可证
   ├── tsconfig.json           # TypeScript 的配置文件
   ├── README.md               # 项目的说明文档
   ├── .eslintignore           # ESLint 的忽略配置文件
   ├── .eslintrc.js            # ESLint 的配置文件
   ├── .gitignore              # git 的忽略配置文件
   └── .npmignore              # npm 上传包时的忽略配置文件

10. npm包管理配置文件

library-rollup-template 中与 npm 包管理相关的配置文件有 2 个:

注意: package.json 文件中的如下字段:

关于package.json文件的详细配置信息请参考https://docs.npmjs.com/files/package.json

11. Rollup配置文件

library-rollup-template 中的 Rollup 配置文件是rollup.config.js,里面有详细清晰的注释,能让你轻松入手;

关于 Rollup 的详细配置信息请参考https://rollupjs.org

12. TypeScript配置文件

如果你使用的是 TypeScript 的模板,就会包含一个 TypeScript 配置文件 tsconfig.json,所以,你也可以直接在项目根目录下直接使用 TypeScript 的编译命令 tsc

关于 tsconfig 的详细配置信息请参考 https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

13. 代码检查

本配置模版默认使用 ESLint 作为 JavaScript 和 TypeScript 的代码检查工具;至于为什么 TypeScript 不用 TSLint 作为代码检查工具的原因请参看 https://github.com/typescript-eslint/typescript-eslint

ESLint 相关的配置文件如下:

关于 ESLint 的详细配置信息请参考 http://eslint.cn/docs/user-guide/configuring

14. 项目文档Readme

作为让别人作用的项目,一定要有文档,优化库;README.md 是专门用来介绍项目的说明性文档;

我个人认为,库的文档至少需要以下几个:

其中 README.md 写在项目的根目录里,并建义在 README.md 中留有其它文档的入口;其它文档(如:教程文档、接口文档)建义放在 doc/docs/ 目录里;

我个人推荐的 README.md 目录结构如下:

上一篇 下一篇

猜你喜欢

热点阅读