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

Webpack的知识要点

  在前端开发中,一般情况下都使用 npm 和 webpack。
  npm是一个非常流行的包管理工具,帮助开发者管理项目中使用的依赖库和工具。它可以方便地为项目安装第三方库,并在项目开发过程中进行版本控制。
  webpack是一个模块打包工具,它可以帮助我们将项目中的代码,例如 JavaScript、CSS、图片等资源进行打包和优化,从而提高应用程序的加载速度和性能。
  在项目的开发过程中,我们通常首先使用npm创建项目,并在项目中安装所需的依赖,然后使用webpack将项目的代码进行打包,并在发布前进行最终的代码优化。
  webpack官网地址

一、使用npm和webpack进行项目开发的具体构建过程:

(以Vue 2 的组件化开发为例)

   1、安装 Node.js
   Vue2 是一个基于 Node.js 环境的前端框架,需要安装 Node.js 环境。安装Node.js即安装了npm。
   2、创建项目文件夹

npm init -y

  生成package.js。
   3、安装 Webpack和webpage-cli
   在项目目录下,使用 npm 安装 Webpack,命令为:

npm install webpack webpack-cli --save-dev

   4、配置 Webpack
   在项目目录下,创建 webpack.config.js 文件,进行Webpack的配置。
   一般简易的配置为:(如入口、出口、loader等。)

const path=require('path')
const { VueLoaderPlugin } =require('vue-loader')module.exports={mode:'development',entry:'./src/main.js',output:{filename:'bundle.js',path:path.resolve(__dirname,'dist')},module:{rules:[{test:/\.vue$/,loader:'vue-loader'},{test:/\.(jpg|jpeg|png|svg)$/,loader:'file-loader',options:{name:'[name].[ext]',}},{test:/\.css$/,use:['style-loader','css-loader']}]},resolve:{alias:{'vue':'vue/dist/vue.esm-bundler.js'}}
}

   5、安装Vue2及项目依赖
   使用npm在当前目录下安装生产环境下依赖的包。
   6、编写项目(Vue2组件)
   在 VSCode 中编写 Vue2 组件,使用 Webpack 进行打包。
   ⑴创建项目入口文件,在其中定义项目的根组件;

import Vue from 'vue'
import App from './App.vue'
new Vue({el: '#app',render: h => h(App)
})

   ⑵创建一个名为 App.vue 的组件文件,在其中定义根组件的模板和样式:

<template><div><p>Hello World!</p></div>
</template><style>p {font-size: 20px;color: blue;}
</style>

   7、运行项目
   在终端中运行

npx webpack

  即可打包项目,生成 dist 目录。
   8、部署项目
   使用 Web 服务器部署生成的 dist 目录,并进行访问。

二、webpack的知识要点

  1、Entry:指示webpack以哪个文件为入口起点开始打包。
  2、Output:指示webpack打包后的资源bundles输出位置以及命名。
  3、Loader:Loader让webpack能够去处理CSS、img图片等非JavaScript文件(webpack本身只能处理Javascript/Json)
  4、Plugins:可以执行非内置的包括打包优化、压缩、定义环境中的变量等任务
  5、Mode:指示webpack使用的模式。
  6、devtool:用于编译后的代码调试。
  7、devserver:启动一个开发环境下的Web服务器用于代码调试。

  以下是一个webpack.config.js的配置:

