1.webpack的基本使用

news2024/9/24 17:12:37

webpack是做工程化用的,并且可以对代码进行压缩(搞成min.js那样),处理浏览器端JS兼容性,性能优化

  • vue-cli与webpack作用相同

目录

1  基本使用

1.1  引入场景

1.2  安装webpack

1.3  配置webpack

1.4  使用webpack

2  webpack.config.js中的entry与output

3  保存后自动打包的包 webpack-dev-server

3.1  安装

3.2  配置

3.3  使用

3.4  devServer中的一些参数

3.5  一些注意的点

4  将src中的index.html复制到项目根路径的包 html-webpack-plugin

4.1  安装

4.2  配置

4.3  使用

5  打包项目

5.1  基本使用

5.2  优化文件存放的路径

5.3  自动删除dist包 clean-webpack-plugin

5.3.1  安装

5.3.2  配置

5.3.3  使用

6  Source Map

6.1  eval-source-map

6.2  nosource-source-map

6.3  不使用source map是最安全的

7  webpack中的@

7.1  例子

7.2  使用@


1  基本使用

1.1  引入场景

我们搞一个例子来体验一下webpack,使用jQuery做隔行变色的功能,首先先安装一个jquery

  • 也可以写 npm install jquery -s 效果一样

安装后会在package.json的dependencies中出现jquery

然后搞一个html

再搞一个JS

之后打开html发现没有实现功能,并且有语法错误

这个错误的原因是 浏览器在默认情况下不支持使用import导入

1.2  安装webpack

这里最好加上 -D ,-D代表只在开发中使用的库(上线后不使用),加上-D后库会放在devDependencies中

  • 开发与上线都要使用的包放在 dependencies 中

1.3  配置webpack

首先在项目路径下创建文件,命名为webpack.config.js 然后写上如下内容

mode是构建的模式,可选值有development(开发模式)与 production(上线模式)

  • 上线模式打包后文件大小要比开发模式打包后更小,但打包速度也更慢

之后再package.json中加上这些内容

  • debug是自动出现的
  • 不要忘记再scripts前加上逗号,不然会提示语法错误

dev是脚本的名字,可以自定义,如果是dev,打包的时候使用npm run dev

如果是dev123,打包的时候就使用npm run dev123

dev后面的webpack是固定的

1.4  使用webpack

打包的时候,项目路径中不可以出现中文,并且一定要存在 src/index.js

之后我们使用 npm run dev 使用webpack

打包之后会生成文件夹 dist,里面有一个main.js

之后把index.html中的index.js,改成生成的main.js

之后打开index.html,发现达到了我们想要的效果,并且没有报错

  • 我们设置的是奇数行是红色,偶数行是青色,但你看到的效果却是相反的原因是,写在页面上的第1个li,实际上是第0个li,他是根据索引来的

2  webpack.config.js中的entry与output

webpack 4.x和5.x的版本中,默认打包入口文件为src/index.js,默认的输出文件路径为dist/main.js

我们可以增加entry参数修改打包入口文件,output修改输出文件路径

  • __dirname表示当前文件所在的目录,webpack.config.js是要放在项目根目录下的,所以__dirname也就是项目根目录

3  保存后自动打包的包 webpack-dev-server

如果我们每一次修改后,希望自动打包,我们可以使用webpack-dev-server

3.1  安装

使用 npm install webpack-dev-server 进行安装

3.2  配置

之后再package.json的scripts中加入webpack serve

  • 写 webpack serve 或 webpack server 都行

之后在webpack.config.js中加入这些

  • 参考 解决使用webpack-dev-server打包后,浏览器显示Cannot GET /_webpack-dev-server cannot get /_盛名之上的博客-CSDN博客

3.3  使用

然后运行,运行后修改你的入口JS,发现会自动进行编译

  • 当修改了webpack.config.js或package.json后想让其在webpack-dev-server,需要重启webpack-dev-server
  • webpack-dev-server的模式(开发或生产)是跟着webpack走的,你在webpack.config.js定义了什么就是什么

之后修改index.html script的src

之后访问localhost:8080,之后点击src

点击后发现实现了改动的效果

3.4  devServer中的一些参数

open:true 打开服务后自动打开浏览器

host:IP

port:端口

3.5  一些注意的点

我这里没有在webpack.config.js中修改output,所以直接用/main.js就可以了

如果修改了output,比如改成下面这种

那么你的script src应为 /bundle.js

  • 中间的dist我也不清楚为什么没了,反正用的适合别写dist

新生成的main.js只是在路由中存在(存储在内存中),并没有存在硬盘中,你最后上线要得到文件的时候,需要进行webpack手动打包

点击src可以现实index.html的原因是,在浏览器会默认访问index.html

4  将src中的index.html复制到项目根路径的包 html-webpack-plugin

4.1  安装

4.2  配置

template是你要放谁,filename是你要放在哪

4.3  使用

开启 webpack-dev-server后访问localhost:8080就可以直接看到index.html

  • 新的index.html存在内存当中,没有实际文件

