关于webpack的基本配置

文章目录

  • 前言
  • 一、webpack基本配置
    • 1.配置拆分和merge
    • 2. 启动服务
    • 3、处理es6,配置babel
    • 4、处理样式
    • 5、处理图片


前言

为什么要有webpack构建和打包?

  • 更好的模块化管理。webpack支持模块化规范:代码分割成独立模块,并管理模块之间的依赖关系。
  • 资源打包。将js文件、css文件、图片等多个资源打包成单个或多个文件,减少请求,提高加载性能性能,且webpack支持资源压缩、优化、缓存等处理。
  • 转换和编译。如用Bable将ES6+代码转为向后兼容版本如ES5,将sass、less、stylus转为浏览器能识别的css代码,将ts转为js等。
  • 代码拆分和懒加载。当应用程序变得复杂时,打包文件体积也会变大,导致初始加载时间太长。因此可以对代码进行拆分,按需加载。
  • 插件系统和扩展性。Webpack具有强大的插件系统,提供了许多插件和工具,以满足不同项目的需求。

一、webpack基本配置

1.配置拆分和merge

mode表示以什么模式打包;
使用development模式,打包后的代码可阅读,没被压缩;
使用production模式,代码会被压缩。

const path = require('path');
module.exports = {mode:'development', // production 生产环境entry:{app: './src/main.js',list: './src/main.js'},output:{path.resolve(__dirname, 'dist');filename: '[name].js'}
}

开发环境和生产环境是不一样的,为了解决手动改更改mode带来的不便,所以将这些打包配置拆分到不同文件中:

  • 通用配置:webpack.common.js
  • dev配置: webpack.dev.js
  • prod配置:webpack.prod.js
// webpack.common.js
const path=require('path')
const srcPath=path.join(__direname,'..','src')
const distPath=path.join(__dirname,'..'.'dist')
module.exports={entry:{path:path.join(srcPath,'index')}
}

由于我们拆分了配置,公共的一些配置项不需要在dev和prod里面再去重新写,所以我们需要把webpack.common.js分别和dev,prod建立连接。
这时需要安装webpack-merge这个插件

npm i webpack-merge -D

安装完成后需要在dev和prod里面分别引入:

// webpack.dev.js
const path=require('path')
const srcPath=path.join(__direname,'..','src')
const distPath=path.join(__direname,'..','dist')
const {merge}=require('webpack-merge')
const webpackCommonConf=require('./webpack.common')module.exports=merge(webpackCommonConf,{ // 合并mode:'development'
})
// webpack.prod.js
const path=require('path')
const srcPath=path.join(__direname,'..','src')
const distPath=path.join(__direname,'..','dist')
const {merge}=require('webpack-merge')
const webpackCommonConf=require('./webpack.common')module.exports=merge(webpackCommonConf,{ // 合并mode:'production'output:{filename:'bundle.[contentHash:8].js',path:path.join(distPath)}
})

然后修改package.json中的build命令:

"scripts":{"build":"webpack --config build/webpack.prod.js","devBuild": "webpack --config build/webpack.dev.js",}

生产模式打包:npm run build
开发模式打包:npm run devBuild

2. 启动服务

1)

// webpack.common.js
//首先使用 npm i html-webpack-plugin -D 安装 html-webpack-plugin
// 然后配置入口文件,启动服务后会打包生成html文件
const HtmlWebpackPlugin=require('html-webpack-plugin')
module.exports={plugins:[new HtmlWebpackPlugin({template:path.join(srcPath,'index.html'),filename:'index.html'//打完包以后的文件名称chunks:["index"] //这里的chunks代表的意思是引入的是哪一个入口文件,我引入的就是src下建立的index.js文件})]
}

2)安装 npm i webpack-dev-server -D

// webpack.dev.js 版本4.x
module.exports=merge(webpackCommonConf,{devServer:{port:3000,static:distPath,//根目录open:true,//自动打开浏览器compress:true,//启动压缩//如果需要跨域请求接口proxy:{'/api':{target:'http://localhost:3000'}}}
})
  1. 配置dev命令,在package.json文件中
"script":{"dev":"webpack-dev-server --config build/webpack.dev.js"
}

npm run dev启动服务。

3、处理es6,配置babel

对于现代浏览器而言,有些ES6语法是无法被解析的,因此需要babel将ES6解析ES5,这也解决了浏览器兼容性问题。
1)首先安装babel-loader:

npm i babel-loader -D //我这里是^8.0.6版本的
npm i babel-core -D//babel-core包含了一些babel里面的api
npm i babel-preset-env -D //提供执行环境

2)在根目录新建.babelrc文件

{"presets": ["babel-preset-env"],"plugins": []
}

3)在webpack.common.js中配置babel

