webpack笔记二

文章目录

    • 背景
    • 拆分环境
      • 清除上次构建产物插件:clean-webpack-plugin
      • 合并配置文件插件:webpack-merge
      • 实时更新和预览效果:webpack-dev-server
    • babel配置
    • 参考

背景

webpack笔记一

在前面的学习,完成了webpack的基本配置,但也遇到了一些痛点:

  • 随着项目的迭代工程肯定会越来越复杂,webapck配置也会随着复杂,如果开发环境和生产环境的配置全部放在同一个webapck.config.js中,会显得很臃肿,不利于维护。我们知道webapck.config.js本质还是js代码,因此可以将代码细化拆分配置,面向单一职责的设计原则,然后组合配置,最后通过命令策略性选择打包方式。
  • 另外每次修改webapck.config.js配置都要手动重写执行命令打包npx webpack才会生效,影响着开发效率。因此我们希望修改完配置后,只需要保存就可以同步到页面上,无需每次就运行webpack命令,相当于热重载。

拆分环境

在项目根目录下新建一个build文件夹,用于存放webapck.config.js的拆分文件。

在这里插入图片描述

webapck.config.js拆分如下四个文件:

  • webpack.base.config.js:基础通用配置
  • webpack.dev.config.js:开发环境配置
  • webpack.pro.config.js:生产环境配置
  • webpack.config.js:每个环境配置与基础配置的合并,可以通过脚本命令选择对应打包环境。

webpack.base.config.js

