webpack 我们一起入门吧

作为一个webpack小白的我,最近也开始学习了,但是苦于不知道怎么学,最近看了一些讲解webpack的视频还是觉得挺不错的,最起码对于刚入门的我来说还是觉得学到了不少,下面是最近看视频和文章学习到的一些内容,有问题请多指教哦。

1. webpack作用

webpack的核心功能

打包。

什么是打包

简而言之打包就是将多个文件合并到一个js文件中,也就是说开发完成后合并的过程就是打包。

为什么使用webpack

我们在开发时在html页面都是通过手动引入我们需要的多个文件,如果打包成一个文件,会减少http请求数,能让我们的页面更快的加载和显示。而且webpack还有很多其他的功能,例如开启本地服务器,边写代码边更新,压缩等功能。总之就是给我们带来了很多便利的功能。

2.webpack的常用术语解释

Module

模块,分割的代码单元,webpack 中的模块可以是JS,CSS,LESS,TS,JSX等静态文件,可以说我们手写的一个个的文件都是module,他们是webpack处理文件的单位。

bundle

bundle (输出束),许多不同的模块生成,可以理解成最终的输出文件。

chunk

chunk就是webpack根据文件中的引用关系生成chunk文件。

大概可以理解为:我们手写的文件是module,webpack针对文件中引用处理后的文件是chunk,最终生成的输出文件是bundle。

3 webpack的5个核心概念

入口(entry)

Entry(入口),指示 webpack 应该使用哪个模块(module)作为入口开始打包,并且建立其内部依赖图。入口可以是单入口也可以是多入口。

输出(output)

output指示多个文件合并成一个文件(bundle)以后在哪里输出,怎么命名。

loader

webpack 只能理解 JavaScript 和 JSON 文件,这是 webpack 开箱可用的自带能力。loader 让 webpack 能够去处理其他类型的文件,并将它们转换为有效 模块,以供应用程序使用,以及被添加到依赖图中。

loader的使用步骤是1.下载,2.使用

插件(plugin)

plugin用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。包括:打包优化,资源管理,注入环境变量。

plugin的使用步骤是1.下载,2.引入,3.使用

模式(mode)

mode有development(开发模式),production(生产模式),分别提供开发者调试的环境和代码优化上线的环境。

4 webpack初始化

1. 生成package.json

首先创建文件夹webpack-demo文件夹,在webpack-demo目录下执行npm init -y ,生成package.json配置文件

image.png

2. 安装webpack webpack-cli

执行npm install webpack webpack-cli –save-dev,执行成功后生成了node-modules文件夹

注:命令行中-g -D -S的区别

-g –global的简写,对模块进行全局安装,-g安装的模块是这台电脑的项目都能用
-D –save-dev 对模块进行局部安装,局部的意思是只针对当前项目,是开发环境用到,生产环境用不到,模块写入到package.json的devDependencies 对象中。

devDependencies对象,是我们开发的时候需要用到的一些包,只用于开发阶段,真正打包上线的时候并不需要这些包,因为这些工具只是你用来打包代码的,是用来识别特定文件以及代码,帮助我们生产最终文件的。

模块安装到项目文件夹下的node_modules文件夹下

-S –save的简写,对模块进行全局安装,不止用于开发环境,也用于生产环境,模块写入到package.json的dependencies 对象中。

dependencies对象,这个与devDependencies不同,是需要发布到生产环境中的,就比如你要跑一个基于vue的项目,所以需要vue.js来支持,vue.js文件就需要跟随项目到最终的生产环境。npm i vue -S即可将Vue模块安装到项目的依赖中,并一同发布到生产环境。

模块安装到项目文件夹下的node_modules文件夹下

3. 创建配置文件

在根目录下创建webpack.config.js

使用该配置文件时执行webpack 命令即可执行打包,但是有个疑问就是配置文件一定要是这个吗,其实不是的,例如我想要使用xxx.js作为配置文件呢?我们可以通过运行命令webpack –config xxx.js来指定配置文件。

5 webpack开发环境配置

开发环境配置需要设置配置文件 mode:'development'

1. 打包css

我们知道webpack只能理解js和json文件,无法直接对css打包,这个时候就需要借助css-loader,css-loader是用来解析css,把css加载到js中。

  • 编写文件

image.png

image.png

  • 安装css-loader

npm i css-laoder -D

  • 配置css-loader

image.png

  • 结果

可以看到index.css已经被引入

image.png

2. 打包less

首先less.css要被less-loader加载,转化为css,然后再被css-loader加载到js中

  • 编写文件

image.png

image.png

  • 安装 less less-loader css-loader

less-loader安装时需要同时安装less
npm i less-loader less css-loader -D

  • 配置less-loader css-loader

image.png

  • 结果

执行了webpack后报错了,报错内容如下

image.png
原因是less-loader安装的版本过高
解决办法是:1.npm uninstall less-loader 2.npm install less-loader@5.0.0

image.png
less打包成功。

3. 打包html

打包html需要用到html-webpack-plugin,默认会创建一个空的 HTML,自动引入打包输出的所有资源(JS/CSS),我们也可以自己创建html文件,不需要再html引入文件,使用这个插件后会自动引入

  • 编写文件