使用 html-webpack-plugin 后,不需要再通过srcipt手动引入 入口JS

html-webpack-plugin会帮你自动添加进来

  • 由于main.js与index.html在同一个目录下,所以没加main.js前面的斜线也是可以的

5  打包项目

5.1  基本使用

实质上就是手动打包,只是模式强调了是production

在package.json写production就会在此次替代掉webpack.config.js中的mode的选项

然后运行 npm run build 就可以了

  • 在打包前使用了很多webpack loader,详情可以看一下这个 2.webpack loader_Suyuoa的博客-CSDN博客

然后我们就在项目中得到了一个dist文件,前端开发到这里就结束了,把这个提交给需要部署的人就可以了

双击index.html后发现跟你写的效果相同

5.2  优化文件存放的路径

实际开发的时候,最好不要把所有文件都放在同一个文件夹下,我们这个项目中有js和图像,我们优化一下这两个地方

在webpack.config.js中加入output,然后再url-loader中加入outputpath

  • url-loader有两种写法,一种是像查询字符串那样写(被注释掉的那行),还有就是像现在一样使用对象展开写

然后删除之前的dist,之后再执行 npm run build,执行后发现图片与JS已经放在了指定的文件夹中

5.3  自动删除dist包 clean-webpack-plugin

5.3.1  安装

5.3.2  配置

  • const {CleanWebpackPlugin} = require('clean-webpack-plugin') 这种导入的方式叫解构赋值,require本身的返回值是一个对象,对象中只有一个元素,我们将其命名为CleanWebpackPlugin

5.3.3  使用

还和以前一样使用 npm run build 就可以了

6  Source Map

在代码出错并进行打包的时候,提示的错误的行号会出现与实际行号不一致的情况,原因为打包后的代码实际上与源代码不完全一致,提示的行号是打包后代码的行号

错误给的行号有是 21 441 30

我们可以看到实际的错误行是第19行,也就是上面三个都是不对的

6.1  eval-source-map

我们可以通过配置source map来获取实际上是哪行出了问题,什么也不用安装,加上这一句话就行了

  • 也可以写成source-map,感觉效果一样

配置完重启服务,我们可以在at eval这里看到实际错误的行号

 

6.2  nosource-source-map

如果进行生产模式的打包,依然使用eval-source-map,就会暴露源码

点击上面的地方就可以看到下面的源码

我们现在不想让别人看到源码,同时想让自己知道错误实际发生在哪一行,这时我们可以将eval-source-map替换为nosource-source-map

  • 依然不需要任何安装

打包后的效果是这样的

可以看到问题出现在19行

 

点source你发现index.js的源码是看不到的

6.3  不使用source map是最安全的

使用nosource-source-map会在dist/js下出现一个index.js.map文件

但你在source中看不到它

通过source中的index.js的无法还原源码的,通过index.js.map有机会还原

7  webpack中的@

@可以正向索引路径

7.1  例子

我们举个例子,现在有三个文件 something/something.js index.js test.js

test.js引出一个属性a

something.js使用这个属性a

最后在index.js导入something.js

发现可以console出来

在例子中,something.js是先往上翻一层,然后再找到的test.js,这样在层级多的时候看起来很麻烦

我们可以使用@进行正向查找

7.2  使用@

先进行配置,这样@就表示项目路径下src这个目录

然后进行使用

发现可以正常使用

包括css,image这些也都可以换

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

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

相关文章

C++11:lambda表达式

文章目录1. 概念2. 语法3. 示例示例1示例2示例3示例44. 捕捉方式基本方式隐式和混合补充5. 传递lambda表达式示例6. 原理7. 内联属性1. 概念 lambda表达式实际上是一个匿名类的成员函数,该类由编译器为lambda创建,该函数被隐式地定义为内联。因此&#…

某智能驾驶企业:CACTER云网关为O365系统护航

01 客户背景 某智能驾驶企业是一家国际性的高科技创新型企业,在智能驾驶领域处于全球领先地位,专注于为广大客户提供个性化的智能驾驶解决方案,共建美好智能新时代。 使用产品:CACTER邮件安全云网关 02 痛点难点问题 根据Corema…

Hive---sqoop安装教程及sqoop操作

sqoop安装教程及sqoop操作 文章目录sqoop安装教程及sqoop操作上传安装包解压并更名添加jar包修改配置文件添加sqoop环境变量启动sqoop操作查看指定mysql服务器数据库中的表在hive中创建一个teacher表跟mysql的mysql50库中的teacher结构相同将mysql中mysql50库中的sc数据导出到h…

k8s学习之路 | k8s 工作负载 DaemonSet

文章目录1. DaemonSet 基础1.1 什么是 DS1.2 DS 的典型用法1.3 如何编写 DS 资源1.4 DS 示例文件1.5 DS Pod 是如何被调度的1.6 更新 DS1.7 DS 替代方案1.8 DS 工作负载字段描述2. DaemonSet 的使用2.1 每个节点运行一个2.2 DS 更新策略2.3 滚动更新2.4 OnDelete 更新2.6 更新回…

