前端工程化之:webpack2-1(常用扩展)

2024-02-04 15:20

本文主要是介绍前端工程化之:webpack2-1(常用扩展),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、CleanWebpackPlugin

二、HtmlWebpackPlugin

三、CopyPlugin

四、webpack-dev-server

五 、file-loader

六、url-loader

七、路径问题

前言

由于 webpack webpack-cli webpack-dev-server 会存在版本不兼容问题,所以这里使用的版本如下: 

"devDependencies": {"clean-webpack-plugin": "^3.0.0","file-loader": "^5.0.2","html-webpack-plugin": "^3.2.0","url-loader": "^3.0.0","webpack": "^4.41.5","webpack-cli": "^3.3.10","webpack-dev-server": "^3.10.1"}

一、CleanWebpackPlugin

 每次打包后不会再次生成新的文件,而是对原来打包的文件进行更新。

 webpack.config.js :

var { CleanWebpackPlugin } = require("clean-webpack-plugin")
module.exports = {mode: "development",devtool: "source-map",output: {filename: "[name].[chunkhash:3].js"},plugins: [new CleanWebpackPlugin()]
}

二、HtmlWebpackPlugin

 可以自动生成 html 文件引用打包后的文件。

 webpack.config.js :

const { CleanWebpackPlugin } = require("clean-webpack-plugin")
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {mode: "development",devtool: "source-map",entry: {home: "./src/index.js",//home由index打包来a: "./src/a.js"},output: {filename: "scripts/[name].[chunkhash:5].js"},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({//可以每个文件引用不同的包template: "./public/index.html",//自动生成的html文件模板采用filename: "home.html",chunks: ["home"]//引用的js包}),new HtmlWebpackPlugin({template: "./public/index.html",filename: "a.html",chunks: ["a"]})]
}

三、CopyPlugin

复制静态文件。 

 webpack.config.js : 

const { CleanWebpackPlugin } = require("clean-webpack-plugin")
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CopyPlugin = require('copy-webpack-plugin');
module.exports = {mode: "development",devtool: "source-map",output: {filename: "scripts/[name].[chunkhash:3].js"},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({template: "./public/index.html"}),new CopyPlugin([{ from: "./public", to: "./" }//将public中的文件复制到出口文件夹例(默认dist)])]
}

四、webpack-dev-server

开发服务器:搭建一个本地开发环境,直接运行到浏览器,不会每次运行都打包。

默认运行本地地址:http://localhost:8080/

// 安装插件
npm i -D webpack-dev-server// 运行命令
npx webpack-dev-server

配置:

  1.  port:运行的端口号;
  2.  open:开启服务器后自动打开浏览器窗口发访问地址;
  3.  index:默认值 "index.html"
  4.  proxy:配置代理;
  5.  stats:配置控制台输出内容。

五 、file-loader

 file-loader 可以将打包过程中识别不了的文件进行处理,生成依赖的文件到输出目录,然后将模块文件设置为:导出一个路径。

 src/index.js :

const png = require("./assets/backg.png").default;
let num = Math.random();
console.log(num, "--");
if (num > 0.5) {var img = document.createElement("img");img.src = png;document.body.appendChild(img);
}

 webpack.config.js : 

module: {rules: [{test: /\.(png)|(jpg)|(gif)$/,// use: ["file-loader"], // 第一种写法use: [{loader: "file-loader", // loader插件名options: {name: "imgs/[name].[hash:5].[ext]", // 生成文件名},},], // 第二种写法},],},

  file-loader 原理: 

function loader(source){// source:文件内容(图片内容 buffer)// 1. 生成一个具有相同文件内容的文件到输出目录// 2. 返回一段代码   export default "文件名"
}

六、url-loader

将依赖的文件转换为:导出一个 base64 格式的字符串。

  src/index.js :

import png from "./assets/backg.png"; // url-loader
let num = Math.random();
console.log(num, "--");
if (num > 0.5) {var img = document.createElement("img");img.src = png;document.body.appendChild(img);
}

  webpack.config.js : 

module: {rules: [{test: /\.(png)|(jpg)|(gif)$/,use: [{loader: "url-loader",options: {// limit: false, // 默认为false,为false时不限制任何大小,所有经过loader的文件进行base64编码返回limit: 10 * 1024, // 只要文件不超过10*1024字节,则使用base64编码,否则,交给file-loader处理name: "imgs/[name].[hash:5].[ext]", // file-loader处理},},],},],

 url-loader 原理: 

function loader(source){// source:文件内容(图片内容 buffer)// 1. 根据buffer生成一个base64编码// 2. 返回一段代码   export default "base64编码"
}

七、路径问题

在使用 file-loader url-loader 时,可能会遇到一个非常有趣的问题:

比如,通过 webpack 打包的目录结构如下:

dist|—— img|—— a.png  #file-loader生成的文件|—— scripts|—— main.js  #export default "img/a.png"|—— html|—— index.html #<script src="../scripts/main.js" ></script>

这种问题发生的根本原因:模块中的路径来自于某个 loader plugin ,当产生路径时, loader plugin 只有相对于 dist 目录的路径,并不知道该路径将在哪个资源中使用,从而无法确定最终正确的路径。

面对这种情况,需要依靠 webpack 的配置 publicPath 解决。

module.exports = {mode: "development",devtool: "source-map",output: {filename: "scripts/[name].[chunkhash:5].js",publicPath: "/"//一般情况设置总的路径即可}
}

有些插件会自己内置 publicPath 属性进行配置。 

这篇关于前端工程化之:webpack2-1(常用扩展)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/677951

相关文章

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

golang中reflect包的常用方法

《golang中reflect包的常用方法》Go反射reflect包提供类型和值方法,用于获取类型信息、访问字段、调用方法等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录reflect包方法总结类型 (Type) 方法值 (Value) 方法reflect包方法总结

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

HTML input 标签示例详解

《HTMLinput标签示例详解》input标签主要用于接收用户的输入,随type属性值的不同,变换其具体功能,本文通过实例图文并茂的形式给大家介绍HTMLinput标签,感兴趣的朋友一... 目录通用属性输入框单行文本输入框 text密码输入框 password数字输入框 number电子邮件输入编程框

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.