image.png

image.png

image.png

  • 下载plugin包

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

  • 配置文件

image.png

  • 结果

执行结果出错,还是因为html-webpack-plugin版本过高,解决办法1.npm uninstall html-webpack-plugin,2.npm install i html-webpack-plugin@4.4.1 -D

image.png
最终结果

image.png

image.png

4. 展示css效果

通过以上步骤mian.js已经被引入到html,但是实际上css并没有生效,也就是说html的样式并没有被改变,因为css其实并没有被应用到html中,这个时候就需要用到style-loader了。style-loader的作用是将css-loader解析的内容挂载到style标签下,并且将style标签加入到html文档中。

  • 编写文件

同上

  • 下载style-loader

npm i style-loader -D

  • 配置文件

image.png

  • 结果

image.png

image.png
可以看到样式已生效。

4. 打包图片资源

图片资源可以在样式中引用,比如说背景图片,也可以直接在html中使用,file-loader或者是url-loader都是可以处理图片资源的,他们的区别就是url-loader可以设置在图片大小低于某个阈值的时候base64处理,这样可以减少请求,但是他们默认都不能处理html中的图片,html中的图片可以通过html-loader引入,从而能被url-loader进行处理。
-编写文件

image.png

image.png

image.png

  • 下载url-loader或者file-loader以及html-loader
  • npm install --save-dev html-loader url-loader file-loader
  • 配置文件

image.png

结果
不出意料,又报错了,还是下载版本过高的原因,1.npm uninstall html-loader url-loader file-loader,2.npm install html-loader@0.5.5 url-loader@3.0.0 file-loader@5.0.2 -D

image.png
image.png

5. 打包其他资源

  • 引入其他文件

image.png

  • 配置文件

image.png
-结果

image.png

6. devServer

devServer只在开发环境中生效,如果需要derServe中的配置生效,需要执行webpack-dev-server命令,并且如果修改了其中的配置需要重新执行命令。

  • devServer.open

在DevServer第一次构建完成时,自动用浏览器打开网页,默认是true

  • devServer.hot

启动 webpack 的模块热替换,在修改源代码后能实时的在浏览器看到更新后的效果

  • devServer.compress

为每个静态文件开启 gzip压缩

  • devServer.contentBase

项目构建后路径

  • devServer.port

指定端口号

  • devServer.proxy

开启代理

image.png

6 webpack生产环境配置

生产环境中mode需要配置成production

image.png

1.提取 css 成单独文件

需要用到mini-css-extract-plugin,经过css-loader的处理,css文件已经被整合到js中,这个我们需要的是把这些css 提取成一个单独的css文件,ini-css-extract-plugin插件loader的作用就是提取js中的css成单独的文件

  • 编写文件

image.png

image.png

image.png

  • 下载插件

npm install --save-dev mini-css-extract-plugin@0.9.0

注:由于很多下载版本过高,都会导致后面运行webpack报错,后面下载就直接加上版本号

  • 配置文件

image.png

  • 结果

image.png

2. css 兼容性处理

css 兼容性处理主要是针对css3 的样式,加上前缀操作,我们需要下载postcss-loader postcss-preset-env,然后在package.json中配置browserslist,postcss通过找到package.json中browserslist里面的配置加载指定的css兼容性样式。

  • 编写文件

  • 下载loader

npm install --save-dev postcss-loader postcss-preset-env

  • 配置文件

image.png

  • package.json中配置browserslist

image.png

              // 开发环境
              //last 1 代表兼容到最后一个版本
              "development": [
                "last 1 chrome version",
                "last 1 firefox version",
                "last 1 safari version"
              ],
              // 生产环境:默认是看生产环境
              "production": [
                ">0.2%",
                "not dead",
                "not op_mini all"
              ]
            }
复制代码

3. 压缩css

  • 下载

npm install --save-dev optimize-css-assets-webpack-plugin

  • 配置文件

image.png

4. js 语法检查

js 语法检查的大概过程是 下载 eslint-loader eslint eslint-config-airbnb-base eslint-plugin-import,下载后配置webpack.config.js配置文件,其中需要注意的是我们只需要对我们手写的js语法检查,node_modules中的js是不需要语法检查的,因此需要排除这个文件夹,另外需要在package.json中配置中 eslintConfig以便按照这个规则来进行语法检查,而我们使用的是airbnb的规范,因此上面还安装了eslint-config-airbnb-base。

  • 下载

npm install --save-dev eslint-loader eslint eslint-config-airbnb-base eslint-plugin-import

  • 配置文件

image.png

  • 配置package.json
"eslintConfig": {
     "extends": "airbnb-base",
      "env": {
         "browser": true 
        }
  }
复制代码

5. js 压缩

生产环境下只需要设置 mode: 'production',会自动压缩 js 代码

6. html 压缩

html压缩用到的是html-webpack-plugin插件

  • 下载

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

  • 配置文件

image.png

怎么办,周五了,正在写文章的我心早已飞走啦,可是还有好多内容没写啊,不行,我要下班啦,有时间会接着更新哦,看都看了,别忘了给我点个赞哦,谢谢帅哥美女啦哈哈。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享