webpack的一些常用打包配置

news/2024/5/21 7:42:36/文章来源:https://blog.csdn.net/Maxueyingying/article/details/127244969

1.webpack 是什么?
webpack 是一个模块化打包工具
2.模块是什么?
模块我理解就是 import xx 后面导入的文件就是一个模块
它可以是js css 图片 等等
3,webpack的配置文件的作用?
就是根据需求自定义配置webpack

webpack默认只能打包处理.js结尾的文件。

webpack打包其他文件 需要借助 loader 配置项来让webpack进行打包

1、打包js文件

1.首先进入项目 项目名:webpackLesson

2、初始化:
在终端输入:npm init 就会生成package.json
在终端输入:npm install 生成 package-lock.json

3、建 webpack.config.js

 const path = require('path')module.exports = {// mode: 'production',//默认打包模式(代码会被压缩)mode: 'development',//代码不会被压缩entry: {main: './src/index.js'},output: {filename: 'bundle.js',path: path.resolve(__dirname, 'bundle')}
}

4、在package.json文件里的scripts里加上一句 “bundle”:“webpack”
在这里插入图片描述

5、本地安装webpack 在终端输入 npm install webpack@3.6.0 --save-dev
6、打包:在终端输入 npm run bundle(优先执行本地的webpack,找不到则使用全局webpack)
打包结果:
在这里插入图片描述

2、打包图片

在css样式中导入图片 url()
图片分两种:小于8kb,大于8kb

小于8kb

