Webpack基础知识学习

vue全家桶

vue技术栈:vue + vue-router + vuex + vue-cli + Es6 + webpack + UI + node

Webpack

在vue-cli中已经配置的比较好。

webpack是JS应用程序的打包器,把项目进行打包处理。

webpack功能:
  1. 代码转换  ts==》js   scss,less==》css
  2. 文件优化  压缩 合并
  3. 代码校验  检测代码是否符合某些规范
  4. 模块合并  把多个可以合并的模块合并到一起
  5. 自动刷新  配置一个开发服务器(dev server)
  6. 代码的自动发布

webpack学习

  1. 新建一个空白文件夹
  2. 在新建文件下打开cmd,初始化一个配置文件。npm init -y
  3. npm i webpack webpack-cli --save-dev(安装webpackwebpack-cli)

注意:webpack默认遵循commonjs规范:

//导出
module.exports = 'xxx'
//导入
require()

如果webpack遵循Es6中的规范:

//导出
export xx   or    export default xx
//导入
import xx

webpack4.x中可以实现零配置打包

如何执行webpack命令

node中带有npx这个指令,安装完成node之后,就可以使用这个指令。

npx webpack可以执行webpack的命令。(这是一个打包命令)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DG5QGS0k-1579444064203)(BBAE19D92B194BF19151FDD6CC2A0712)]

执行完成npx webpack打包命令后,会在本地目录下生成一个dist文件夹,它里面有一个main.js,是压缩后的一个文件,它把所有代码都压缩在了一行。

打包前:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1IDCH7ie-1579444064205)(DED5571DC72E457A95E74A673AD7AE5D)]

打包后:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T0W5zfqi-1579444064206)(62D4BD1171874B3990AC37BADACA03B7)]

webpack的一个最基本的功能就是:把高级语法转化成浏览器能识别的低级语法。

零配置打包

使用webpack进行打包时有两种模式:开发模式,生产模式。

打包命令:npx webpack

指定打包模式: npx webpack --mode development(此时指定的是开发模式。还有生产模式,二者的区别是:开发模式不会压缩代码,而生产模式会把所有代码压缩成一行)

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AgbhXlza-1579444064207)(D7E64CEE8E2E48F28F8F0814FFAD46B7)]](https://img-blog.csdnimg.cn/20200119223146220.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0w4NjM2ODMzMDU=,size_16,color_FFFFFF,t_70

这是最简单的打包命令。

当然每次输入 npx webpack --mode development/production这个命令比较繁琐,我们可以在package.json中去配置webpack命令:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dcNeA6Dt-1579444064208)(48D54925B21A4FB0A220D5BD28F46D36)]

我们还可以这样配置:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qRaAA2jH-1579444064209)(2D8259B87C724AE2879D8063CE65AB2F)]

以上都是零配置打包命令

如何配置自己的webpack打包命令

首先我们需要创建一个webpack.config.js文件。

注意:配置自己的webpack,要遵循common.js规范

默认导出一个配置对象。,如下所示:

const path = require('path')
module.exports = {
    //入口  一定要是绝对路径
    entry:path.resolve(__dirname,'./src/index.js')
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2JXrjAdc-1579444064210)(66074820E0664E71ABE95F707595C88D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Ha8fXnH-1579444064211)(355FE85A480C4ABEBED08C96CAB07317)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hOmGUpjw-1579444064212)(B2E781DD4D364B088B5FB4D1725ADB70)]

我们还可以直接在webpack.config.js中配置我们的打包模式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jows3kwH-1579444064213)(37D0E44C5F064705B8062B74D19F4E3D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YS2J7Uhi-1579444064214)(BFCF5E274C66480B8AF5F4BE91BC1136)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oU86gX50-1579444064215)(597C02284BE448F48D9B84426921E57F)]

以上是webpack最基础的几项配置mode(打包模式)、入口、出口

有一些人在package.json中这样配置:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2OM5NzRa-1579444064215)(A87FC74069B241C79DA4243032FFB296)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C7dv8Pnb-1579444064215)(601AD63E35E9424C99CBFD86C8972D86)]

一般在配置webpack时,有生成模式和开发模式:

package.json中:

"scripts": {
    "dev": "webpack --env.development",
    "build": "webpack --env.production"
}
// 运行命令 npm run dev/build  会将命令先传入webpack.config.json中

webpack.config.json中进行接收:

module.exports = (env)=> {
    console.log(env)   //{development:true}  {production:true}
}
精细化配置webpack

