前言
读完本文您将了解以下几点
1,如何配置一个基于 Dva + antd + ts + eslint 的项目。
2,webpack 是如何打包 js、jsx、ts、tsx、css、less、img、svg 等资源。以及常用的一些 plugins 的配置等。
3,TypeStript 的 tsconfig.json 是如何配置的。
4,如何处理 antd 按需加载。
5,eslint 是如何配置的。
Dva 配置
安装 Dva
1,全局安装 dva-cli:
1 | npm install dva-cli -g |
2,初始化 dva 项目:
安装方式一:dva new myapp。
安装方式二:在创建好的项目文件夹中运行 dva init。
安装 webpack
安装 webpack webpack-cli webpack-dev-server
注意:webpack webpack-cli 下载的版本需要与全局的版本保持一致,防止出现不必要的错误,webpack-dev-server 版本不能下太高,否则可能出现兼容性错误。
1,我本地 webpack webpack-cli 分别为:webpack@4.44.2,webpack-cli@4.4.0。webpack-dev-server 为:webpack-dev-server@3.11.2
1 | npm i webpack@4.44.2 webpack-cli@4.4.0 webpack-dev-server@3.11.2 -D |
配置 webpack.config.js 文件
在项目根目录中创建 webpack.config.js 文件。
配置入口及输出路径
1,相关配置如下:
1 | entry: "./src/index.ts", |
打包样式资源
1,打包样式资源需要使用的 loader(以下 loader 具体的用处可自行百度):
- style-loader、css-loader、less、less-loader、postcss-normalize。
1 | npm i style-loader css-loader less less-loader postcss-normalize -D |
2,如果是移动端,可以配置 px2rem-loader 将 px 自动转为 rem。
- 安装 px2rem-loader 的同时还需安装 lib-flexible。
1 | npm i px2rem-loader lib-flexible -D |
- 安装完毕以后需要在项目入口 js/ts 文件中引入 lib-flexible。
1 | import "lib-flexible"; |
3,具体配置如下:
1 | module: { |
打包 js/jsx/ts/tsx 等资源
1,打包 js/jsx/ts/tsx 等资源需要使用的 loader(以下 loader 具体的用处可自行百度):
- @babel/core、@babel/preset-env、babel-loader、@babel/preset-react、@babel/plugin-transform-runtime、ts-loader、typescript
1 | npm i @babel/core @babel/preset-env babel-loader @babel/preset-react @babel/plugin-transform-runtime ts-loader typescript -D |
2,具体配置如下:
1 | module: { |
打包图片资源
1,打包图片资源需要使用的 loader(以下 loader 具体的用处可自行百度):
- url-loader、html-loader、file-loader
1 | npm i url-loader html-loader file-loader -D |
2,具体配置如下:
1 | module: { |
打包 svg 资源
1,打包 svg 资源需要使用的 loader(以下 loader 具体的用处可自行百度):
- svg-sprite-loader
1 | npm i svg-sprite-loader -D |
2,具体配置如下:
1 | module: { |
plugins 配置
1,所需插件:html-webpack-plugin、mini-css-extract-plugin、optimize-css-assets-webpack-plugin
1 | npm i html-webpack-plugin mini-css-extract-plugin optimize-css-assets-webpack-plugin -D |
2,具体配置如下:
1 | plugins: [ |
配置 dll
1,在根目录下创建 webpack.config.dll.js 文件。
2,dll 可以将不常更新的公共包(antd,react…)打包到一起,避免每次 run dev / run build 的时候重复编译。
3,当公共包需要更新时,比如升级版本/添加新的公共包:
使用 npm run dll 编译公共包。
更新 index.ejs 的 vendor 版本号,和项目一起发布。
4,具体 dll 配置如下:
1 | const path = require("path"); |
说明:由于 antd 样式资源使用 dll 进行了打包,因此在项目中即可使用按需加载 antd 的样式了,无需在其他地方在进行配置。
配置 devServer
1,在 devServer 具体配置如下:
1 | devServer: { |
配置 stats
在与 plugins 或 devServer 同层次下添加 stats 配置。
1,该配置主要用于设置在项目 build 打包时在终端的提示信息。
2,具体配置如下:
1 | devServer:[ |
配置 performance
在与 plugins 或 devServer 同层次下添加 performance 配置。
1,该配置主要用来控制 webpack 如何通知「资源(asset)和入口起点超过指定文件限制」,如果不配置该属性,如果一个资源超过 250kb,webpack 会对此输出一个警告(报黄)来通知你。
1 | devServer:[ |
更改 package.json
1,具体更改如下:
1 | "start": "webpack serve --mode=development --config=webpack.config.js --hot --inline", |
配置 typescript
配置 tsconfig.json
1,文件具体配置如下:
1 | { |
增加 typings 文件配置
说明:由于当使用模块化引入 less 样式资源文件时,防止报找不到模块的错误,因此需要全局导出相应的资源文件。
1,在 typings 文件夹中增加 index.d.ts 文件,相关配置如下:
1 | declare module '*.svg' { |
配置 eslint
eslint 所需插件
1,插件需要注意版本问题,否则会出现莫名错误,所需插件及版本如下:
1 | "@typescript-eslint/eslint-plugin": "~2.6.1", |
创建 .eslintrc 文件
1,该配置文件主要用于定义 eslint 的规则,具体配置如下:
1 | /** |
创建 .eslintignore 文件
1,该文件主要用于告诉 eslint 检查时忽略的文件,具体配置如下:
1 | app/proxy* |
更改 package 中 lint 命令
1,具体修改如下:
1 | "lint": "eslint --fix --ext .js,.jsx,.ts,.tsx src -c .eslintrc" |
异常报错
1,TypeError: cli.isValidationError is not a function at Command.cli.makeCommand。
- 解决方式:升级 webpack-cli。
2,TypeError: Cannot read property ‘tap’ of undefined at HtmlWebpackPlugin.apply。
- 解决方式:将 html-webpack-plugin 版本问题导致,可将其降级成 4.5.1 版本。
3,UnhandledPromiseRejectionWarning: TypeError: expecting a function but got [object Undefined]
- 解决方式:由于没有安装 html-webpack-plugin,将其装上即可。
4,TypeError: this.getOptions is not a function at Object.lessLoader。
- 解决方式:该错误由于 less-loader 版本问题导致,可将其降级为:5.0.0 即可。
5,Can’t resolve ‘@babel/runtime-corejs3/helpers/esm/classCallCheck’。
- 解决方式:安装 @babel/runtime-corejs3 即可。
6,Error: Failed to load plugin @typescript-eslint: Cannot find module ‘eslint-plugin-@typescript-eslint’。
- 解决方式:该错误由于没有安装 eslint-loader 导致,安装即可。
详细配置及所需包名
完整 webpack 配置
1 | const path = require("path"); |
package.json 资源包
1 | { |
最后附上该项目 github 仓库地址猛戳这里查看吧
发布时间: 2020-07-09
最后更新: 2021-12-09
本文标题: DvaStructure
本文链接: https://dnhyxc.gitee.io/2020/07/09/dvaStructure/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!