1、安装url-loader 输入:npm install --save-dev url-loader
2、配置:在webpack.config.js中配置
添加一个rules选项,用于处理图片

	{test: /\.(png|jpg|gif|jpeg)$/,use: [{loader: 'url-loader',options: {// 当加载的图片, 小于limit时, 会将图片编译成base64字符串形式.// 当加载的图片, 大于limit时, 需要使用file-loader模块进行加载.// 图片大小 * 1024 比较 limitlimit: 8192,name: 'img/[name].[hash:8].[ext]'},}]}

3、打包 npm run bundle

大于8kb

只需在以上基础上安装 file-loader
1、安装 npm install file-loader --save-dev
webpack会将大于8kb的图片当做一个文件,就把该图片一起打包

3、打包 npm run bundle (build)

注意: 配置图片规则时,有 name: ‘img/[name].[hash:8].[ext]’,这是为了对打包的图片名字有一定的要求,比如:将所有的图片放在一个文件夹中,跟上图片原来的名称,同时也要防止重复。(因为打包大图片时,会给图片起一个名字防止重复,但是这个名字是一个32位hash值)

在options中添加上如下选项:
img:文件要打包到的文件夹
name:获取图片原来的名字,放在该位置
hash:为了防止图片名称冲突,依然使用hash,(eg:[hash:8].===>hash值可以自定义,我们只保留8位)
ext:使用图片原来的扩展名

    module: {rules: [{test: /\.(jpg|png|gif)$/,use: {// webpack不能识别非js文件,就需要借助loader配置项来让webpack进行打包loader: 'url-loader',options: {name: '[name]_[hash].[ext]',outputPath: 'images/',limit: 8192}}}]},

打包后生成目录:
在这里插入图片描述
tips:有关url-loader和file-loader 其他配置可以查看webpack官网进行了解哈~
https://v4.webpack.js.org/loaders/

3、打包CSS文件

在打包js文件的基础上:
1、安装css-loader:在终断输入 npm install --save-dev css-loader
2、安装style-loader:在终端输入 npm install --save-dev style-loader
3、配置:在webpack.config.js中配置

const path = require('path')
module.exports = {// mode: 'production',//默认打包模式(代码会被压缩)mode: 'development',//代码不会被压缩entry: {main: './src/index.js'},module: {rules: [{test: /\.(jpg|png|gif)$/,use: {// webpack不能识别非js文件,就需要借助loader配置项来让webpack进行打包loader: 'url-loader',options: {name: '[name]_[hash].[ext]',outputPath: 'images/',limit: 8192}}},{test: /\.css$/,use: [// css-loader只负责将css文件进行加载// style-loader负责将样式添加到DOM中// 使用多个loader时, 是从右向左,从下到上'style-loader', 'css-loader']}]},output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist')}
}

5、打包 npm run bundle(build)
在这里插入图片描述

4、打包less文件

在打包css文件的基础上:
1、在入口js(main.js)引入less文件,添加:require(’./css/special.less’) 要添加的less文件
2、安装对应的less-loader 在终端输入 npm install --save-dev less-loader less
3、配置:在webpack.config.js中配置
添加一个rules选项,用于处理less文件

	  {test: /\.less$/,// 使用多个loader时, 是从右向左use: [{loader: "style-loader", // creates style nodes from JS strings}, {loader: "css-loader" // translates CSS into CommonJS}, {loader: "less-loader", // compiles Less to CSS}]}

5、打包sass文件

在打包css文件的基础上:
1、在入口js(main.js)引入scss文件,添加:require(’./css/special.scss’) 要添加的scss文件
2、安装对应的sass-loader node-sass 在终端输入 npm install sass-loader node-sass --save-dev
3、配置:在webpack.config.js中配置
添加一个rules选项,用于处理scss文件

 //打包scss规则{// loader顺序,从右到左,从下到上test: /\.scss$/,use: [{loader: "style-loader" // 将 JS 字符串生成为 style 节点}, {loader: "css-loader" // 将 CSS 转化成 CommonJS 模块}, {loader: "sass-loader" // 将 Sass 编译成 CSS},{loader:'postcss-loader'}]}

tips:

1.什么是PostCSS?

https://www.postcss.com.cn/

PostCSS和sass/less不同, 它不是CSS预处理器
PostCSS是一款使用插件去转换CSS的工具,
PostCSS有许多非常好用的插件
例如
autoprefixer(自动补全浏览器前缀)
postcss-pxtorem(自动把px代为转换成rem)
… …

2.使用PostCSS自动补全浏览器前缀

2.1安装postcss-loader

npm i -D postcss-loader

2.2安装需要的插件

npm i -D autoprefixer

2.3配置postcss-loader
在css-loader or less-loader or sass-loader之前添加postcss-loader

2.4创建postcss-loader配置文件

postcss.config.js

2.5在配置文件中配置autoprefixer
https://github.com/browserslist/browserslist#queries

//postcss.config.js
module.exports = {plugins: {"autoprefixer": {"overrideBrowserslist": ["ie >= 8", // 兼容IE7以上浏览器"Firefox >= 3.5", // 兼容火狐版本号大于3.5浏览器"chrome  >= 35", // 兼容谷歌版本号大于35浏览器,"opera >= 11.5", // 兼容欧朋版本号大于11.5浏览器]}}
};

3.使用PostCSS自动将px转换成rem

https://www.npmjs.com/package/postcss-pxtorem
3.1安装postcss-pxtorem

npm install postcss-pxtorem -D

3.2在配置文件中配置postcss-pxtorem

//postcss.config.js
"postcss-pxtorem": {rootValue: 100, // 根元素字体大小propList: ['*'] // 可以从px更改到rem的属性// propList: ["height"]}

配置的相关属性

rootValue (Number) root 元素的字体大小。
unitPrecision (Number) 允许REM单位增长到的十进制数。
propList ( array ) 可以从px更改到rem的属性。值需要精确匹配。使用通配符 * 启用所有属性。 示例:['*']在单词的开头或者结尾使用 * ( ['*position*'] 将匹配 background-position-y )使用 与属性不匹配。! 示例:['*','letter-spacing']!"非"前缀与其他前缀合并。 示例:['*','font*']!
selectorBlackList ( array ) 要忽略和离开的选择器。如果值为字符串,它将检查选择器是否包含字符串。['body'] 将匹配 .body-class如果值为 regexp,它将检查选择器是否匹配正则表达式。[/^body$/] 将匹配 body,但不匹配 .body
replace (Boolean) 替代包含rems的规则,而不是添加回退。
mediaQuery (Boolean) 允许在媒体查询中转换 px。
minPixelValue (Number) 设置要替换的最小像素值。

6、plugin插件的使用

plugin可以在webpack运行到某个时刻的时候,帮你做些事情

plugin的使用过程:
步骤一:通过npm安装需要使用的plugins(某些webpack已经内置的插件不需要安装)
步骤二:在webpack.config.js中的plugins中配置插件。

打包html

HtmlWebpackPlugin插件可以为我们做这些事情:
(打包之后运行)

①自动生成一个index.html文件(可以指定模板来生成)
②将打包的js文件,自动通过script标签插入到body中

1、安装插件

npm install html-webpack-plugin --save-dev

2、配置webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin')module.exports = {module:{},plugins: [new HtmlWebpackPlugin({template: 'index.html'}),],
}

3、打包 npm run bundle(build)

CleanWebpackPlugin插件

(在打包之前运行)
打包之前 会帮我们先清理dist目录里的文件

安装插件

npm install clean-webpack-plugin --D

7、sourceMap的配置

sourceMap是一个映射关系,比如代码写错,但是打包成功,在程序运行时发现错误,提示的错误却是在打包后的js文件中,那我们如何将报错信息提示到本地文件中

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');module.exports = {mode: 'development',// development devtool: 'cheap-module-eval-source-map',// production devtool: 'cheap-module-source-map',// eval模式是使用eval将webpack中每个模块包裹,然后在模块末尾添加模块来源//# souceURL, 依靠souceURL找到原始代码的位置。devtool: 'eval', // 速度最快// 这个会将报错信息提示到打包文件中devtool: 'none', // 这个会将报错信息提示到源代码中,这个会生成一个map文件,打包速度会变慢devtool: 'source-map',//  上方生成的map文件就会变成一个base64编码添加到打包的文件中,报错会具体到某一行某一列devtool: 'inline-source-map', //  与上方的区别就是报错提示到行就行,不需要那么具体,节约性能devtool: 'cheap-inline-source-map', //  如果想让映射关系既有业务代码,又有第三方代码就用这个devtool: 'cheap-module-eval-source-map', //  最佳使用, 提示全,速度也还可以devtool: 'cheap-module-inline-source-map', // development: devtool: 'cheap-module-eval-source-map',//开发使用这种配置// production :devtool: 'cheap-module-source-map',//线上使用这种配置entry: {main: './src/index.js'},module: {rules: [{test: /\.(jpg|png|gif)$/,use: {loader: 'url-loader',options: {name: '[name]_[hash].[ext]',outputPath: 'images/',limit: 10240}} }, {test: /\.(eot|ttf|svg)$/,use: {loader: 'file-loader'} }, {test: /\.scss$/,use: ['style-loader', {loader: 'css-loader',options: {importLoaders: 2}},'sass-loader','postcss-loader']}]},plugins: [new HtmlWebpackPlugin({template: 'src/index.html'}), new CleanWebpackPlugin(['dist'])],output: {filename: '[name].js',path: path.resolve(__dirname, 'dist')}
}

8、ES6 转 ES5

为了兼容性

1、安装

npm install --save-dev babel-loader@7 babel-core babel-preset-es2015

2、配置webpack.config.js文件

	  {test: /\.js$/,// exclude: 排除exclude: /(node_modules|bower_components)/,use: {loader: 'babel-loader',options: {presets: ['es2015']}}}

9、搭建本地服务器

1、安装插件

npm install --save-dev webpack-dev-server@2.9.1

2、配置webpack.config.js文件

module.exports = {module:{},devServer: {contentBase: './dist',  //为哪一个文件夹提供本地服务,默认是根文件夹inline: true  // 页面实时刷新}
}

属性:
① contentBase:为哪一个文件夹提供本地服务,默认是根文件夹,我们这里要填写./dist
② port:端口号
③ inline:页面实时刷新
④ historyApiFallback:在SPA页面中,依赖HTML5的history模式
3、配置package.json
在build 下添加

"dev": "webpack-dev-server --open" // --open打开浏览器

4、npm run dev
之后修改代码就不再用打包了,等想要发布时再执行 npm run bundle (build)
5、在打包发布时,就不再需要本地服务器了。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻轻松松搞定分布式Token校验

文章目录前言token存储Token 存储实体login 业务代码枚举类修改存储效果客户端存储token验证前端提交后端校验自定义注解切面处理使用总结前言 没想到前天小水了一篇博文,竟然就火了?!!既然如此,那我再来一篇&#xf…

第7章 单行函数

1.函数的理解 *函数可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率,又提高了可维护性。在SQL中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数,可以极大地提高用户对数据库的管理效率。 …

微信小程序|基于小程序实现打卡功能

文章目录一、文章前言二、开发流程及准备三、开发步骤一、文章前言 此文主要在小程序内实现打卡功能,可根据用户位置与公司设定的打卡范围实时判断打卡场景。 二、开发流程及准备 2.1、注册微信公众平台账号。 2.2、准备腾讯地图用户Key。 三、开发步骤 3.1、访问…

【面试题常考!!!】JZ39 数组中出现次数超过一半的数字【五种方法解决】

欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 字体风格: 红色文字表示:重难点 蓝色文字表示:思路以…

神经网络模型数据处理,神经网络模型参数辨识

1、有哪些深度神经网络模型? 目前经常使用的深度神经网络模型主要有卷积神经网络(CNN) 、递归神经网络(RNN)、深信度网络(DBN) 、深度自动编码器(AutoEncoder) 和生成对抗网络(GAN) 等。 递归神经网络实际.上包含了两种神经网络。一种是循环神经网络(Recurrent Neu…

STM32F4单片机读取AT24c02

​STM32F4是由ST(意法半导体)开发的一种高性能微控制器系列。其采用了90nm的NVM工艺和ART技术(自适应实时存储加速器,Adaptive Real-Time MemoryAccelerator™) AT24C02是Atmel公司出品的一个2K位串行CMOS E2PROM&…

【k8s】五、Pod生命周期(一)

目录 前言 Pod生命周期 Pod 相位 状态值 挂起(Pending) 运行中(Running) 成功(Succeeded) 失败(Failed) 未知(Unknown) Init Containers Init Cont…

pc端引擎颠覆电脑兼容性

张小龙曾在讲座上阐述小程序理念的精髓,小程序承载着张小龙及微信团队对未来程序形态的一种见解,总结为五个字:所见即所得。原文如下: 它是一种真正的所见即所得的形态,我说的所见即所得不同于在PC时代,我…

组合模式+桥接模式

目录 组合模式 定义: 业务实现例子: 桥接模式 JDBC中的桥接模式 组合模式 定义: 将对象组合通过树形结构进行展示,使得用户——>不管对单个对象or组合对象的使用具有一致性 可以理解为部分-整体模式——>简单来说就…

深度学习环境搭建

(1) 安装 Anaconda :建立 Python 应用环境 安装成功界面如下:(2) Visual Studio Code: 建立代码编辑环境 1.安装Python扩展2.选择合适的Python解释器 3.安装下列应用扩展:codeRunner : 快速运行程序 Jupyter : 交互式运行程序 Pylance : 高效代码提示 安装完成如图所示:4.创…

Linux基础组件之muduo日志库分析

muduo日志库分析异步日志机制双缓存机制前台日志写入栈后台日志(落盘)写入栈使用示例总结后言异步日志机制 #mermaid-svg-nrIugWYiOaAGFTWH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-nrIugWYiOaAGFTWH .error-…

如何做架构规划

文章目录架构师的职责WhyWhatHow架构活动生命周期环境搭建目标确认可行性探索架构规划统一语义需求确认任务边界划分确认规划完整性项目启动阶段性价值交付复盘经历过的典型案例参考架构师的职责 Why 互联网架构活动的挑战较多,如: 反射式的研发行为。…

Scratch软件编程等级考试四级——20200913

Scratch软件编程等级考试四级——20200913理论单选题判断题实操奇偶之和创意画图数字之和用逗号分隔列表数字反转理论 单选题 1、执行下面程序,输入4和7后,角色说出的内容是?() A、4,7 B、7,7 C、7,4 D、…

为什么会发生云中断?如何防范?

IT 越依赖云服务,用户就越有可能因云中断而遭受停机和收入损失。由于云中断事件的发生,超过 60% 的使用公共云的组织在 2022 年报告了损失,因此云中断并不是公司不太可能面临的异常事件。 但是中断是否足以成为永远离开云的理由?还是应该坚持…

《安富莱嵌入式周报》第286期:8bit浮点数规范,VxWorks火星探测器故障原因修复,Matter V1.0智能家居规范,Wireshark 4.0发布

往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 目录 视频版: 1、SIA全球半导体行业协会统计显示全球芯片市场增长放缓,中国市场下跌10% …

程序员如何高效准备简历和面试03:诊断:简历为什么被忽视?

你好,欢迎学习课时3,我是你的职场导师吴文娟。 这节课主要为后面教你写简历做个铺垫,学习内容只有2个字:挑错。一个大家比较喜欢的事。我们来敲黑板看一些反面典型,案例都是我截取之前诊断过的简历,讲一讲为…

Mac电脑图片后期处理Lightroom Classic 2022(lrc2022)

Lightroom Classic 2022具有非常强大的图像处理功能,甚至对照片的一些修饰也可以完成,例如去除不要的物体、校正照片和增强照片颜色等。Lightroom Classic 2022 Mac版为用户提供了各种满足优秀摄影效果所需的编辑工具。让您能够轻松提亮颜色、使灰暗的摄…

C++ Builder XE TChart动态添加N个线条TLineSeries变化

// LARGE_INTEGER litmp; LONGLONG QPart1,QPart2; double dfMinus, dfFreq, dfTim; QueryPerformanceFrequency(&litmp); dfFreq (double)litmp.QuadPart;// 获得计数器的时钟频率 QueryPerformanceCounter(&litmp)…

STM32:外部中断控制旋转编码器并计次

1.主函数(main.c)代码部分: #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include "Encoder.h" int16_t Num; int main(void) { OLED_Init(); OLED_Sh…

第十四届蓝桥杯备赛模板题——蓝桥部队 (带权并查集)

目录1.蓝桥部队1. 问题描述2.输入格式3.输入样例4.样例答案5.原题连接2.解题思路3.Ac_code1.蓝桥部队 1. 问题描述 小明是蓝桥部队的长官,他的班上有 NNN 名军人和 111 名军师。 这天,NNN 名军人在操场上站成一排,起初编号为 iii 的军人站…