重新认识下网页水印

使用背景图图片 单独使用 css 实现,使用 backgroundImage,backgroundRepeat 将背景图片平铺到需要加水印的容器中即可。 如果希望实现旋转效果,可以借助伪元素,将背景样式放到伪元素中,旋转伪元素实现: &l…

CHAPTER 5 文件共享 - FTP

文件共享 - FTP1 FTP1.1 传输方式1. ASCII传输方式2. 二进制传输模式3. 两种传输方式的区别1.2 支持的模式1. 主动模式(PORT)2. 被动模式(PASV)3. 如何选择4. 为什么绝大部分互联网应用都是被动模式?1.3 搭建FTP服务器(使用vsftpd)1. 安装软件…

计算机中信息的表示和处理 整数和小数的二进制表示

信息的表示和处理整数进制字移位运算无符号数和有符号数加法运算小数定点表示IEEE 浮点表示规格化和非规格化舍入浮点运算现代计算机存储和处理的信息以二值信号表示,这些二进制数字称为位,为什么要用二进制来进行编码?因为二进制只有1和0两种…

信捷 XDH Ethercat A_STOP指令

本指令使运动中的轴进行减速停止/急停。最常见的情况是用来停止以指定速度运行的轴。只要在运动,都可以用本指令停止。上图中,在M150的上升沿,执行A_STOP指令。A_STOP HD150 D150 M151 K0HD150--输入参数起始地址,HD158--输入参数…

创宇猎幽APT流量监测系统获CSTC年度网络安全优秀案例

近日,由中国软件评测中心发起的“2022 年度网络安全和数据安全优秀案例评选”活动评选结果正式公布。在众多参与案例中,创宇猎幽APT流量监测系统(NDR)凭借出色的行业场景实践和出众的产品表现力脱颖而出,成功入选“202…

5、score diffusion model

DDIM中遇到的Score-based SDE这里采用表示神经网络的预测值,用表示。同时等价于DDPM回顾贝叶斯公式原始公式前向过程表示连乘反向过程由前向过程可知:所以:正态分布:重参数技巧:反向过程:优化目标&#xff…

ASP.NETCore学习资料

1.ASP.NETCore比ASP.NET更具优势的地方是什么? ASP.NET Core(ASP.NET Core 简介) ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET(ASP.NET 简介) ASP.NET 是一个成熟的框架,提…

Git学习笔记(七)——其他操作

一、自定义Git Git除了配置user.name 和user.email 还有很多可配置项。 (1)命令git config --global color.ui true 让Git显示颜色,会让命令输出看起来更醒目.Git 会适当显示不同的颜色。 $ git config --global color.ui true查看分支会有…

延迟队列docker插件

文章目录 目录 文章目录 前言 一、环境准备与使用 总结 前言 一、环境准备与使用 下载对应版本的插件 https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases 然后在虚拟机上随便找个文件夹 cd /home/docker 先把容器运行 然后在当前文件下 将插件拷贝…

半入耳式耳机运动会不会掉、佩戴超稳固的运动耳机推荐

现在越来越多的人开始意识到运动的重要性,用运动给身体增加一道“防护墙”是最好的生活方式了,不过,日复一日做着几乎相同的动作,难免索然无味,所以很多人都会选择在运动时戴上耳机听歌解闷,这时候也有不少…

选射频线缆的困难和调试多链路匹配板子的心酸

今日痛点:选电缆和板子出问题 选线缆选到后面:有同事给我说,我还要高精度转接头,我还要BNC转接头 ​ 你们如果知道我选择线缆的艰辛,换做你们会怎么想 附上我选择线缆的心得: 1.S11尽量要考虑桌子的宽度&a…

Vector - CAPL - 文件处理函数

在当前平台化的趋势下,就算是协议层测试依然需要适配各种各样的项目,也需要处理各类型的文件,那我们如何对文件进行读取、写入、修改等类型的操作呢?今天我们就会介绍此类型的函数,主要适用于text、bin文件的处理。 打开文件 Open

MySQL之Explain分析

4 Explain分析(重点) 4.1 Explain介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行…

TCP的11种状态

CLOSED状态:初始状态,表示TCP连接是“关闭的”或者“未打开的”LISTEN状态:表示服务端的某个端口正处于监听状态,正在等待客户端连接的到来SYN_SENT状态:当客户端发送SYN请求建立连接之后,客户端处于SYN_SE…

Gradle安装配置阿里云

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。 面向Java应用为主。当前其支持的语言C、J…

数据结构——哈希表

一、哈希表介绍1.1 哈希表初了解哈希表是属于一个数据结构,并不是一个算法哈希表:hashtable,也叫散列表,根据关键码值(Key value)而直接进行访问的数据结构。通过把关键码值映射到表中的一个位置来访问记录,以加快查找…