搭建react移动端组件库之准备工作
需要用到的技术
- React
- Typescript
- webpack
- rollup
会实现的组件
- 仿antd-mobile实现所有组件(目标)
- 完成一个会有一个对应的文章、但前期准备的时间可能会比较长。
套路
- 基于webpack搭建组件的开发环境
- ts
- react 16.8+
- 有组件的demo页面
- 组件的移动端适配
- 组件基于rollup打包发布并且使用
- 可能会有一个脚手架用于生成每一个组件的模板
- 每个组件都会有对应描述文件
- 根据每个组件的描述文件产生demo页面
知识点全面学习、仅基础介绍 (已经全部了解的同学可以直接翻到下一章节)
下一章会进行webpack开发环境的搭建,预计两到三天后发布。
webpack
webpack本质是一个打包工具,它会根据代码的内容解析模块依赖,帮助我们把多个模块的代码打包
webpack的基本概念
-
入口
在多个代码模块中会有一个一起的.js文件,这个便是webpack构建的入口。webpack会读取这个文件,从它开始解析依赖,然后进行打包。 在常见的项目中:单页应用,那么入口只有一个;多页应用,通常每一个页面代表一个入口。
module.exports = { entry: { main: './src/index.js', // 单页应用对应的一个入口 pageA: './src/pages/a.js', // 多页应用对应的a页面入口 pageB: './src/pages/b.js' // 多页应用对应的b页面入口 } } -
出口
有入口的配置,必然就会有出口的配置。出口的配置告诉了webpack将如何将编译打包后的文件写入磁盘。(我们能写多个入口文件、但是只有一个出口的配置)
// base config 打包出一个bundle.js的文件,写入dist目录下 module.exports = { output: { filename: 'bundle.js' } } // Multiple Entry Points // 如果有多入口或者chunk,应该使用占位符来确保每个文件具有唯一的名称 module.exports = { entry: { app: './src/app.js', search: './src/search.js' }, output: { filename: '[name].js', path: _dirname + '/dist' } } -
模式
模式是在webpack4中新加的配置项,为了减少配置,可以在配置项中配置mode项
- development:会将process.env.NODE_ENV的值设置为development。启用NamedChunksPlugin和NamedModulesPlugin
- produciton: 会将process.env.NODE_ENV的值设置为production。启用FlagDependencyUsagePlugin,FlagIncludedChunksPlugin,ModuleConcatenationPlugin,NoEmitOnErrorsPlugin,OccurrenceOrderPlugin,SideEffectsFlagPlugin,UglifyJsPlugin。
-
loader
loader是webpack中打包编译不同模块的主要功臣,loader可以使你在import或加载模块时预处理文件。loader类似于其他构建工具中的task。 比如一个js文件,引入了css文件,同时还依赖了一个json文件,那么为了解析这个css文件、和json文件我们需要分别用到不同的loader
// example module.exports = { module: { rules: [ { test: /\.css/, use: [ { loader: 'style-loader' }, { loader: 'css-loader' } ] }, { test: /\.ts/, use: 'ts-loader' } ] } } -
plugin
webpack中编译相关的事情都是交给loader做,而plugin(插件)主要做的是loader无法完成的事情。比如:控制webpack的输出、将js包打入html文件中、定义环境变量等。
const HtmlWebpackPlugin = require('html-webpack-plugin') module.exports = { plugins: [ new HtmlWebpackPlugin() ] }webpack的基础知识到此结束,这只是最简单的webpack介绍,深入的知识需要大家自己更多的动手。接下来我们开始rollup的基础知识学习
rollup学习
-
rollup基础
export default { input: 'src/main.js', output: { file: 'bundle.js', format: 'cjs' } }可以使用rollup --config 来指定需要的配置文件。 和webpack不同,rollup没有loader,要对除js文件进行打包,在rollup中只有使用plugin。 the Rollup wiki 维护了可用的插件列表
-
rollup和webpack的对比
在构建应用程序时,特别是需要代码拆分和运行时态的动态导入时,rollup对这些功能的支持并不友好。所以在构建第三方库时我们我们可以是用rollup,而在一般的应用程序时,最好选择webpack。虽然rollup也能构建绝大多数的应用程序。 rollup的好处:在构建时不会像webpack一样产生很多的附加代码。
React基础知识
react基础知识不再这里展开讲,对react不了解的可以看这里
Typescript知识
Typescript基础知识也不再这里介绍,官方文档已经很强大了