前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从零搭建Webpack5-react脚手架(附源码)

从零搭建Webpack5-react脚手架(附源码)

作者头像
Peter谭金杰
发布2022-03-22 14:51:51
6140
发布2022-03-22 14:51:51
举报
文章被收录于专栏:跨平台全栈俱乐部

webpack5

近期终于有时间和精力专注于公司技术基础建设了,于是一开始,将公司的Saas系统改造成了微前端模式,解决了历史遗留的一部分问题

接着,想着webpack5已经发布这么久了,该在生产环境用起来了,也顺势想推动微前端webpack5vite在业内的普及率,没看过我之前文章的朋友可以在文末找找,干货真的很多

正式开始

webpack5升级后,有哪些改变?
  • 通过持久化缓存提高性能
  • 采用更好的持久化缓存算法和默认行为
  • 通过优化 Tree Shaking 和代码生成来减小Bundle体积(干掉了nodejs的polyfill)
  • 提高 Web 平台的兼容性
  • 清除之前为了实现 Webpack4 没有不兼容性变更导致的不合理 state
  • 尝试现在引入重大更改来为将来的功能做准备,以使我们能够尽可能长时间地使用 Webpack 5
  • 新增Module Federation(联邦模块) 搭建指南 推荐大家使用我在我们公司(深圳明源云空间)做的脚手架,给大家一键生成项目模板,这样大家在看本文的时候会得到更好的提升

生成模板步骤:

代码语言:javascript
复制
npm  i ykj-cli -g 
ykj init webpack5 (这里选择通用项目模板)
cd webpack5
yarn 
yarn dev
开始搭建

首先新建文件夹,使用yarn初始化项目

下载webpack webpack-cli最新版本:

然后安装React react-dom17版本的库

接着安装官方热更新推荐的库

代码语言:javascript
复制
yarn add react-refresh -D
  • 安装less css style标签 postcss等样式处理的库(mini-css-extract-plugin要安装@next版本的)
代码语言:javascript
复制
yarn add less less-loader css-loader style-loader mini-css-extract-plugin@next -D

安装相关babel依赖

babel具体要哪些配置,建议大家参考我的模板里面

完成了依赖的准备工作,开始搭建项目

项目根目录创建文件夹,用于放置配置文件

config文件夹下新建四个文件

paths文件内,用变量记录几个关键目录:

编写基础webpack.base.js配置文件,引入依赖

编写entryoutput字段:

这里要注意的是,webpack5contenthash算法进行了优化,这里可以在chunkhashcontenthash中选择一个,建议contenthash

编写基础loader配置:

这里要注意的是:webpack5对于资源,类似:图片、字体文件等,可以用内置的asset去处理,不用url-loaderfile-loader

接着,由于项目需要配置别名和省略后缀名,我们先配置resolve字段(我是TypeScript+React技术栈):

插件的话,由于是基础配置,只要一个clean、html的插件即可

在项目根目录新建文件babel.config.js

这样,我们的基础webpack配置就好了,捋一捋先:

用babel处理 和高阶语法

用处理语法

用插件处理了和负责清理工作

用字段配置了别名和省略文件后缀

用内置的asset处理了静态文件,例如图片等

引入依赖

先引入了热更新、合并配置、基础配置、官方react热更新依赖

接着编写配置

代码语言:javascript
复制
const devConfig = {
    mode: 'development',
    devServer: {
        port: 3000,
        contentBase: '../dist',
        open: true,
        hot: true,
    },
    target: 'web',
    plugins: [new HotModuleReplacementPlugin(), new ReactRefreshWebpackPlugin()],
    devtool: 'eval-cheap-module-source-map',
};

module.exports = merge(common, devConfig);

注意:这里要设置 target: 'web'才会有热更新效果

  • devtool在开发模式最佳实践是:eval-cheap-module-source-map

这样,我们的开发模式配置就搭建好了,只要在public文件夹下编写一个index.html,就可以跟之前一样,开始写react项目了

开始编写webpack.prod.js生产配置

引入依赖:

生产环境要抽离css标签,所以这里针对less和css要做特殊处理,一个是postcss处理样式兼容性问题,一个是MiniCssExtractPlugin.loader:

这样生产的配置也编写好了

代码语言:javascript
复制
"build": "webpack --config config/webpack.prod.js  --mode production",
"dev": "webpack serve --config config/webpack.dev.js  --mode development",
配置代码质量管控流程

新增依赖

编写代码、提交检测流程

新增eslint配置:

新增命令:

安装jest等依赖:

新建文件夹 test

编写第一个单元测试,引入依赖:

代码语言:javascript
复制
import App from '../src/App';
import { mount, shallow } from 'enzyme';
import React from 'react';
import toJson from 'enzyme-to-json'; //做快照

然后就可以愉快的开始写单元测试了哦

  • 这样,一个webpack5的脚手架就搭建好了,webpack内置的一些东西,可以让我们省去很多配置,看起来会更简单
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • webpack5
  • 正式开始
    • webpack5升级后,有哪些改变?
      • 开始搭建
        • 完成了依赖的准备工作,开始搭建项目
          • 开始编写webpack.prod.js生产配置
            • 配置代码质量管控流程
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档