从零搭建项目(7) --- 前端: 打包与环境变量设置

2023-03-12  本文已影响0人  大春春

我的博客地址

正式地址
测试地址
前端源码
后端源码

文章目录

  1. 项目及其技术栈介绍
  2. 前端: 项目初始化
  3. 前端: 使用Sass和Antd
  4. 前端: 开发体验优化
  5. 前端: 搭建路由和状态管理
  6. 前端: 支持Axios
  7. 前端: 打包与环境变量设置
  8. 前端: 团队代码规范
  9. 后端: 项目初始化和使用Koa相关
  10. 后端: 使用TypeORM和MySQL
  11. 部署: 使用nginx部署前端项目
  12. 部署: 后端部署
  13. 部署: 使用jenkins自动化部署

前言

在前端开发完成后,都需要将编写的代码编译打包成静态文件,之后才会部署到服务器上,而WebPack就是这样一个打包工具,它所有的loader、plugin都是围绕这一个功能进行的扩展,这篇文章就在之前搭建的基础上来介绍一下WebPack的打包配置吧,所用到的知识点如下:

  1. 打包路径和命令添加
  2. filenamechunkFilename: hashchunkhashcontenthash
  3. publicPath
  4. 单独打包CSS
  5. optimization优化打包
  6. 环境变量设置区分生产开发环境

打包路径和命令添加

filename和chunkFilename

webpackoutput配置中,filename是打包文件名,也就是说我们列在entry中的文件打包出来的名字,在本例中就是app:

image.png
chunkFilename则是未列在entry中的模块文件,下面划红线的都属于chunk file:
image.png
filenamechunkFilename则是对这两种文件命名的设定,这个命名很重要吗?
是的,因为浏览器存在缓存问题,如果按照目前配置,每一次代码变化的情况下打包出来的文件名不变,浏览器优先加载缓存中的文件,然后导致页面没有展示最新的页面情况。

在本例中,我们就使用chunkhash即可,CSS的contenthash可以在后面对css文件进行分离的时候再配置。

publicPath

publicPath也是ouput中的一个属性,用于处理打包后的引入资源路径,比如上面我没有添加publicPath的时候,打包出来的index.html引入资源的路径:

image.png
现在我把publicPath设置为/,再来看看打包出来的index.html的引入资源路径就成了绝对路径了:
image.png
image.png
那么这个配置有什么用处呢?

单独打包CSS

在前面的打包配置中,我们虽然可以打包成功,但是这时候的css是被嵌入到js文件中的:


image.png

这对于模块化来说不大好,而且还会导致js文件变得更大从而降低网页加载速度,所以需要将css额外抽离出来。

使用optimization优化打包

在上面的打包配置中,因为之前做了路由组件的代码分割,所以组件PageAPageB会被单独打包成js文件,再来看看打包的情况表,会发现page-a的公用模块(引入的库)体积高达800多k,这对于网页加载资源而言是非常大的:

image.png
我们可以通过配置WebPack的optimization来对代码进一步分割,使得打出来的包更小。

最后我们重新打包来看看结果:


image.png

可以看到css文件也被压缩了。

环境变量设置区分生产开发环境

在webpack4.0之后,打包的时候会出现这个警告:

image.png
这是因为在4.0后webpack受到parcel的竞争,而parcel就是号称0配置的打包器,所以webpack也内置了一套默认的打包配置,但是开发环境和生产环境的配置是不一样的,所以需要通过配置webpack.mode属性来告诉webpack处于什么环境,另外开发环境和生产环境有些不一样,例如生产环境一般不需要sourcemap功能,之前打包出来很多.map文件就是因为开启了sourcemap所致,所以我们也需要通过环境变量来对此进行区分。

我们首先安装它npm i -D cross-env
然后去到package.json文件中,在script定义的命令中插入环境变量, 使用windows的同学需要注意,写法可能有点不一样,具体谷歌即可:

image.png
这一步的目的就是将NODE_ENV这个变量插入到进程中,开发和生产分别是developmentproduction

然后我们去到webpack.config.js中,添加mode属性的设置,通过process.env.NODE_ENV即可获取之前设置的环境变量:

image.png
这样就消除了上面所说的webpack的警告了。

首先我们去到build/plugins.js文件中,在里面引入这个插件,然后进行变量配置即可:

image.png

之后我们到PageA组件中,使用process.env.NODE_ENV变量查看一下效果:

image.png
可以看到变量已经被注入到了代码中,而不是只存在于webpack打包和编译的进程中了:
image.png

另外还需要记得把baseURL换成生产环境的url,在本例中,生产环境的请求url是https://test.oxcblog.club/api:

image.png

最后

经过上面的这么多步骤,我们的webpack配置也基本算是告一段落了,下一篇文章将会介绍使用团队代码规范相关的插件: commitlint、eslint、stylelint等。

上一篇 下一篇

猜你喜欢

热点阅读