当前位置: 首页 > news >正文

深入浅出Webpack2-快速掌握webpack基本配置

深入浅出Webpack2-快速掌握webpack基本配置

    • 1.Entry
        • 1.1 context
        • 1.2 Entry类型
    • 2.Output
        • 2.1 filename
        • 2.2 path
    • 3.Module
        • 3.1配置Loader
    • 4.Resolve
        • 4.1 alias
        • 4.2 extensions
        • 4.3 modules
    • 5.Plugin
    • 6.DevServer
    • 7.其他配置项

上一篇文章我们快速上手认识了一下webpack,今天这篇文章我们将介绍如何配置webpack

配置Webpack的方式有两种:

  • 通过js文件描述配置,例如使用webpack.config.js文件中的配置
  • 执行webpack可执行文件时通过命令行参数传入,例如:webpack --devtool source-map

下面介绍具体的详细配置

1.Entry

这个是配置模块的入口,webpack执行构建的第一步将从入口开始,搜寻及递归解析出所有入口依赖的模块,这个配置是必填的,否则webpack将报错。

1.1 context

webpack在寻找相对路径的文件的时候会以context为根目录,默认是执行启动webpack的时候的当前工作目录,如果要改变context默认配置,则需要在配置文件中这样设置:

module.exports={context:path.resolve(__dirname,'app')
}

1.2 Entry类型

  1. string'./app/entry' 入口模块文件路径,可以是相对路径;
  2. array['./app/entry1','./app/entry2'] 入口模块文件路径,可以是相对路径;
  3. object{a:'./app/entry1',b:['./app/entry2','./app/entry3']} 配置多个入口,每个入口生成一个Chunk;

这个chunk我们可能不太理解,Chunk的名称和Entry的配置有关:

  • 如果entry是一个stringarray,就只会生成一个Chunk,这个Chunk的名称就是main;
  • 如果entry是一个object,那么Chunk的名称就是object键值对中健的名称。

除了上面的静态配置Entry之外,也可以通过函数动态的配置:

//同步函数
entry:()=>{return {a:'./pages/a',b:'./pages/b'}
}

2.Output

这个配置主要是配置如何输出最终想要的代码,output是一个object,里面包含一系列配置项:

2.1 filename

配置输出文件的名称,如果只有一个输出文件filename:'bundle.js'如果有多个Chunk输出:filename:'[name].js'

这里的name是内置变量,代表Chunk的名称,除此之外,还有其他的内置变量,比如id,是Chunk的唯一标识;

2.2 path

这个是配置输出文件存放在本地的目录,必须是string类型的绝对路径,通常要用node.js中的path模块去获取绝对路径:
path:path.resolve(__dirname,'dist_[hash]')

3.Module

module配置处理模块的规则

3.1配置Loader