// 引入插件包
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CopyPlugin = require('copy-webpack-plugin')
module.exports = {// 入口entry: "./src/index.js",// 出口,默认是输出到./dist目录下output: {// 输出的文件名,默认是main.jsfilename: "index.js"},// 添加插件plugins: [/*配置html打包模板*/new HtmlWebpackPlugin({template: "./index.html"}),/*配置文件拷贝来源与输出地 ,可以配置多个*/new CopyPlugin({patterns: [{from: './static',to:'static'}]})]}

在base配置中把生产模式mode去除了,会将mode配置到到package.json中,在下面有实现。

实际开发项目中,其实还可以再配置一个环境,如预生产beta环境。

清除上次构建产物插件:clean-webpack-plugin

为了确保打包目录下所有文件都是最新的,因此在打包时需要清除webapck的output.path的旧文件(即上次打包构建产物),可以通过clean-webpack-plugin插件来完成,通过会放在生产环境下webpack.pro.config.js

output.path打包输出位置默认是./dist

按常规先安装插件npm install --save-dev clean-webpack-plugin

webpack.pro.config.js

const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {plugins: [ new CleanWebpackPlugin()]
}

webpack.dev.config.js

module.exports = {/*https://webpack.docschina.org/configuration/devtool/*/devtool: 'eval-cheap-module-source-map'
}

合并配置文件插件:webpack-merge

既然将webpack.config.js文件拆分了,在打包时自然需要合并了,通过webpack-merge插件可以完成。

安装插件npm i webpack-merge -D

npm i webpack-merge -D
等同于  --save-dev 可以简写成-D,放在末尾,install简写成 i  ; webpack插件都可以这种格式简写
npm install --save-dev webpack-merge

webpack.config.js文件中使用:

// 导入插件
const {merge} = require('webpack-merge')
// 导入各个配置
const baseConfig = require('./webpack.base.config')
const devConfig = require('./webpack.dev.config')
const proConfig = require('./webpack.pro.config')module.exports = (env, args) => {switch (args.mode) {case "development":return merge(baseConfig, devConfig)case "production":return merge(baseConfig, proConfig)default:throw  new Error("No matching configuration was found!")}
}

package.json添加配置,需要配置生产模式 和webpack的最终配置文件

{"name": "webpack-demo","version": "1.0.0","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","dev": "webpack serve --mode=development --config ./build/webpack.config.js","build": "webpack --mode=production --config ./build/webpack.config.js"},

由于在package.json设置了webpack的构建文件,之前项目根目录的webpack.config.js文件就需要删除了或者该文件名。

执行npm run dev就是开发环境的打包命令,npm run build生产环境的打包命令

在这里插入图片描述

打开http://localhost:8081/就可以浏览网页

在这里插入图片描述

到这里拆分环境就完成了

实时更新和预览效果:webpack-dev-server

每次修改配置都要手动执行npx webpack,会显得很麻烦,webpack 提供几种可选方式:

  1. watch mode
  2. webpack-dev-server
  3. webpack-dev-middleware

官网资料:https://webpack.docschina.org/guides/development/#choosing-a-development-tool

大多数场景都会使用webpack-dev-server

安装webpack-dev-server

npm install webpack-dev-server -D

package.json添加配置,在dev上追加--open

{"name": "webpack-demo","version": "1.0.0","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","dev": "webpack serve --mode=development --config ./build/webpack.config.js --open","build": "webpack --mode=production --config ./build/webpack.config.js"},

为了测试这个功能是否生效,我们任意修改 src/index.js 文件并保存。发现浏览器中内容自动刷新生效了。

如果要退出webpack实时更新模式,windows命令ctrl+c

babel配置

Babel 是一个工具链,主要用于将采用 ES6+ 语法编写的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中

首先安装babel加载器

npm install -D babel-loader @babel/core @babel/preset-env

然后在webpack.base.config.js添加配置:

module.exports = {entry: "./src/index.js",output: {filename: "index.js"},// .....module: {rules: [// babel配置{// 正则匹配js文件test: /\.js$/,exclude: /node_modules/,use: {loader: 'babel-loader',options: {presets: [['@babel/preset-env', {"useBuiltIns": "entry", "corejs": "3.22"}]]}}}]}
}

配置完运行npm run dev,在浏览器调试面板可以看到ES语法被转换成了ES2015语法。

在这里插入图片描述

参考

  • https://juejin.cn/post/6982361231071903781#heading-8
  • https://juejin.cn/post/7023242274876162084#heading-34

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/28896.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【云原生】k8s之包管理器Helm

前言 每个成功的软件平台都有一个优秀的打包系统,比如Debian、Ubuntu 的 apt,RedHat、CentOS 的 yum。Helm 则是 Kubernetes上 的包管理器,方便我们更好的管理应用。 1.Helm的相关知识 1.1 Helm的简介与了解 Helm本质就是让K8s的应用管理&…

Profibus DP主站转Modbus TCP网关profibus从站地址范围

远创智控YC-DPM-TCP网关。这款产品在Profibus总线侧实现了主站功能,在以太网侧实现了ModbusTcp服务器功能,为我们的工业自动化网络带来了全新的可能。 远创智控YC-DPM-TCP网关是如何实现这些功能的呢?首先,让我们来看看它的Profib…

Linux 学习记录52(ARM篇)

Linux 学习记录52(ARM篇) 本文目录 Linux 学习记录52(ARM篇)一、汇编语言相关语法1. 汇编语言的组成部分2. 汇编指令的类型3. 汇编指令的使用格式 二、基本数据处理指令1. 数据搬移指令(1. 格式(2. 指令码类型(3. 使用示例 2. 立即数(1. 一条指令的组成 3. 移位操作指令(1. 格式…

Meta 最新发布 LLaMA 2(允许商业化)

2023年7月18日,Meta 发布了LLaMA 2,包含7B,13B,70B三种参数(34B暂时还未发布)。 官方: https://ai.meta.com/llama/ 论文:Llama 2: Open Foundation and Fine-Tuned Chat Models 模型…

网络编程——RPC与HTTP基本介绍、历史追溯、主流应用场景、对比分析、为什么还需要使用RPC

一、HTTP与RPC基本介绍 HTTP协议(Hyper Text Transfer Protocol)超文本传输协议: 一个用于在网络上交换信息的标准协议,它定义了客户端(例如浏览器)和服务器之间的通信方式。如平时上网在浏览器上敲个网址url就能访问网页&#x…

关于电脑显示器屏幕看不出灰色,灰色和白色几乎一样无法区分,色彩调整方法

问题: 电脑显示器屏幕看不出灰色,灰色和白色几乎一样无法区分。白色和灰色有色差。 解决方法: 打开“控制面板” ->“色彩管理” ->“高级” ->“校正显示器” 在下一步调节中调成中间这一个实例的样子就可以了 进行微调&#x…

如何用3D格式转换工具HOOPS Exchange读取颜色和材料信息?

作为应用程序开发人员,非常希望导入部件的图形表示与它们在创作软件中的外观尽可能接近。外观可以在每个B-Rep面的基础上指定,而且,通过装配层次结构的特定路径可以在视觉外观上赋予父/子覆盖。HOOPS ExchangeHOOPS Exchange可捕获有关来自各…

亚信科技荣任「DBL电信行业工作组」副组长单位,AntDB数据库连年入选《中国数据库产品图谱》

日前,“2023可信数据库发展大会”在京圆满召开。亚信科技凭借自研的电信级核心交易数据库AntDB在通信行业15年的技术积累和行业贡献,成功当选为数据库应用创新实验室(DBL)电信行业工作组副组长单位。AntDB数据库连续两年入选《全球…

11、动手学深度学习——语言模型和数据集:代码详解

我们了解了如何将文本数据映射为词元,以及将这些词元可以视为一系列离散的观测,例如单词或字符。 假设长度为 T T T的文本序列中的词元依次为 x 1 , x 2 , … , x T x_1, x_2, \ldots, x_T x1​,x2​,…,xT​。于是, x t x_t xt​&#xff08…

Type-C带充电的OTG转接器方案 LDR6028

近些年随着社会生活水平提高,每个人的的电子设备逐渐的多了起来,各大品牌都在发售自家品牌的全家桶。手机、平板、笔记本电脑、智能手表、无线耳机、任天堂Switch、索尼PS5等电子设备一种不落。 那么多的电子设备基本来说都是需要充电,比如手…

求出0~100000之间的所有“水仙花数”并输出

求出0~100000之间的所有“水仙花数”并输出。 “水仙花数”是指一个N位数,其各位数字的n次方之和正好等于该数本身。 如:1531^3 5^3 3^3 , 则153是一个“水仙花数” 先来了解一下水仙花数的概念: 水仙花数只是自幂数的一种,严…

匿名内部类/Lambda Java和Kotlin谁会导致内存泄漏?

作者:小鱼人爱编程 前言 内存泄漏是程序界永恒的话题,对于Android开发来说尤为重要,想让你的App表现得更优雅,了解并治理内存泄漏问题势在必行。 通过本篇文章,你将了解到: 何为内存泄漏?Android 常见内存…