library-webpack-template:构建库libr

2019-12-31  本文已影响0人  科研者

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

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

1. 简介

library-webpack-template 称为 库构建模板,又称 公共代码构建模板 ,是专门用于构建 公共代码(如:封装的库、工具等) 的 webpack 配置模板,并对 webpack 配置做了二次封装,当需要开发和构建公共代码时,直接克隆本项目,并默认在的 src 目录下开发即可;如需定制化配置,只需更改项目根目录下的 project-config.js 配置文件即可,里面的配置字段 传明达意、简单易懂,且有详细的说明,摈弃了 webpack 配置的鱼龙混杂、掩人耳目;

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

2. 特性

3. 使用

git仓库 克隆或者下载本项目到本地,然后默认从 src/index 文件开始写代码即可;
通过 项目配置文件 project-config.js 可根据自己的需求进行定制;

4. 命令

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

在 project-config.js 配置文件中,如果 没有配置 bundleAnalyzerReport 选项,则支持运行构建命令时 携带 --report 选项来开启 交互式可视化树形构建分析报告,如:npm start --reportnpm run dev --reportnpm run build --report,当构建完成时,会自动打开浏览器展示 交互式可视化树形构建分析报告,如下图:

交互式可视化树形构建分析报告

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

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

5.1. 业务代码

5.2. 公用代码

6. 构建工具的选择

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

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

为了统一性,我选择了用 Webpack 构建 公共代码;所以,就有了本项目————库构建模板,又称 公共代码构建模板:针对Library的Webapck构建配置模板;

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

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

8. 组织结构

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

library-webpack-template/   # 构建前端库的webpack打包配置模板项目根目录
   ├── .editorconfig           # 编辑器的通用配置文件
   ├── .eslintignore           # ESLint 的忽略配置文件
   ├── .eslintrc.js            # ESLint 的配置文件
   ├── .gitignore              # git 的忽略配置文件
   ├── .npmignore              # npm 上传包时的忽略配置文件
   ├── .postcssrc.js           # PostCSS 的配置文件
   ├── tsconfig.json           # 项目的级的 TypeScript 配置文件;同时也是 开发 和 生产 这两种模式公共的 TypeScript 配置文件;
   ├── webpack.config.js       # webpack 命令默认的配置文件;这个配置文件存在的目的是为了方便能在项目根目录下直接使用 `webpack` 命令 进行构建;它会根据执行 webpack 命令时是否携带含有设置 production 环境变量的选项来决定是加载 生产模式 还是 开发模式 的 构建配置;
   ├── package.json            # npm 的包管理配置文件
   ├── project-config.js       # 项目的配置文件;library-webpack-template 提供的 面向使用者的 对 整个项目的配置入口;
   ├── README.md               # 项目的说明文档
   ├── build/                  # 包含构建相关配置和工具的目录
   │   ├── tsconfig.dev.js          # 开发模式特有的 TypeScript 配置文件
   │   ├── tsconfig.prod.js         # 生产模式特有的 TypeScript 配置文件
   │   ├── tools.js                 # 包含与构建相关的工具函数的 JavaScript 代码文件
   │   ├── webpack.base.config.js   # 开发 和 生产两种模式公共的 webpack 配置文件;
   │   ├── webpack.dev.config.js    # 开发模式 特有的 webpack 配置文件;
   │   └── webpack.prod.config.js   # 生产模式 特有的 webpack 配置文件;
   ├── src/                    # 默认的包含项目源代码的目录
   │   └── index.js                 # 默认的构建入口文件;
   ├── dev/                    # 开发模式下默认的构建输出目录
   └── dist/                   # 生产模式下默认的构建输出目录

9. project-config.js

project-config.js 是整个项目的配置文件,是 library-webpack-template 提供的 面向使用者的 对 整个项目的配置入口;相对于 webpack 配置文件,该配置文件具有 传明达意、简单易懂 之特点;

该配置文件中的所有配置项都保存在 projectConfig 变量中,可配置的属性如下:

    * sourceMap :source map 的开关;用于控制是否生成 source map;
        - **类型:** `boolean`
        - **默认值:** `false`
        - **详细信息:** <https://webpack.docschina.org/configuration/devtool/>

    * devtool :与 webpack 的 `devtool` 选项相同;用于控制如何生成 source map;
        - **类型:** `string`
        - **默认值:** `false`
        - **详细信息:** <https://webpack.docschina.org/configuration/devtool/>

    * cssSourceMap :CSS source map 的开关;用于控制是否生成 CSS 的 source map;
        - **类型:** `boolean`
        - **默认值:** `false`
    * sourceMap :source map 的开关;用于控制是否生成 source map;
        - **类型:** `boolean`
        - **默认值:** `false`
        - **详细信息:** <https://webpack.docschina.org/configuration/devtool/>

    * devtool :与 webpack 的 `devtool` 选项相同;用于控制如何生成 source map;
        - **类型:** string
        - **默认值:** `false`
        - **详细信息:** <https://webpack.docschina.org/configuration/devtool/>

10. npm包管理配置文件

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

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

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

11. Webpack配置文件

library-webpack-template 中包含了4个 webpack 配置文件:

所以,项目真正的 webpack 构建配置是放在 build/ 目录下的 3个 webpack 配置文件中的:build/webpack.base.config.jsbuild/webpack.dev.config.jsbuild/webpack.prod.config.js

关于 webpack 的详细配置信息请参考https://webpack.docschina.org/configuration/

12. TypeScript配置文件

library-webpack-template 中包含了3个 TypeScript 配置文件:

其中 build/ 目录下的 tsconfig 配置文件是供 ts-loader 使用的,并且只会用到 tsconfig 中的编译选项 compilerOptions,其它选项会被忽略;

关于 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


有您的支持,我会在开源的道路上,越走越远 赞赏码

上一篇下一篇

猜你喜欢

热点阅读