一开始,我们只有webpack.config.js这一个webpack配置文件。

现在我们为了精细化和模块化设置webpack,新建一个build目录:

1. webpack.base.js   //生产环境和开发环境都有的东西
2. webpack.dev.js   //开发环境
3. webpack.production.js   //生产环境

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dRBNfqSF-1579444064216)(AB0EF66B97D84EA88CED3C4670C08BFE)]

但是,在执行打包命令时,默认会先读取webpack.config.js文件,但是现在我们已经精细化设置了,怎么办?如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2BftHdmB-1579444064216)(BE4D6BF1717D45D4A9351ACEC72A0A18)]

注意:webpack-merge用来合并webpack模块的。
npm i webpack-merge --save-dev

精细化基础配置
webpack.base.js

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1p9twWVe-1579444064216)(431CED8B36C943BBB14EFEF3DFC788F6)]

webpack.dev.js

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AOzZLcmC-1579444064217)(95B11FA6A9B14F97838B8FF8A7B336F3)]

webpack.production.js

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s4TTG8Q4-1579444064217)(CDBC722495BF458E8D490CF32EED002C)]

最后,以生产环境为例,运行命令npm run dev进行打包:测试如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y59EoZmY-1579444064218)(2A4123D402114364B528BCE784621890)]

测试成功!

下面我们接着去配置:

注意:vue中用的就是这种方法。

通过webpack-dev-server来配置(把项目打包到内存中,并不会在硬盘上产生真实的物理文件)。(我们通过npm run server运行vue-cli时,实际上是运行的一个服务器)。我们先通过
npm install webpack-dev-server --save-dev来安装它(然后配置前端开发服务器)。

此时,我们回到package.json这个文件中,我们此时不能再使用原来的dev和build进行打包了,而是要通过webpack-dev-server来进行打包。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eIsWVBOY-1579444064218)(71E45BDAAFE24A99ABEEC8ECBB053CE6)]

此时,对package.json文件进行更改:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L0ZlRBGK-1579444064219)(936573EAA0664A50B83DE7DA34D8EC2E)]

运行命令:npm run build
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-snokRKZA-1579444064219)(F9876B9E8E7342C398C19C3040631EEC)]](https://img-blog.csdnimg.cn/20200119224132985.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0w4NjM2ODMzMDU=,size_16,color_FFFFFF,t_70

运行命令:npm run dev:build
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s8Jxsfnq-1579444064220)(A5349CC13C1D454885C41E88A1359930)]

运行命令:npm run dev
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UWk5cckp-1579444064221)(1BFD0DDAE91342A186535ECAD1DA409F)]

接着,我们配置开发环境 在webpack.dev.js文件中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M8tM4Sxz-1579444064222)(5ECC988592314A098EDAF7AD4ACAE3A9)]

运行命令:npm run dev
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d4aQeXNv-1579444064222)(6EE97DE678194B81B9544A1A97DBF526)]

此时内存中有一个bundle.js文件,在浏览器中,进行查看:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PKr6vtmU-1579444064223)(407A75A8E3B1464C9571A10404B3DF73)]

此时我们在dist目录下新建一个index.html文件:

然后打开它,报错。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-azfbBBMn-1579444064223)(7B80CE7ADF594FCCA659D303DB697522)]

正确的打开方式:因为我们的bundle.js(在内存中,物理硬盘dist目录下看不到)已经托管到dist上,在dist目录下又创建了一个index.html,又因为我们创建的是一个index.html文件,index.html可以省略不写,所以我们直接可以这样打开:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3DCcCens-1579444064224)(48E4EA68670049D6818934DA08571826)]

成功!!

下面,我们不使用vue-cli,使用vue自己来写一个简单的脚手架。

第一步:删除dist下的index.html文件。

第二步:新建一个public文件目录,并在public目录下新建一个index.html文件。

第三步:需要根据public目录下的index.html文件,在内存中去生成一个index.html,然后内存中生成的index.html把上面webpack配置好的bundle.js引进来。(vue-cli就是这样做的)

这时,我们需要安装一个插件。

安装命令:npm i html-webpack-plugin --save-dev

安装完成后,在webpack.base.js中引入这个插件。

如下所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ChpNooS9-1579444064224)(75D6CC0CFB464BAD8ADF862FDEC9BE91)]

运行命令:npm run build会在真实物理磁盘中根据模板,生成一个index.html文件。此时查看dist目录:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iuinnlUH-1579444064225)(4A5760C12D414245BD56327E44736498)]