rules配置模块的读取和解析规则,通常用来配置Loader,其类型是一个数组,数组每一项都描述了如何处理部分文件;
配置rules时,通过testincludeexclude三个配置项来选中Loader要应用规则的文件。 对选中的文件通过use配置来应用Loader,可以只应用一个Loader`或者按照从后往前的顺序应用。

module:{rules:[{//命中javascripttest:/\.js$/,//用babel-loader转换javascript文件//?cacheDicrectory表示传给babel-loader的参数,用于缓存babel的编译结果,加快重新编译的速度use:['babel-loader?cacheDirectory'],//只命中src目录中的javascript文件,加快webpack的搜索速度include:path.resolve(__dirname,'src')},{//命中SCSS文件test:/\.scss$/,//使用一组Loader去处理SCSS文件//处理顺序为从后到前,即先交给sass-loader处理,再将结果交给css-loader,最后交给style-loaderuse:['style-loader','css-loader','sass-loader'],//排除node_modules目录下的文件exclude:path.resolve(__dirname,'node_modules')},{//对非文本文件采用file-loader加载test:/\.(gif|png|jpe?g|eot|wpff|ttf|svg|pdf)$/,use:['file-loader']}]
}

上面的例子简要的列举了如何去配置Loader,很多细节还是推荐大家去看书查阅。

4.Resolve

webpack在启动后会从配置的入口模块出发找出所有依赖的模块,resolve配置webpack如何寻找模块所对应的文件

4.1 alias

resolve:{alias:{components:'./src/components/'}
}

当通过import Button from 'components/button导入的时候,实际上被alias等价替换成import Button from './src/components/button

4.2 extensions

在导入语句没带文件后缀时候,webpack会自动带上后缀去尝试访问文件是否存在。

extensions:['.js','.json']

上述代码表示,当遇到require('./data')这样的导入语句的时候,webpack会先寻找./data.js文件,如果该文件不存在,就会去寻找./data.json文件,如果还是找不到,就报错。

4.3 modules

resolve.modules配置webpack去哪些目录下寻找第三方模块,默认只会去node_modules目录下寻找
modules:['./src/components','node_modules']这个代码就表明,第三方库除了node_modules之外还有'./src/components'

5.Plugin

plugin用于扩展webpack的功能,plugin的配置很简单,plugins配置项接收一个数组,数组每一项都是plugin的实例,plugin需要的参数通过构造函数传入

const CommonsChunkPlugin=require('webpack/lib/optimize/CommonsChunkPlugin');
module.exports={plugins:[//所有的代码都会用到的公共代码会被提取到common代码块中new CommonsChunkPlugin({name:'common',chunks:['a','b']})]
}

学会使用plugin其实并不难,关键在于如何掌握plugin本身提供的配置项,几乎所有的webpack无法直接实现的功能都能在社区找到开源的plugin去解决,我们在日后写代码的过程中要善于使用搜索引擎去寻找解决问题的方法。

6.DevServer

要配置DevServer,除了可以在配置文件中通过devServer传入参数,还可以通过命令行参数传入,注意。只有通过DevServer启动Webpack的时候,配置文件中的devServser才会生效。

官网中给出了这样一个例子:

const path = require('path');module.exports = {//...devServer: {static: {directory: path.join(__dirname, 'public'),},compress: true,port: 9000,},
};

这是一个基本的示例,static.directory配置服务器的文件根目录,compress配置是否启用Gzip压缩public/目录下的文件,默认为falseport配置服务监听的端口,默认使用8080端口,如果8080被占用,就使用8081,如果8081还是被占用,就使用8082,以此类推,除此之外还有些其他的配置,具体参照中文文档。

7.其他配置项

Devtool

配置webpack生成source map,默认为false

module.export{devtool:'source-map'
}

从前面的描述,webpack其实有很多选项,我也是摘取了一些比较常用的配置,webpack内置了很多功能,我们不必都记住他们,只需要大概明白webpack原理和核心,并判断选项大致属于哪个大模块下,再去查详细的使用文档就好。

我们可以通过下面的经验去判断如何配置webpack

  • 若想让源文件加入构建流程中被webpack控制,则配置entry;
  • 若想自定义输出文件的位置和名字,则配置output
  • 若要自定义寻找依赖模块的策略,则配置resolve;
  • 若要自定义解析和转换文件的策略,配置module
  • 其他大部分需求可能通过plugin去实现;

下一篇文章中,我们将通过具体的实例,介绍如何使用webpack~

相关文章:

深入浅出Webpack2-快速掌握webpack基本配置

深入浅出Webpack2-快速掌握webpack基本配置1.Entry1.1 context1.2 Entry类型2.Output2.1 filename2.2 path3.Module3.1配置Loader4.Resolve4.1 alias4.2 extensions4.3 modules5.Plugin6.DevServer7.其他配置项上一篇文章我们快速上手认识了一下webpack,今天这篇文章…...

如何使评论具有可操作性?取悦客户的指南

永远不要低估承认的力量。 当品牌与客户互动时,认可会带来更好的关系和更好的沟通。与买家和客户建立更多的个人联系意味着品牌需要证明他们支持他们的产品和客户。评论是利用客户分享他们的故事的那些时刻的绝佳机会。 为什么评论在 SaaS 中至关重要 在 B2B 软件的…...

一文带你彻底搞懂Nginx反向代理

一文带你彻底搞懂Nginx反向代理一、什么是反向代理1.1 正向代理1.2 反向代理1.3 总结二、配置反向代理2.1 准备 Tomcat2.2 配置 Nginx一、什么是反向代理 1.1 正向代理 举一个通俗的例子,因为众所周知的原因,我们无法访问谷歌,但是因为某些…...

手写SpringBoot的starter

自定义SpringBoot的starter 引言 starter命名格式: 官方的 starter 的命名格式为 spring-boot-starter-{xxxx} 比如spring-boot-starter-activemq 第三方我们自己的命名格式为 {xxxx}-spring-boot-starter。比如mybatis-spring-boot-starter。 如果我们忽略这种约定…...

pytorch1.2.0+python3.6

一、说明 pytorch1.2.0python3.6CUDA10.0cudnn7.4.1.5 二、步骤 在conda中创建一个新的虚拟环境 查看一下自己的所有环境 激活虚拟环境 conda activate torch1.2.0 关于cuda和cudnn 1、查看自己电脑系统是10.2版本 http://链接:https://pan.baidu.com/s/1v5cN6…...

WindowsPowerShell 停止、启动、暂停和重启服务、卸载服务

PowerShell 停止、启动、暂停和重启服务、卸载服务 PowerShell 停止、启动、暂停和重启服务 官文 powershell卸载服务 官文 目录PowerShell 停止、启动、暂停和重启服务、卸载服务停止、启动、暂停和重启停止服务启动服务暂停服务重启服务卸载移除服务停止、启动、暂停、重启…...

数据库专题

请简洁描述 MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别? 默认隔离级别 mysql repeatable-read oracle read-committed 脏读:不可重复读:幻读: CHAR 和 VARCHAR 的区别?…...

浅谈MySQL索引

目录 1.索引的定义 2.索引的原理 3.Hash索引与B Tree索引 4.索引的分类 5.建立索引的注意事项 1.索引的定义 索引是存储引擎用于快速找到数据记录的一种数据结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索…...

安装包UI美化之路-通过nsNiuniuSkin来做Electron程序的打包、发布与升级

nsNiuniuSkin从发布之初,因其简单、简洁、高效,受到了非常多公司的青睐,现在已经越来越多的公司采用我们的这套解决方案来制作安装包了! 从一个安装包UI插件,逐步演化成一套集美观、安全、简洁、自动化为一体的完整的…...

飞鹅打印机怎么样?飞鹅打印机好用吗?飞鹅打印机怎么知道订单是否漏单?

外卖打印机怎么选?飞鹅打印机好用吗?飞鹅智能云打印机产品专注于云打印的解决方案和技术服务提供。2019 年飞鹅已经成为国内先进的云打印服务提供商,主要是服务美团、饿了么客户,产品主要优势:自动接单、自动打印,无需…...

网络协议(八):传输层-TCP(三次握手、四次挥手原理)

网络协议系列文章 网络协议(一):基本概念、计算机之间的连接方式 网络协议(二):MAC地址、IP地址、子网掩码、子网和超网 网络协议(三):路由器原理及数据包传输过程 网络协议(四):网络分类、ISP、上网方式、公网私网、NAT 网络…...

最新OpenMVG编译安装与逐命令运行增量式和全局式SfM教程

openmvg是一个轻便的可以逐步运行的SfM开源库,它同时实现了增量式和全局式两种算法。 说明文档地址:https://openmvg.readthedocs.io/en/latest/ github主页地址:https://github.com/openMVG/openMVG 1 编译安装 openmvg的安装比较简单&…...

数据结构与算法系列之插入排序

💗 💗 博客:小怡同学 💗 💗 个人简介:编程小萌新 💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞 什么是插入排序 有一个已经有序的数据序列,要求在这个已经排好的数…...

Text to image论文精读ALR-GAN:文本到图像合成的自适应布局优化

ALR-GAN是北京工业大学学者提出的一种自适应布局优化生成对抗网络,其可以在没有任何辅助信息的情况下自适应地优化合成图像的布局。 文章发表于2023年,IEEE Transactions on Multimedia(TMM)期刊(CCF B,JCR…...

windows版 redis在同一局域网下互联

项目场景: 同一局域网下各个主机互相连接同一个redis 问题描述 无法连接 原因分析: 没有放行对方的地址 解决方案: 修改配置文件 最重要的一步如下 然后把 redis.windows.conf的文件也照上面的修改一下保持一致 然后安装一下redis服务这…...

Near-Optimal Bayesian Online Assortment of Reusable Resources

摘要 受租赁服务在电子商务中的应用的激励,我们考虑为不同类型的到达消费者提供可重复使用资源的在线分类的收入最大化。我们针对贝叶斯环境中的最优在线策略设计了具有竞争力的在线算法,其中类型随时间独立于已知的异构分布绘制。在初始库存最小值cmin…...

数据库复习2

一. 简答题(共1题,100分) 1. (简答题) 存在数据库test,数据库中有如下表: 1.学生表 Student(Sno,Sname,Sage,Ssex) --Sno 学号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 主键Sno 2.教师表 Teacher(Tno,Tname) --T…...

公众号运营之竞品分析,教你拆解公众号

知己知彼,百战不殆,公众号运营亦是如此。 当运营者只关注自己账号的时候,很容易陷入某个误区中出不来。这个时候就要拓宽我们的视野,多去看看“外面的世界”,不要只局限于自己的一片小天地中。 看看同领域优秀公众号…...

python常见问题详解

Python python 没有多态,而是鸭子类型 多继承,没有接口,可通过语法糖实现接口的作用 lambda中只能有一句 "/"表示之前的参数是必须是位置参数,”**“表示是后面的必须是关键字参数 Python多进程 Python 多线程是伪多线…...

MyBatis-常用SQL操作

一、动态SQL 1.概述】 1.1动态SQL: 是 MyBatis 的强大特性之一,解决拼接动态SQL时候的难题,提高开发效 1.2分类: if choose(when,otherwise) trim(where,set) foreach 2.if 2.1 做 where 语句后面条件查询的,if 语句是可以…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四&#xff…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐)​​ 在 save_images 方法中,​​删除或注释掉所有与 metadata …...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...