webpack笔记二

news2024/11/27 16:38:09

文章目录

    • 背景
    • 拆分环境
      • 清除上次构建产物插件: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.js
        filename: "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.coloradmin.cn/o/742257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++教程——const修饰指针、结构体、文件操作

const修饰指针 常量指针 指针常量 const既修饰指针,又修饰常量 指针与数组 结构体 通过指针访问结构体变量中的数据 结构体中const使用场景 文件操作 写文件 读文件 读取数据的方式 二进制读写文件 写文件 读文件

master、origin master和origin/master

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

线程任务分支合并框架

1、原理 2、实用类 (1) ForkJoinPool 分支合并池 类比> 线程池 (2) ForkJoinTask ForkJoinTask 类比> FutureTask (3) RecursiveTask 递归任务:继承后可以实现递归(自己调自己)调用…

从小白到大神之路之学习运维第57天--------shell脚本实例应用3.0--以及————结合“三贱客”之“grep”的相关用法

第三阶段基础 时 间:2023年7月11日 参加人:全班人员 内 容: shell实例 目录 一、循环的基本使用 while随机循环 二、case控制服务的基本应用 1、case的语法格式 2、使用case写脚本,以以下实验为主 例1:控…

vue + Luckysheet 实现在线Excel表格操作

需求千千万,又是难熬的一天! 效果图: Luckysheet官网网站:快速上手 | Luckysheet文档 1、引入(两种) 第一种CDN引入 在项目中的 public ---> index.html 中添加代码,如下: &…

91.qt qml-圆角毛玻璃 高斯模糊

qml中使用毛玻璃,可以通过两个类型GaussianBlur或者FastBlur使用,效果如下所示: 接下来先来介绍FastBlur和GaussianBlur 1.FastBlur介绍 FastBlur提供比GaussianBlur更低的模糊质量,但渲染速度更快。FastBlur效果通过使用源内容缩小和双线性滤波的算法模糊源内容来软化源内…

【免费送书活动第一期】赠送实体图书《深入浅出Java虚拟机》JVM原理与实战

赠送实体图书四本(免费赠送) 《深入浅出JAVA虚拟机:JVM原理与实战》 内容简介: 本书主要以 Java 虚拟机的基本特性及运行原理为中心,深入浅出地分析 JVM 的组成结构和底层实现,介绍了很多性能调优的方案和…

idea编译时遇到的bug

1、 D:\workspace\spark\src\main\Scala\WordCount.scala:3:8 WordCount is already defined as object WordCount object WordCount { 解决参考博客:Error:(21, 8) FlumePushWordCount is already defined as object FlumePushWordCount object FlumePushWor_WSQ(…

Switch超频图文说明

Switch超频图文说明 有些游戏,官方锁频导致游戏卡顿,可以通过超频提升游戏体验。抽空研究了下,发现超频可以在大气层 Atmosphere 和 SX OS系统中使用。 正巧最近有同学询问,就整理个教程好了。 Switch超频图文说明 按自己的破解系…

14-Vue插槽(slot),制作可复用组件

什么是 slot ? Vue 将 <slot>元素作为承载分发内容的出口。插槽内可以包含任何模板代码&#xff0c;包括 HTML或其它组件。 在某些组件的模板中&#xff0c;有一部分区域需要父组件来指定 <!-- message组件&#xff1a;一个弹窗消息 --> <div class"mes…

【工具】浏览器自带下载加速功能

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;善假于物&#…

srt转rtmp(mpegts -> flv)

一、使用ffmpeg拉流srt转rtmp推流过程中遇到音视频问题 1、音频 虽然从mpegts到flv都是AAC格式&#xff0c;但是mpegts多了ADTS头&#xff0c;在flvenc的时候会报错误&#xff1a; Malformed AAC bitstream detected: use the audio bitstream filter aac_adtstoasc to fix it…

JAVA克隆

更多精彩 先案例后讲解&#xff0c;这里是代码教父&#xff0c;今天讲解JAVA中的clone 目录 什么是clone如何实现clone 浅克隆深克隆小结 什么时候使用cloneclone 相关类库的实现分析 什么是clone 在Java中&#xff0c;克隆&#xff08;Clone&#xff09;指的是创建一个现有对…

linux命令与shell编程

文章目录 一、概念linux内存嵌入式嵌入式层次图判断小端和大端 二、linux系统操作命令ls查看cd 命令pwd命令touch 创建文件mkdir 创建目录chmod 修改权限man命令cp 拷贝mv 移动rm命令cat命令echo 命令tty命令->查看当前终端号clear 命令ldd命令 ->查看文件依赖哪些库prin…

make makefile

文章目录 make是一个命令makefile or Makefile是一个当前目录下的文件使用&#xff1a;生成可执行文件清理 作用依赖关系依赖方法make会自动推导makefile中的依赖关系栈式结构为什么清理的时候要make 加上clean?make后面可以直接跟要生成的可执行文件,指定名称的依赖关系和依赖…

Python第二天之容器学习

1.List 容器无非就增删改查 1.添加 name_list [aaa,bbb,ccc,ddd] name_list.append(b1) name_list.insert(1,xxx) print(name_list)append 是在后面追加 而insert是自己定义下表插入 name_list [aaa,bbb,ccc,ddd] name_list2 [qqq,222,111] name_list.extend(name_list…

python 面向对象编程

文章目录 前言如何理解面向对象编程在 python 中如何使用面向对象编程定义类创建对象self添加和获取对象属性添加属性类外添加属性类中添加属性 访问属性类外访问属性类中访问属性 魔法方法__ init __() 方法__ str __()方法__ del __() 方法 前言 大家好&#xff0c;前面我们…

吐血整理,自动化测试Yaml框架配置文件-深入详解(超细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 YAML详解 YAML它…

上位机智能通信统一解决方案OPC应用

上位机应用开发中的通信需求 通信过程/通信协议多样性 通信统一化处理方案&#xff1a;OPC&#xff08;Open Platform Communications&#xff09;、OPC UA&#xff08;OPC Unified Architecture&#xff09; 基于西门子1500PLC的OPC服务器对接 internal class Program{stati…

BTP Integration Suite学习笔记 - (Unit1) Developing with SAP Integration Suite

今天决定跟着SAP官方资源系统学习一遍BTP Itegration Suite。找到两个Learning Journey: SAP Integration Suite Foundation 和 Solution Integration on SAP BTP。还有一个更大的roadmap,Integration Suite的官方内容在这里都可以链接到。 认证暂时只找到了一个比较基础的&…