且在dist目录下的index.html中,已经自动引入bundle.js文件。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3hnCRthf-1579444064225)(992F3429C8F14B4CA53715B9EF8082E8)]。

运行命令:npm run dev在内存中根据模板生成一个index.html文件,此时查看dist目录:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hO7BGtdy-1579444064226)(148FFDA7F21D4427856F18489404D8F6)]

此时只有一个bundle.js,生成的index.html在内存中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ao02ZJBM-1579444064226)(F5B8EE17D9BB4D2AAC7E57CFF42321CE)]

此时,在浏览器中输入localhost:3000

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UYva6kdO-1579444064227)(1F0E33958E6C429F8DB14158891E1B64)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FXA4hI53-1579444064227)(8EE47B70FF7B446E94C36B24FE77449D)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VNIalYJo-1579444064228)(3076F898E35242D29D9DC2DB554B40BB)]

测试成功!

plugins这个数组里,可以配置很多东西:

例如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zrtAhQbZ-1579444064228)(A539C85862AE41F4BE3780C87EE48290)]

运行npm run build在物理内存中生成一个html文件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1pr1wpgj-1579444064228)(4BC46D77A2D64C0AA7C7CD8859877E52)]

注意,如果我们不指定filename,生成的文件名称和模板的名称一样。

测试成功!

当然plugins中可以配很多东西。minify中也可以配置很多东西。
例如:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BKwUgDyR-1579444064229)(E64378B210834EFB8AF702156A68A2DD)]](https://img-blog.csdnimg.cn/20200119224806597.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0w4NjM2ODMzMDU=,size_16,color_FFFFFF,t_70

运行npm run build命令如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Dcu5aO6-1579444064229)(1746F549E5174409905C8F61E9063C4B)]](https://img-blog.csdnimg.cn/20200119224840292.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0w4NjM2ODMzMDU=,size_16,color_FFFFFF,t_70

在这样一种场景下:在dist目录下,有一个a.js和一个b.js,打包时,没有用到这两个模块,我们要清除这种无用的模块,这时,我们需要安装一个插件:

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h1FSkRZy-1579444064229)(61117BD1213840BA87C07C77C00DF63F)]](https://img-blog.csdnimg.cn/20200119224906207.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0w4NjM2ODMzMDU=,size_16,color_FFFFFF,t_70

安装命令:npm i clean-webpack-plugin --save-dev 清除无用的模块。

安装完成后,在webpack.base.js先引入这个模块,然后,在plugins这个数组中,进行配置。

配置完成后,运行命令npm run build命令:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CSLnMTvm-1579444064230)(861976BCA5214E3BB082BB1C6659B1A2)]

当然,清除模块中,还可以配置其他东西,在这里我们就不一一介绍了。

plugins中可以配置许多其他插件,要具体情况,具体分析。

当然,在一个项目中,肯定少不了css文件。

src目录下,新建一个index.css文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xXhswFjn-1579444064230)(00835FB6585C4DD591060325BC4A1350)]

我们如何引入css文件?

测试一下:我们在src目录下的index.js中引入这个css文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f8YZJ4Sp-1579444064231)(7BF516FD9C854AEBB64BBC0031B6A30E)]

此时,运行打包命令:npm run build。报错:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BpQBsHF7-1579444064231)(56166148F5054677B8F25E737BEF5388)]

默认情况下,webpack并不能处理css文件,靠Loader来处理。

css需要两个loader来处理:css-loader style-loader

css-loader会解析css请求 style-loader会将解析css变成style标签插入到页面中。

安装loader命令: npm i css-loader style-loader --save-dev

然后,在webpack.base.js中配置loader
loader需要配置在module模块中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Te7FEmPd-1579444064232)(1F36E9EE59A34020AFD4589ABF482469)]

运行npm run build命令,测试结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PZqZ6gm3-1579444064232)(F275A6F8A9D64990938D15E98BE344BC)]

测试成功!

但是,我们在项目中,我们可能要使用css预编译。

//使用sass
.scss   node-sass  sass-loader   //安装这两个loader

//使用less
.less   less    less-loader    //安装这两个loader

//使用stylus
.stylus   stylus   stylus-loader    //安装这两个loader

这里以sass为例:

安装loader命令:npm i node-sass sass-loader --save-dev

src目录下,新建一个a.scss文件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0LmUKSNt-1579444064232)(85AF4BA6A60F4CED83D3B1BBF6D4EDAF)]

index.js中引入:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L2Cplku3-1579444064233)(89B461413DA745F5BCDFEDE20F7DBAEC)]

