webpack这一篇章就够了
创始人
2024-06-03 11:44:40
0

什么是webpack?

个人理解的是webpack就是一个“处理兼容性”、“代码压缩”工具

可参考博客:webpack基础概念

webpack基础打包配置

好用的东西,往往都需要环境变量的搭配

1.安装Nood.js至本地(网上教程一大把)

nood.js安装成功后终端输入npm -v,如果返回版本号即表示安装成功

2.新建自己的项目文件

 这里以本人的项目文件为例

  • 项目文件为demo
  • demo->dist用于存放webpack打包好的文件
  • demo->src为自己的源码文件夹,里面存放着我们的html、css、js

3.初始化web包

终端输入 npm init -y注意:终端必须在项目文件夹根目录打开,在vs-code里面的文件列表找到自己的项目文件右击点击“在集成终端中打开”

初始化成功项目文件夹中会出现一个package.json文件

4.安装依赖webpack与webpack-cli

终端输入:npm i webpack@5.42.1 webpack-cli@4.10.0 -D

安装依赖时的参数:

  • S表示将文件包放入dependencies节点下表示此文件包会被一直用到,他是--save的简写

  • D表示将文件包放入devDependencies节点表示此文件包只会在开发阶 段用到,他是--save-dev的简写

5.在项目文件夹根目录创建webpack.config.js文件夹,并配置一下配置,它是webpack的配置文件

//demo->webpack.config.js
module.exports={mode:'development'
}

6.配置命令

//demo->package.json下面的script字段(如果熟悉命令该配置阶段可以省略)"dev":"webpack"              //打包命令
"dev-serve":"webpack serve"  //实时打包命令

7.运行配置命令 

终端输入:npm run dev 或 npx webpack

此时在我们的dist文件夹下就会生成打包后的文件 

webpack其他配置

1.打包模式

//demo->webpack.config.js
module.exports = { mode: 'development'
}

mode有两个值:development:开发阶段[运行速度快] \ production:上线阶段[文件体积小]
也就是说如果在开发阶段,那么mode='development,如果在上线阶段,mode='production

2.entry与output

entry与output为打包入口与打包出口,webpack默认打包路径为src>index.js,默认输出路径为dist>main.js,这些可以通过我们的entry与output修改

//demo->webpack.config.js
const path=require('path')//先引入nood里面的path
module.exports = { entry:path.join(__dirname,'./src/index1.js'),//打包入口output:{path:path.join(__dirname,'./dist'),//输出文件filename:'index1.js'//输出的文件名}//__dirname表示当前目录,第二个参数为对应路径
}

3.webpack-dev-server插件

webpack-dev-server插件可以实时打包,因为我们每更改一次源码都要运行npx webpack进行重新打包

1.终端输入:npm install webpack-dev-server@3.11.2 -D2.将源文件夹下面的首页面的script标签的src属性改为根目录下生成的文件(比如我们的出口为app.js,则src='/app.js')3.运行命令(打包演练我们配置的命令)终端输入:npm run dev-serve 或 npx webpack serve4.结束实时打包终端按 Ctrl+c 两次

此时终端光标会在不停闪烁等待我们对源文件的更改,我们每Ctrl+s一次都会将最新的代码保存在内存中,生成的文件也保存在内存中,而并非我们的物理磁盘,所以要查看最新的代码效果需要访问内存中的首页

个人认为“webpack-dev-server插件虽然可以实时打包,但是它只是一个预览,其打包产生的文件存放在虚拟内存中的根目录下,而并非物理磁盘,预览效果也只能从虚拟内存进去才能看见,其功能相当于调试,通常调试完还需要我们重新打包一次新的代码才会出现在我们的物理磁盘上”

4.html-webpack-plugin插件

html-webpack-plugin插件, 让webpack打包后生成html文件并自动引入打包后的js

1.终端输入:npm install html-webpack-plugin@5.3.2 -D2.在webpack.config.js中配置如下const HtmlWebpackPlugin = require('html-webpack-plugin')//导入 HTML 插件,得到一个构造函数module.exports = {plugins: [new HtmlWebpackPlugin({template: './src/html/index.html',//指定html模板filename: 'index.html'            //指定生成的html文件名})]}3.运行npx webpack 可以发现dist下面不仅有js文件,还有html文件

在实际开发过程中,webpack默认只能打包处理以.js 后缀名结尾的模块。其他非.js 后缀名结尾的模:webpack默认处理不了,需要调用loader 加载器才可以正常打包,否则会报错!

5.css-loader

处理我们的css样式,直接将样式引入js入口打包,这样网页只需要引入一个js入口即可