const path=require('path')
const { VueLoaderPlugin } =require('vue-loader')
const HtmlWebpackPlugin=require('html-webpack-plugin')
const { CleanWebpackPlugin }=require('clean-webpack-plugin')
const webpack=require('webpack')module.exports={mode:'development',entry:'./src/main.js',devtool:'cheap-module-eval-source-map',devServer:{port:3019,open:true,hot:true},output:{filename:'bundle.js',path:path.resolve(__dirname,'dist')},module:{rules:[{test:/\.vue$/,loader:'vue-loader'},{test:/\.(jpg|jpeg|png|svg)$/,loader:'file-loader',options:{name:'[name].[ext]',// limit:2048}},{test:/\.css$/,use:['style-loader','css-loader']},{test:/\.styl(us)?$/,use:['style-loader','css-loader','postcss-loader','stylus-loader']}]},plugins:[new VueLoaderPlugin(),new HtmlWebpackPlugin({template:'index.html'}),new CleanWebpackPlugin(),new webpack.HotModuleReplacementPlugin()],resolve:{alias:{'vue':'vue/dist/vue.esm-bundler.js'}}
}

三、常用的Loader和插件
  Webpack常用的loader:
  ⑴、Babel-loader:将 ES6 转化为 ES5
  ⑵、Css-loader:加载和打包 CSS 文件
  ⑶、File-loader:打包文件,如图片,字体等
  ⑷、Raw-loader:加载原始文本文件,例如 SQL 文件
  ⑸、Url-loader:加载和转换小图片,并在超过限制时将其打包为文件
  ⑹、Postcss-loader:处理 CSS 的兼容性问题
  ⑺、Less-loader:加载和打包 Less 文件
  ⑻、Sass-loader:加载和打包 Sass 文件
  ⑼、Stylus-loader:加载和打包 Stylus 文件
  ⑽、Json-loader:加载 JSON 文件.
  Webpack 常用的插件:
  ⑴、CleanWebpackPlugin:用于清除目录中无用的文件。
  ⑵、HtmlWebpackPlugin:用于生成 HTML 文件。
  ⑶、MiniCssExtractPlugin:用于抽取 CSS 文件。
  ⑷、UglifyjsWebpackPlugin:用于压缩 JS 代码。
  ⑸、OptimizeCssAssetsWebpackPlugin:用于压缩 CSS 代码。
  ⑹、CopyWebpackPlugin:用于复制文件或文件夹。
  ⑺、BundleAnalyzerPlugin:用于分析打包后的文件体积。
  ⑻、CompressionWebpackPlugin:用于压缩输出的文件。

四、在webpack中实现自己的加载器

  ⑴、新建一个 JavaScript 文件,编写加载器的代码。

module.exports = function(source) {//处理return 处理结果;
}

  ⑵、在 webpack 配置文件中配置自己的加载器,并使用 module.rules 属性来进行配置。

        rules: [{test: /\.文件的后缀$/,use: [path.resolve(位置, '模块名称.js')]}

五、在webpack中实现自己的插件

  ⑴、创建一个 JavaScript 对象,并实现 apply 方法。

class 插件名称 {apply(compiler) { //处理}
}module.exports = 插件名称;

  ⑵、在 webpack 配置文件中引用这个插件并使用它。

    plugins: [new 插件名称()]

  Webpack说简单也的确简单,就那么点内容。
  说复杂也是很复杂,因为要清楚各种Loader以及插件的细节并恰当地使用,这也不是一件容易的事情,上面我没有用到optimization,具体开发项目的时候肯定要使用。
  但关键点并不在这里,关键还是在于项目的具体构建,Webpack只不过是让你的项目开发更高效以及项目产品的输出更加高质量而已。

相关文章:

Webpack的知识要点

在前端开发中&#xff0c;一般情况下都使用 npm 和 webpack。   npm是一个非常流行的包管理工具&#xff0c;帮助开发者管理项目中使用的依赖库和工具。它可以方便地为项目安装第三方库&#xff0c;并在项目开发过程中进行版本控制。   webpack是一个模块打包工具&#xff…...

handler解析(2) -Handler源码解析

目录 基础了解&#xff1a; 相关概念解释 整体流程图&#xff1a; 源码解析 Looper 总结&#xff1a; sendMessage 总结&#xff1a; ThreadLocal 基础了解&#xff1a; Handler是一套 Android 消息传递机制,主要用于线程间通信。实际上handler其实就是主线程在起了一…...

【算法】kmp

KMP算法 名称由来 是由发明这个算法的三个科学家的名称首字母组成 作用 用于字符串的匹配问题 举例说明 字符串 aabaabaaf 模式串 aabaaf 传统匹配方法 第一步 aabaabaaf aabaaf 此时&#xff0c;b和f不一致&#xff0c;则把模式串从头和文本串的第二个字符开始比 第…...

git 常用命令之 git checkout

大家好&#xff0c;我是 17。 git checkout 是 git 中最重要最常用的命令之一&#xff0c;本文为大家详细解说一下。 恢复工作区 checkout 的用途之一是恢复工作区。 git checkout . checkout . 表示恢复工作区的所有更改,未跟踪的文件不会有变化。 恢复工作区的所有文件风…...

一些常见错误

500状态码: 代表服务器业务代码出错, 也就是执行controller里面的某个方法的过程中报错, 此时在IDEA的控制台中会显示具体的错误信息, 所以需要去看IDEA控制台的报错404状态码: 找不到资源找不到静态资源 检查请求地址是否拼写错误 检查静态资源的位置是否正确 如果以上都没有问…...

[单片机框架][调试功能] 回溯案发现场

程序莫名死机跑飞&#xff0c;不知道问题&#xff0c;那么下面教你回溯错误源 回溯案发现场一、修改HardFault_Handler1. xx.s 在启动文件&#xff0c;找到HardFault_Handler。并修改。2. 定义HardFault_Handler_C函数。&#xff08;主要是打印信息并存储Flash&#xff09;3. 根…...

MySQL主从同步-(二)搭建从机服务器

在docker中创建并启动MySQL从服务器&#xff1a;**端口3307docker run -d \-p 3307:3306 \-v /atguigu/mysql/slave1/conf:/etc/mysql/conf.d \-v /atguigu/mysql/slave1/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD123456 \--name atguigu-mysql-slave1 \mysql:8.0.3创建MyS…...

Linux系列 备份与分享文档

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.备份与分享文档 1.使用压缩和解压缩工具 &#xff08;1&…...

SNI生效条件 - 补充nginx-host绕过实例复现中SNI绕过的先决条件

文章目录1.前置环境搭建2.测试SNI生效条件(时间)3. 证书对SNI的影响3.1 双方使用同一个证书&#xff1a;3.2 双方使用不同的证书与私钥4. 端口号区分测试4.1 端口号区分&#xff0c;证书区分&#xff1a;4.2 端口号区分,证书不区分&#xff1a;5.总结SNI运行机制6. SNI机制绕过…...

傻白探索Chiplet,Modular Routing Design for Chiplet-based Systems(十一)

阅读了Modular Routing Design for Chiplet-based Systems这篇论文&#xff0c;是关于多chiplet通信的&#xff0c;个人感觉核心贡献在于实现了 deadlock-freedom in multi-chiplet system&#xff0c;而不仅仅是考虑单个intra-chiplet的局部NoC可以通信&#xff0c;具体的一些…...

C语言静态库、动态库的封装和注意事项

1、动态库、静态库介绍 参考博客&#xff1a;《静态库和动态库介绍以及Makefile》&#xff1b; 2、代码目录结构和编译脚本 参考博客&#xff1a;《实际工作开发中C语言工程的目录结构分析》&#xff1b; 3、编写库的流程 (1)明确需求:需求是否合理、需求的使用场景、需求可能遇…...

MyBatis-Plus分页插件和MyBatisX插件

MyBatis-Plus分页插件和MyBatisX插件六、插件1、分页插件a>添加配置类b>测试八、代码生成器1、引入依赖2、快速生成十、MyBatisX插件1、新建spring boot工程a>引入依赖b>配置application.ymlc>连接MySQL数据库d>MybatisX逆向生成2、MyBatisX快速生成CRUD申明…...

年前无情被裁,面试大厂的这几个月…

2月份了&#xff0c;金三银四也即将来临&#xff0c;在这个招聘季&#xff0c;大厂也开始招人&#xff0c;但还是有很多人吐槽说投了很多简历&#xff0c;却迟迟没有回复… 另一面企业招人真的变得容易了吗&#xff1f;有企业HR吐槽&#xff0c;简历确实比以前多了好几倍&…...

基于Java的分片上传功能

起因&#xff1a;最近在工作中接到了一个大文件上传下载的需求&#xff0c;要求将文件上传到share盘中&#xff0c;下载的时候根据前端传的不同条件对单个或多个文件进行打包并设置目录下载。 一开始我想着就还是用老办法直接file.transferTo(newFile)就算是大文件&#xff0c…...

KDS安装步骤

KDS kinetis design studio 软件 第一步官网(https://www.nxp.com/ 注册账号下载set成功下载软件。 随着AI&#xff0c;大数据这些技术的快速发展&#xff0c;与此有关的知识也普及开来。如何在众多网站中寻找最有价值的信息&#xff0c;如何在最短的时间内获得最新的技…...

JavaSE-线程池(1)- 线程池概念

JavaSE-线程池&#xff08;1&#xff09;- 线程池概念 前提 使用多线程可以并发处理任务&#xff0c;提高程序执行效率。但同时创建和销毁线程会消耗操作系统资源&#xff0c;虽然java 使用线程的方式有多种&#xff0c;但是在实际使用过程中并不建议使用 new Thread 的方式手…...

开源代码的寿命为何只有1年?

说实话&#xff0c;如果古希腊的西西弗斯是一个在2016年编写开源代码的开发者&#xff0c;那他会有宾至如归的感觉。著名的西西弗斯处罚&#xff0c;是神话流传下来的&#xff0c;他被迫推一块巨大的石头上山&#xff0c;当登顶之后&#xff0c;只能眼睁睁看着它滚下去&#xf…...

完善登录功能--过滤器的使用

系列文章目录 Spring Boot读取配置文件内容的三种方式 Spring Boot自动配置–如何切换内置Web服务器 SpringBoot项目部署 上述为该系列部分文章&#xff0c;想了解更多可看我博客主页哦&#xff01; 文章目录系列文章目录前言一、创建自定义过滤器LoginCheckFilter二、在启动类…...

CSS基础:属性和关系选择器

字体属性 color 文本颜色 div{ color:red;} div{ color:#ff0000;} div{ color:rgb(255,0,0);} div{ color:rgba(255,0,0,.5);}font-size 文本大小 h1 {font-size:40px;} h2 {font-size:30px;} p {font-size:14px;}注意&#xff1a;chrome浏览器接受最小字体是12px font-we…...

设计模式:原型模式解决对象创建成本大问题

一、问题场景 现在有一只猫tom&#xff0c;姓名为: tom, 年龄为&#xff1a;1&#xff0c;颜色为&#xff1a;白色&#xff0c;请编写程序创建和tom猫属性完全相同的10只猫。 二、传统解决方案 public class Cat {private String name;private int age;private String color;…...

驱动开发(二)

一、驱动流程 驱动需要以下几个步骤才能完成对硬件的访问和操作&#xff1a; 模块加载函数 module_init注册主次设备号 <应用程序通过设备号找到设备>驱动设备文件 <应用程序访问驱动的方式> 1、手动创建 &#xff08;mknod&#xff09;2、程序自动创建file_oper…...

《狂飙》大结局,这22句经典台词值得细品

最近爆火的热播剧《狂飙》大家都看了吗&#xff1f; 剧情紧凑、演技炸裂、豆瓣评分9.0&#xff0c;可以说是开年评分最高的一部国产剧。 ​ 虽然大结局了。 里面有很多经典台词&#xff0c;值得每个人细细品味。 01 这世界不缺梦想 有本事你就去实现它 02 你这么善良 怎么跟坏…...

【计算机网络期末复习】第二章 物理层

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4e3;专栏定位&#xff1a;为想复习学校计算机网络课程的同学提供重点大纲&#xff0c;帮助大家渡过期末考~ &#x1f4da;专栏地址&#xff1a; ❤️如果有收获的话&#xff0c;欢迎点…...

多核异构核间通信-mailbox/RPMsg 介绍及实验

1. 多核异构核间通信 由于MP157是一款多核异构的芯片&#xff0c;其中既包含的高性能的A7核及实时性强的M4内核&#xff0c;那么这两种处理器在工作时&#xff0c;怎么互相协调配合呢&#xff1f; 这就涉及到了核间通信的概念了。 IPCC (inter-processor communication contr…...

【Rust日报】2023-02-11 从头开始构建云数据库 RisingWave - 为什么我们从 C++ 转向 Rust...

GTK4发布v0.60gtk4-rs代码库包含GTK4的Rust crates。还有个庞大的GObject库生态系统&#xff0c;其中许多库基于gtk-rs中包含的Rust绑定工具。 特别是&#xff1a;gtk-rs-core&#xff0c;一些核心库的绑定&#xff0c;例如 glib、gio、pango、graphenegstreamer-rs&#xff0c…...

Linux驱动开发(一)

linux驱动学习记录 一、背景 在开始学习我的linux驱动之旅之前&#xff0c;先提一下题外话&#xff0c;我是一个c语言应用层开发工作人员&#xff0c;在工作当中往往会和硬件直接进行数据的交互&#xff0c;往往遇到数据不通的情况&#xff0c;常常难以定位&#xff0c;而恰巧…...

Spring MVC 之返回数据(静态页面、非静态页面、JSON对象、请求转发与请求重定向)

文章目录1. 默认情况下返回静态页面2. 返回一个非静态页面的数据2.1 ResponseBody 返回页面内容2.2 RestController ResponseBody Controller3. 实现登录功能&#xff0c;返回 JSON 对象3.1 前端使⽤ ajax&#xff0c;后端返回 json 给前端3.2 前端发送 JSON 的标准格式4. 请…...

leetcode-每日一题-2335(简单,贪心)

自己打表看一下过程就可以发现&#xff0c;其实就是每次选两个大的进行--之后秒数加1即可现有一台饮水机&#xff0c;可以制备冷水、温水和热水。每秒钟&#xff0c;可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。给你一个下标从 0 开始、长度为 3 的整数数组 amount &am…...

Verilog语法之数学函数

Verilog-2005支持一些简单的数学函数&#xff0c;其参数的数据类型只能是integer和real型。 Integer型数学函数 $clog2是一个以2为底的对数函数&#xff0c;其结果向上取整&#xff0c;返回值典型的格式&#xff1a; integer result; result $clog2(n); 最典型的应用就是通过…...

【手撕面试题】JavaScript(高频知识点一)

目录 面试官&#xff1a;请你简述 var、let、const 三者之间的区别&#xff1f; 面试官&#xff1a;请你谈谈对深拷贝与浅拷贝的理解 面试官&#xff1a;输入URL的那一瞬间浏览器做了什么&#xff1f; 面试官&#xff1a;说一说cookie sessionStorage localStorage 区别&am…...

现在网站后台有哪几种模板形式/什么软件可以免费发广告

一&#xff1a;下载虚拟机 VMware 官网&#xff1a;https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html 选择你所对应的系统 我这里是windows操作系统 下载成功后安装 打开界面是这样子的 二&#xff1a;介绍一下 CentOS CentOS是免费的、…...

网站开发需求文档范文/网络营销的分类

给一个用于缩放图片的方法&#xff0c;计算好要缩放的大小&#xff0c;然后用如下方式重绘并保存&#xff1a; UIGraphicsBeginImageContext(size); //size 为CGSize类型&#xff0c;即你所需要的图片尺寸 [sourceImage drawInRect:newImageRect]; //newImageRect指定了图片绘制…...

阜阳公司网站建设/地推拉新app推广怎么做

centOS 5.3是Redhat最新的开源企业版的Linux 操作系统&#xff0c;这个系统与RHEL不同之处就在与RHEL提供付费的企业 服务&#xff0c;centOS是免费提供升级软件包&#xff0c;由开源社区支持&#xff0c;是RHEL的重编译二进制版本。前段时间写了RHEL的服务器环境搭建 心得&…...

tale博客和wordpress/公司网站制作

[edit by xingoo] kmp算法其实就是一种改进的字符串匹配算法。复杂度可以达到O(nm)&#xff0c;n是参考字符串长度&#xff0c;m是匹配字符串长度。 传统的算法&#xff0c;就是匹配字符串与参考字符串挨个比较&#xff0c;如果相同就比较下一个&#xff0c;如果不相同&#xf…...

网站手机css模板/一键搭建网站工具

Node.js是什么&#xff1f; Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型&#xff0c;使其轻量又高效。 Node.js 的出现吸引了很多前端开发人员开始用 JavaScript 开发服务器代码&#xff0c;其异步编程风格…...

怎样自己做免费的网站/seo外贸网站制作

描述&#xff1a;SpringBoot使用jdbc链接mysql时出错&#xff1a; yml数据源配置信息&#xff1a; 修改 在连接url后面加上useUnicodetrue&characterEncodingUTF-8&serverTimezoneUTC 其中UTC是统一标准世界时间,而useUnicode和characterEncoding解决乱码问题...