webpack.base.jsmodule模块中,进行配置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QKmWb0Oc-1579444064233)(A0DFE8B38D054E2D902505E94F348A95)]

运行npm run build命令:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y5KYT80a-1579444064234)(86891CEA95C74B668564EDA016D391B9)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sGvSZGf3-1579444064234)(07D4C3D730154E5B9B85A747E46172DC)]

测试成功!

注意:如果在一个css文件中使用@importcss-loader是不认识@import语法的,会解析不成功。如果想要让css-loader去认识这种语法,我们可以通过配置来实现。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7hXxM6LB-1579444064234)(3DB82CB7734E423D86EC1592FB7727CD)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a1NofqK4-1579444064235)(1F2741B7D3574F809A40B14004DD4681)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sjQ6dsAp-1579444064235)(3B9470C5BB6345EB9B57B2636C9AAA6C)]

如下所示进行配置:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eb5eWyoq-1579444064235)(C5093591B914465CAC18A27C56A1DAA6)]

运行命令:npm run dev

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s8sl1fKf-1579444064236)(6D8C942E31FB4AE7B451EAF2E2F88E7A)]

测试成功!!

css3中有一些属性,需要加上浏览器前缀,目的就是使浏览器兼容。简而言之,就是在打包过程中,一行代码生成多份,并自动加上浏览器前缀。

要实现上述功能,我们需在安装一个插件。

命令:npm i postcss-loader --save-dev

然后,在最外层目录下新建一个postcss.config.js配置文件。

此时,我们还需要再装一个模块:npm i autoprefixer --save-dev

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vV8LKo4h-1579444064236)(7DBE374EE98943398FD749F56B8DCE51)]

此时,还没有结束,我们再创建一个.browserslistrc文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7cDiQFlV-1579444064237)(699356A2188E4BCFB2B8212D662515A7)]

当前,css还在index.html中。下一步,我们要告诉Webpack,把css专门打包成一个css文件,并在index.html文件中去引入它。(注意,它只适合在生产环境下使用)

我们还是要依赖插件。

安装命令:npm install --save-dev mini-css-extract-plugin

webpack.base.js中引入:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1YwEaelc-1579444064237)(1453F2812D2D477E92BF4D570478390A)]

然后在plugins这个数组中,进行配置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ri4lUM4m-1579444064237)(B56A2DE4106046C7B65F0F0E92D68546)]

在然后,在module这个模块中进行配置:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wEsdxX36-1579444064238)(0A760C3DF4EF4988A6C552AA6935B05E)]

运行命令npm run build(生产环境)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Xn6AW1p-1579444064238)(F705710F951641C89283F576B53DC217)]

测试成功!!

但是,我们只有在生产环境才 new MiniCssExtractPlugin()这个插件,所以,我们要对上面的代码进行优化:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SEWKKvm2-1579444064239)(F6F1E28088154B04913216BE58B0349E)]

我们在生产环境下,也要对css文件进行压缩,使其成为一行。

这时,我们需要一个插件:

安装命令:npm install --save-dev optimize-css-assets-webpack-plugin

安装完成后,在webpack.production.js中,进行配置:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GxgRb90o-1579444064239)(47A74F31CAD24FE2892D042375419C9F)]

运行命令:npm run build

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q0CYhFc6-1579444064239)(E7C496BBAFEC4C86ADDBCCF511E38702)]

但是,此时css被压缩了,但bundle.js又不能压缩了,我们还需要继续安装插件进行配置。

安装命令: npm install terser-webpack-plugin --save-dev

继续在webpack.production.js文件中进行配置。

运行命令:npm run build

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dIOE1bau-1579444064240)(C7C247DF70404375BC37491D6AB15ADE)]

测试成功!!

webpack对图片的压缩

在入口文件index.js文件中,引入一张图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vEpxFAV7-1579444064240)(E651E8BC77D9498C8AA7C77DC857B474)]

默认情况下,webpack不认识图片,需要loader,这时我们需要安装一个loader,去认识图片。

file-loader url-loader
file-loader是让webpack打包图片
url-loader可以让图片转换base64,也可以让webpack打包图片,它只是比file-loader多了一个图片转换的功能,其他的都一样。

安装命令: npm i file-loader --save-dev
npm i url-loader --save-dev

webpack.base.js文件中的module模块中进行配置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hXKM96Zk-1579444064240)(715B9D68BA814EFF8B7E93AAD4CDEA85)]