module.exports = {
// ...module:{rules:[{test:/\.js$/,loader:['babel-loader'],include:srcPath,exclude:/node_modules/}]}
// ...
}

4、处理样式

一般也是在webpack.common.js中配置,无论在开发模式还是生产模式都需要处理样式。

1)对于css文件
安装:

npm i css-loader -D
npm i style-loader -D

配置如下:

module:{rules:[{test:/\.css$/,loader:['style-loader','css-loader']//执行顺序为从后到前}]
}

2)对于less等预处理器
安装:

npm i less -D
npm i less-loader -D

配置:

module:{rules:[{test:/\.less/,loader:['style-loader','css-loader','less-loader']}]
}

3)postcss-loader可以做兼容浏览器,有些css语法不是所有浏览器都兼容,postcss-loader就可以帮我们做这些事情。
postcss-loader是一个比较大的插件,里面可以再引入一些别的功能,如autoprefixer:

安装 : npm install postcss autoprefixer

在公共配置文件中配置postcss:

{test: /\.css$/,// loader 的执行顺序是:从后往前loader: ['style-loader', 'css-loader', 'postcss-loader'] // 加了 postcss
},

配置autoprefixer,新建postcss.config.js,配置如下代码:

module.exports = {plugins: [require('autoprefixer')]
}

autoprefixer是一个后处理程序,而可以同sass、stylus或less等预处理器共同使用。它适用于普通的css,无需关心你要为哪些浏览器加前缀,只需关注于实现,并使用w3c最新规范。一般配合postcss一起使用

5、处理图片

对于图片的处理一般分为dev和prod环境下的处理,主要原因是图片一般是在根目录下,打包以后希望全部输出到img文件夹里面,而且需要对图片的大小做一些精细化的配置处理。

对图片的使用有这三种:

  • 在html中的src标签中使用
  • 在js中import中使用
  • 在css中使用,比如背景图片

对于第一种,需要安装html-withimg-loader:

npm i html-withimg-loader -D //^0.1.16
module:{rules:[{test:/\.html$/use:'html-withimg-loader'}]
}

对于第二种和第三种情况:安装file-loader

npm i file-loader -D
module:{rules:[{test:/\.(jpg|png|gif)$/,use:'file-loader'}]
}

webpack.prod.js,在这个文件里对图片做一些精细化配置,需要安装url-loader:

npm i url-loader -D
module:{rules:[{test:/\.(png|jpg|gif)$/,use:{loader:'url-loader',options:{limit:1024*5,//小于5kb的图片会被输出为base64格式outputPath:"/img/" //全部输出到img文件夹里面}}}]
}

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

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

相关文章

401 · 排序矩阵中的从小到大第k个数

链接:LintCode 炼码 - ChatGPT!更高效的学习体验! 题解: 九章算法 - 帮助更多程序员找到好工作,硅谷顶尖IT企业工程师实时在线授课为你传授面试技巧 class Solution { public:/*** param matrix: a matrix of intege…

stable diffusion(1): webui的本地部署(windows)

一、前言 是的,现在是202308月份了,网上已经有很多打包好的工具,或者直接进一个web就能用SD的功能,但是我们作为程序员,就应该去躺坑,这样做也是为了能够有更多自主操作的空间。 像其他AI一样&#xff0c…

【C语言技巧】三种多组输入的写法

文章目录 第一种:直接与1判断第二种:与EOF判断第三种:巧用按位取反符号“~”写在最后 在代码的实际运用中,我们经常会遇到需要多组输入的情况,那么今天博主就带大家一起盘点三种常见的多组输入的写法 第一种&#xff1…

Python——调用webdriver.Chrome() 报错

今天运行脚本&#xff0c;报错内容如下&#xff1a; collecting ... login_case.py:None (login_case.py) login_case.py:11: in <module> dr webdriver.Chrome() D:\Program Files (x86)\Python\Python39\Lib\site-packages\selenium\webdriver\chrome\webdriver.p…

【算法题解】52. 分割圆的最少切割次数

这是一道 简单 题 https://leetcode.cn/problems/minimum-cuts-to-divide-a-circle/ 题目 圆内一个 有效切割 &#xff0c;符合以下两个条件之一&#xff1a; 该切割是两个端点在圆上的线段&#xff0c;且该线段经过圆心&#xff0c;即圆的直径。该切割是一端在圆心另一端在圆…

自然语言处理学习笔记(五)————切分算法

目录 1.切分算法 2.完全切分 3.正向最长匹配 4.逆向最长匹配 5.双向最长匹配 6.速度评测 1.切分算法 词典确定后&#xff0c;句子可能含有很多词典中的词语&#xff0c;他们有可能互相重叠&#xff0c;如何切分需要一些规则。常用规则为&#xff1a;正向匹配算法、逆向匹…

torch.device函数

torch.device 是 PyTorch 中用于表示计算设备&#xff08;如CPU或GPU&#xff09;的类。它允许你在代码中指定你希望在哪个设备上执行张量和模型操作&#xff0c;本文主要介绍了 torch.device 函数的用法和功能。 本文主要包含以下内容&#xff1a; 1.创建设备对象2.将张量和模…

关于Godot游戏引擎制作流水灯

先上核心代码 游戏节点 流水灯的通途可以是 1. 装饰 2. 音乐类多媒体程序&#xff08;如FL中TB-303的步进灯&#xff09; FL Studio Transistor Bass

Stephen Wolfram:ChatGPT 的训练

The Training of ChatGPT ChatGPT 的训练 OK, so we’ve now given an outline of how ChatGPT works once it’s set up. But how did it get set up? How were all those 175 billion weights in its neural net determined? Basically they’re the result of very large…

KMP模式匹配算法

一、算法思路&#xff1a; KMP模式匹配算法让主串不发生没必要的回溯&#xff0c;即主串的索引值只做递增操作。如果主串的索引值不发生回溯&#xff0c;那么就需要子串索引值的回溯变化。 子串索引值要以一种怎样的形式就行变化呢&#xff1f;子串索引值的变化方式只和子串自身…

第十二次CCF计算机软件能力认证

第一题&#xff1a;最小差值 给定 n 个数&#xff0c;请找出其中相差&#xff08;差的绝对值&#xff09;最小的两个数&#xff0c;输出它们的差值的绝对值。 输入格式 输入第一行包含一个整数 n。 第二行包含 n 个正整数&#xff0c;相邻整数之间使用一个空格分隔。 输出格式 …

红米电视 ADB 安装 app 报错 failed to authenticate xxx:5555

开启电视开发者模式&#xff0c;允许安装未知来源应用及开启 ADB 调试电脑端下载 adb 工具 点击下载同一局域网的电脑使用 adb 工具连接&#xff08;提前查看电视 IP&#xff09;D:\adb>adb connect 192.168.1.7 * daemon not running; starting now at tcp:5037 * daemon s…

pycharm、idea、golang等JetBrains其他IDE修改行分隔符(换行符)

文章目录 pycharm、idea、golang系列修改行分隔符我应该选择什么换行符JetBrains IDE&#xff0c;默认行分隔符 是跟随系统修改JetBrains IDE&#xff0c;默认行分隔符 pycharm、idea、golang系列修改行分隔符 一般来说,不同的开发环境和项目对换行格式的使用偏好不同: Windo…

算法-快速排序

给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5] 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5] 详细思路直接看我录制的视频吧 算法-快速排序_哔哩哔哩_bilibili class Soluti…

Maven: No compiler is provided in this environment.

在Eclipse中运行Maven项目&#xff0c;报错&#xff1a; No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? 解决方法&#xff1a; Windows > Preferences > Java > Installed JREs > Add > Standard VM,…

基于arcFace+faiss开发构建人脸识别系统

在上一篇博文《基于facenetfaiss开发构建人脸识别系统》中&#xff0c;我们实践了基于facenet和faiss的人脸识别系统开发&#xff0c;基于facenet后续提出来很多新的改进的网络模型&#xff0c;arcFace就是其中一款优秀的网络模型&#xff0c;本文的整体开发实现流程与前文相同…

软件测试缺陷报告

缺陷报告是描述软件缺陷现象和重现步骤地集合。软件缺陷报告Software Bug Report&#xff08;SBR&#xff09;或软件问题报告Software Problem Report&#xff08;SPR&#xff09; 作用&#xff1a;缺陷报告是软件测试人员的工作成果之一&#xff0c;体现软件测试的价值缺陷报…

针对高可靠性和高性能优化的1200V碳化硅沟道MOSFET

目录 标题&#xff1a;1200V SiC Trench-MOSFET Optimized for High Reliability and High Performance摘要信息解释研究了什么文章创新点文章的研究方法文章的结论 标题&#xff1a;1200V SiC Trench-MOSFET Optimized for High Reliability and High Performance 摘要 本文详…

Vue2 第二十一节 Vue UI组件库

移动端常用UI组件 1. Vant https://youzan.github.io/vant 2. Cube UI https://didi.github.io/cube-ui 3. Mint UI http://mint-ui.github.io PC端常用UI组件 1. Element UI https://element.eleme.cn 2. IView UI https://www.iviewui.com 一. Element UI 的引入和使…

SpringBoot项目增加logback日志文件

一、简介 在开发和调试过程中&#xff0c;日志是一项非常重要的工具。它不仅可以帮助我们快速定位和解决问题&#xff0c;还可以记录和监控系统的运行状态。Spring Boot默认提供了一套简单易用且功能强大的日志框架logback&#xff0c;本文将介绍如何在Spring Boot项目中配置和…