1.终端输入:npm install style-loader@3.0.0 css-loader@5.2.6 -D2.在webpack.config.js下配置module.exports = {module:{rules:[{test:/\.css$/,use:['style-loader','css-loader']}//test表示对应的文件类型,use表示文件对应的loader]}}3.在入口js文件中使用es6语法引入css模块:import 'css文件路径'4.运行命令:npx webpack 查看首页是否有css样式效果

6.less-loader

1.终端输入:npm i less-loader@10.0.1 less@4.1.1 -D2.在webpack.config.js下配置module.exports = {module:{rules:[{test:/\.less$/,use:['style-loader','css-loader','less-loader']}]//test表示对应的文件类型,use表示文件对应的loader}}3.在入口js文件中使用es6语法引入less模块:import 'less文件路径'4.输入命令 npx webpack 查看效果

7.url-loader

网页中每请求一次图片都会影响网页的性能,url-loader类似于base64转码软件,可以将图片地址转换为base64字符串,将一些较小的图片直接转换为base64字符串,这样可以减少请求次数,提高网页性能

1.终端输入:npm i url-loader@4.1.1 file-loader@6.2.0 -D2.在webpack.config.js下配置如下module.exports = {module:{rules:[{test:/\.jpg|png|gif$/,use:['url-loader?limit=22229']}]//test表示对应的文件类型,use表示文件对应的loader,limit表示临界值}}3.js入口文件导入图片 import 变量(log) from "图片地址"4.动态给img的src属性赋值 img(id/class).src=保存图片地址的变量(log)

8.babel-loader

webpack只能处理一部分js高级的语法,对于那些webpack无法处理的高级语法,需要借助于Babel-loader

1.终端输入:npm i babel-loader@6.2.2 @babel/core@7.14.6 @babel/plugin-proposal-decorators@7.14.5 -D    2.在webpack.con.fig下配置如下module.exports = {module:{rules:[{test:/\.js$/,use:['babel-loader'],exclude:/node_modules/}]//test表示对应的文件类型,use表示文件对应的loader,exclude表示排除项}} 3.新建babel.config.js,并配置如下module.exports={plugin:[["@babel/plugin-proposal-decorators",{legacy:true}]]}

在配置webpack.config.js是会多出一个exclude,它表示排除项,排除第三方包的高级语法

相关内容

热门资讯

华谊公司旗下艺人有哪些优秀艺人... 华谊公司旗下艺人有哪些优秀艺人?华谊兄弟旗下的艺人多达四十多人,但有名的不是很多华谊旗下有很多很不错...
为何18岁男子脑死亡火化前妈妈... 为何18岁男子脑死亡火化前妈妈大喊别离开下一秒突然复活?我觉得应该是哪里出现了纰漏,这名男子并没有死...
关于宇宙的科普电影 关于宇宙的科普电影银河系漫游指南 绝对是是吧,《旅行到宇宙边缘》旅行到宇宙边缘
北京工商大学会计专业考研科目都... 北京工商大学会计专业考研科目都有什么?专业复习用书都用什么?初始考802管理学指定参考书是周三多《管...
作者为什么要写丁香结? 作者为什么要写丁香结?“丁香结”的本义是小小的花苞圆圆的,鼓鼓的,恰如衣襟上的盘花扣。象征意义是人生...
原核生物和真核生物的区别 原核生物和真核生物的区别真核有复杂的内膜系统(细胞器),原核生物无真核有细胞核,原核无成型的细胞核基...
怎样不吃药摆脱抑郁症 怎样不吃药摆脱抑郁症以前靠心理治疗,但是后面有一段时期加重了。但是药的副作用太大,可以不吃药吗?想开...
诺曼底登陆的作用和对二战的意义 诺曼底登陆的作用和对二战的意义改变了二战的战局,加快盟军胜利的到来。
怎么样才能学习学得“细”呢? 怎么样才能学习学得“细”呢?细是注意细节地方,平时做题多思考,尽量全面一些,不要学习时觉的理解了就完...
去年几滴相思水,化做树下种花泪... 去年几滴相思水,化做树下种花泪,谁家少年踏春来,折下枝头红玫瑰!这首诗的意思是什么?暗示爱意。指思念...
小花仙找主人! 小花仙找主人!我只要你帮我照顾花朵,每月一个礼物可以吗?我有额外条件:一个星期星期一,三,五一定要上...
手机在信号不好的时候 对方打不... 手机在信号不好的时候 对方打不进来 能设置来电转移吗rt 是否需要开通什么业务 怎么办理不需要去移...
与看透生死或看透人生有关的歌曲... 与看透生死或看透人生有关的歌曲 比如悟我觉得三国演义主题曲有一种世态苍爽的感觉 ,得意的笑 潇洒走...
面临就业,该如何帮助女朋友度过... 面临就业,该如何帮助女朋友度过心里难关?不要说话,这种时候,什么语言都是多余和反作用的,要求对方走出...
八仙 全传 八仙 全传网上的视频有2个版本..一个是有60集.一个有40集..,你直接去查大结局就好了.没有这回...
正在追求一个女孩子,我告白了,... 正在追求一个女孩子,我告白了,但是。女生优先进,请求各位好心人,我真得很爱这个女孩他对你是在观察期不...
什么是TF卡? 什么是TF卡?什么是TF卡,还有SD卡??SD卡(TF卡)即是手机储存的扩展卡,主要用来扩展手机的储...
杨幂许凯路透,两人将合作哪部剧... 杨幂许凯路透,两人将合作哪部剧呢?路透当中的照片是杨幂和许凯两人为主演所演的《爱的二八定律》,非常的...
中国十大产业调查研究公司有哪些... 中国十大产业调查研究公司有哪些?根据自己的经验,以下信息有点价值,仅供参考:
有心人是什么意思 有心人是什么意思意中人中意人有心人是一个汉语词汇,解释为对某个事物或人等等,有一种感觉。例句:想不到...