执行命令:npm run dev

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tLvbFjy4-1579444064241)(9F6AF514F58A4F58A53EE59113F37F84)]

运行命令npm run build查看dist目录如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lJsJNQ7Q-1579444064241)(939A29ABD3974C46B77ABB6B1CFA085F)]

如果一个图片比较小,把这个图片转化成base64,本质就是把一张图片转成字符串,好处就是避免二次请求,一般会把一些小图标转换成base64

如下所示:

//转换前:
<img src='./1.png'/>
//转换后:
<img src=sfjisogonsdgoidg />

//好处是:
//避免二次请求

此时,重新修改webpack.base.jsmodule模块的配置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g8T9eGUA-1579444064242)(BD619ABF42114B00B2982E6FB584A7AD)]

运行命令:npm run build

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-06vJMhTJ-1579444064242)(CA75CB632C2E466E86A01DC25050B183)]

调节limit的范围大小,再次运行运行命令npm run build

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OlOURgg0-1579444064242)(7EFCA1CE06FD4F649A0DB0CD2EFF4D3E)]

注意:如果我们不配置limit的话,它有一个默认范围,100k以下才会被转成base64

此时,我们的url-loader还可以进行配置。如下所示:

图片转换成base64位后指定图片的名称:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WkKcJ8Lm-1579444064243)(79E5562878D24B7FAD3A4C800D755520)]

运行命令:npm run dev

如果我们在自己的项目中,用到一些字体或图标,用file-loader这个loader进行配置。

继续在webpack.base.js中的module模块中进行配置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2fsF5iIh-1579444064243)(8A0B167271CD4ABAA523394183412874)]

小总结:webpack可以配置哪些东西?
  1. 入口
  2. 出口
  3. 配置csssassless图片loadermodule中进行配置。module配置各种各样的loader
  4. webpack中没有的功能,我们需要配置pluginsplugins中配置一些常见的插件。

webpack默认情况下,不支持高级的js语法。它不认识css、图片、字体,只认识比较低级的语法,想让它认识,靠的就是一些loader

但是,高级js语法,靠的是babel。它是将js高级语法编译成js低级语法的编译器。

Babel官方的定义是: Babel是一个javascript编译器

需要安装这几个东西:@babel/core@babel/preset-envbabel-loader

安装命令: npm i @babel/core @babel/preset-env babel-loader --save-dev

此时,在index.js中输入一个console.log('我是一只快乐的唐老鸭')

运行命令:npm run dev 在浏览器中输入localhost:3000

直接打印!!

然后,在index.js中输入一个箭头函数:

接着,我们在webpack.base.js中的module中去配置这个loader

我们还要去配置一个预设。preset-env

创建一个预设文件。这个预设文件的名字一定是.babelrc

把哪个阶段的(例如:Es7、ES8、Es6)高级语法,转换为低级语法,就叫预设

运行命令:npm run dev:build

查看dist目录下的bundle.js文件,测试成功!

babel官网中有许多预设、插件、工具,具体还要去官网上去细看。
以上就是一些webpack的一些基本配置,不足之处,请多多指教。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习webpack是为了掌握前端代码打包工具的使用。随着前端工程化的发展,webpack已经成为了前端开发中最常用的打包工具之一。学习webpack可以帮助我们对项目的模块化管理、代码压缩与优化、资源加载等方面进行更加灵活和高效的处理。 这篇文章主要介绍了webpack基础知识和使用方法。首先,它解释了webpack的基本概念,如入口和出口文件、loader和plugin等。然后,它详细介绍了如何配置webpack的各个参数和插件,包括如何使用Babel处理ES6语法,如何使用Less或Sass处理CSS,如何使用图片压缩插件等。 接着,文章讲解了webpack的打包原理和优化技巧。它介绍了webpack的模块化加载机制,以及如何使用Code Splitting和Dynamic Import等功能来提高页面加载速度。同时,它还提到了如何使用webpack进行代码分割和缓存优化,以及如何使用Tree Shaking和代码压缩插件来减小项目的体积。 最后,文章介绍了webpack的常见问题和解决方法。它列举了一些常见的错误和警告信息,并提供了相应的解决方案。此外,它还提供了一些常用的webpack插件和工具的推荐,帮助我们更好地进行前端开发。 总的来说,这篇文章提供了一个很好的入门教程,可以帮助我们快速掌握webpack的基本概念和使用方法。但是,要想在实际项目中灵活应用webpack,还需要深入学习官方文档和相关资料,并结合实际项目进行实践。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值