webpack基础打包技术

举报
tea_year 发表于 2022/01/17 10:05:43 2022/01/17
【摘要】 Webpack是一种前端资源构建工具,一个静态模块打包器(module bundler)。在 Webpack看来,前端的所有资源文件(js/json/css/img/less/...)都会作为模块处理。它将根据模块的依赖关系进行静态分析,打包生成对应的静态资源(bundle)。webpack是一个给js准备的打包工具,官方的定义也就是一个打包器。它可以把很多的模块打包成很少的静态文件。web...


Webpack是一种前端资源构建工具,一个静态模块打包器(module bundler)。在 Webpack看来,前端的所有资源文件(js/json/css/img/less/...)都会作为模块处理。它将根据模块的依赖关系进行静态分析,打包生成对应的静态资源(bundle)。webpack是一个给js准备的打包工具,官方的定义也就是一个打包器。它可以把很多的模块打包成很少的静态文件。webpack有一个自己的特性,就是代码分割;代码分割使得项目在加载时只加载当时需要的一些文件


9.1 webpack简介

9.1.1 webpack概念

Webpack    是一个模块打包器。它将根据模块的依赖关系进行静态分析,然后将这些模块按照

指定的规则生成对应的静态资源。打包如下图8.1所示。

图9.1 webpack打包图框架

Webpack的特点如下:

代码拆分

Webpack有两种组织模块依赖的方式,同步和异步。异步依赖作为分割点,形成一个新的块。在优化了依赖树后,每一个异步区块都作为一个文件被打包。

Loader

Webpack本身只能处理原生的    JavaScript模块,但是loader转换器可以将各种类型的资源转换成JavaScript模块。这样,任何资源都可以成为    Webpack    可以处理的模块。

智能解析

Webpack有一个智能解析器,几乎可以处理任何第三方库,无论它们的模块形式是CommonJS、AMD还是普通的    JS文件。甚至在加载依赖的时候,允许使用动态表达式require("./templates/"+name+".jade")。

插件系统

Webpack还有一个功能丰富的插件系统。大多数内容功能都是基于这个插件系统运行的,还可以开发和使用开源的    Webpack    插件,来满足各式各样的需求。

快速运行

Webpack使用异步I/O和多级缓存提高运行效率,这使得    Webpack    能够以令人难以置信的速度快速增量编译。

9.1.3 webpack安装

首先要安装 Node.js,Node.js自带了软件包管理器    npm,Webpack需要Node.js    v 0.6    以上支持,建议使用最新版Node.js

webpack是前端的一个项目构建工具, 是基于node.js开发出来的一款工具;

webpack安装的安装步骤如下所示。

第一步骤:在本地安装webpack和webpack-cli,其中,--save-dev是本地安装。如果全局安装参数是-个,全局的指的是电脑上安装的webpack包, 所有项目都可以使用。本地webpack是指当前项目的webpack包. 通常全局webpack版本会比较高。

npm i webpack webpack-cli --save-dev

查看版本号:

    webpack -v                        // 查看命令

webpack 5.44.0                    // 显示版本号


注意:如果当前的webpack本号是4.x版本,可以npm install webpack@latest -D进行升级。

9.1.2 webpack入门案例

为了更好的来理解webpack的使用,我们使用Visual Studio Code开发工具来演示,接下是详细步骤。

(1) 新建一个文件夹chapter08,然后创建src、dist目录,使用Visual Studio Code打开,如图9.2所示。

图9.2 创建chapter08目录


(2) 建立好目录后,在当前目录下使用“npm init -y”初始化命令,在init的时候省去了逐步敲回车的步骤,生成的默认的package.json。

(3) 在src目录下导入jquery.min.js,该文件从资源库或网上获取,然后在src目录下创建main.js文件,代码如下所示。

1 $(function(){

2 $('p').css('background','green');

3 });

(4) 接下来在src目录下面创建index.html代码如下所示。

1 <!DOCTYPE html>

2 <html lang="en">

3 <head>

4 <meta charset="UTF-8">

5 <meta name="viewport" content="width=device-width, initial-scale=1.0">

6 <title>Document</title>

7 <script src="jquery.min.js"></script>

8 <script src="main.js"></script>

9 </head>

10 <body>

11 <p>hello webpack</p>

12 <p>hello webpack</p>

13 <p>hello webpack</p>

14 </body>

15 </html>

(5) 在VS Code编辑器上使用鼠标单击右键,选择“Open with Live Server”,如图所示。

图9.3 使用Live Server打开页面

程序运行效果如图9.4所示。

图9.4 程序运行结果页面

从程序运行结果可以发现,第(5)步的hello webpack被第(4)步的js代码给设置成了背景为绿色的格式。但是前提是需要我们在index.html提前导入jquery.min.js文件,相当于开发者在使用的时候需要引入两个js文件,有没有一种解决方案,在网页当中针对需要的2个或多个js文件等只需要引入一个文件即可呢?答案是肯定的。接下来,我们使用webpack的打包功能实现此功能。

(6) 使用npm命令安装“npm i jquery -D”,在生产环境下安装jquery的文件依赖。

(7) 修改main.js文件和index.html文件。在main.js文件上面增加一行代码,代码如下所示。

import $ from 'jquery'                    // 和引入外部jquery文件的作用一致

(8) 使用webpack的打包命令,将多个js文件打包为一个文件即可。

webpack ./src/main.js -o ./dist --mode=development

将第(5)步中的index.html代码中第7行、第8行代码删除,增加如下代码,即添加对

<script src="../dist/main.js"></script>

(9) 在VS Code编辑器上使用鼠标单击右键,选择“Open with Live Server”,程序运行结果和图9.4一样,证明我们采用webpack打包的效果是一样的,优点是加载的时候只需要加载一个js文件即可,可以显著提交效率。

9.1.4 五个核心概念

接下来我们先理解五个核心概念:入口(entry)、输出(output)、loader、插件(plugins)、Mode模式。

1. Entry:webpack 创建应用程序所有依赖的关系图。图的起点被称之为入口起点(entry point)。入口起点告诉 webpack 从哪里开始,并根据依赖关系图确定需要打包的内容。可以将应用程序的入口起点认为是根上下文或 APP第一个启动文件。每个 HTML 页面都有一个入口起点。单页应用(SPA)一个入口起点,多页应用(MPA)多个入口起点。

2. output输出指示 webpack打包后的资源bundles输出到哪里去,以及如何命名。将所有的资源(assets)归拢在一起后,还需要告诉 webpack 在哪里打包应用程序。webpack 的 output 属性描述了如何处理归拢在一起的代码(bundled code)。output选项可以控制webpack如何向硬盘写入编译文件。注意,即使可以存在多个entry起点,但只指定一个output配置。

3. Loader:webpack 只能处理jsjson文件,像cssimg文件等都处理不了,需要loader进行处理,编译成webpack能够处理的资源。webpack的目标是聚焦于项目中的所有资源(asset), 而浏览器不需要关注考虑这些。webpack把每个文件(.css, .html, .scss, .jpg, etc.)都作为模块处理。然而webpack自身只理解JavaScript。webpack loader 在文件被添加到依赖图中时,将文件源代码转换为模块。

loader可以使你在import或"加载"模块时预处理文件。因此,loader类似于其他构建工具中“任务(task)”,并提供了处理前端构建步骤的强大方法。

4.Plugins:插件是 wepback 的支柱功能。webpack 自身也是构建于你在 webpack 配置中用到的相同的插件系统之上插件目的在于解决 loader无法实现的其他事。

由于loader仅在每个文件的基础上执行转换,而插件(plugins) 常用于(但不限于)在打包模块的 “compilation” 和 “chunk” 生命周期执行操作和自定义功能。想要使用一个插件,你只需要 require() 它,然后把它添加到 plugins 数组中。

多数插件可以通过选项(option)自定义。你也可以在一个配置文件中因为不同目的而多次使用同一个插件,这时需要通过使用 new 来创建它的一个实例。插件可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量等。

5. Mode模式指示webpack使用相应模式的配置如表9-1所示。

选项

描述

特点

development

会将 DefinePlugin 中 process.env.NODE_ENV 的值设置为 development。启用 NamedChunksPlugin 和NamedModulesPlugin。

能让代码本地调试运行的环境

production

会将 DefinePlugin 中 process.env.NODE_ENV 的值设置为production。

能让代码优化上线运行的环境

9.2 webpack配置

9.2.1 config.js配置

webpack在执行时,除在命令行传入参数,还可以通过指定的配置文件来执行。默认会搜索当前目录下webpack.config.js。这个文件是一个node.js模块,返回一个json格式的配置对象,或者通过--config选项来指定配置文件。

接下来,使用案例来演示webpack.config.js文件的使用,在chapter08目录下创建一个webpack.config.js文件。参考代码如下所示。

1 const path = require('path');

2 module.exports = {

3 //入口起点

4 entry:path.join(__dirname,                            // 当前文件所在的目录的绝对路径

5 './src/main.js'),                                //入口

6 //输出路径以及文件名字

7 output:{                                                // 出口文件

8 path:path.join(__dirname,'./dist'),

9 filename:'bundle.js' // 打包后文件的名称

10 },

11 module:{                                                //配置loader

12 rules:[]

13 },

14 plugins:[],                                            //配置插件

15 mode:'development'                                    //设置模式

16 }

webpack.cofig.js文件编写完毕之后,不用像9-1再输入复杂的webpack命令。接下来在客户端环境下输入webpack即可,如图9.5所示。

图9.5 webpack进行打包结果

从程序运行结果会发现已经在dist输出目录下生成了bundle.js文件,并且如果去VS Code去查看也会发现bundle.js已经存在于dist目录下。这时候,将5.1节的index.html中的script引用文件修改为如下代码。

<script src="../dist/bundle.js"></script>

在VS Code编辑器上使用鼠标单击右键,选择“Open with Live Server”,程序运行结果和图9.4一样,证明我们采用webpack打包的效果是一样的,优点是打包的时候命令方式更加简单。原来的命令需要设定的入口和出口以及开发模式,现在这三个参数都在配置文件中配置过来,所以不需要再写那么长的命令了。

9.2.2 安装自动打包插件

前面的几节只是让 Webpack 正常运行起来了,但在实际开发中你可能会需要:

提供 HTTP 服务而不是使用本地文件预览。

监听文件的变化并自动刷新网页,做到实时预览。

支持 Source Map,以方便调试。

对于这些, Webpack 都为你考虑好了。Webpack 原生支持上述第2、3点内容,再结合官方提供的开发工具 DevServer 也可以很方便地做到第1点。 DevServer 会启动一个 HTTP 服务器用于服务网页请求,同时会帮助启动 Webpack ,并接收 Webpack 发出的文件更变信号,通过 WebSocket 协议自动刷新网页做到实时预览。

下面为之前的小项目 Hello,Webpack 继续集成 DevServer。首先需要安装 DevServer如下所示。

npm i webpack-dev-server -D

由于我们是本地安装webpack-dev-server,无法把它当成脚本命令,只有安装到全局才可以正常运行需要先安装corss-env命令。

npm i cross-env -D                            

在package.json中的scripts中添加如下代码:

"dev": "cross-env NODE_ENV=development webpack serve"                        

增加完之后代码如下所示。

"scripts": {

"test": "echo \"Error: no test specified\" && exit 1",

"dev": "cross-env NODE_ENV=development webpack serve"

}

或者直接使用:

"scripts": {

    "test": "echo \"Error: no test specified\" && exit 1",

    "dev": "webpack serve --config webpack.config.js"

  },


这种方式不用安装cross-env.

这时候在终端运行“npm run dev”命令,呈现结果如图8.6所示。

图9.6 “npm run dev”运行结果

在地址栏输入/src,则默认进入到index.html页面,效果和同8.4一样,如图8.7所示。

图9.7 “npm run dev”下的index.html

这时候,我们修改一下main.js里面的“$('p').css('background','green');”修改为“$('p').css('background','red');”。刷新一下,发现8.7 p标签背景并没有发生变化,原因是什么呢?这个时候将index.html页面中的“<script src="../dist/bundle.js"></script>”,修改为“<script src="/bundle.js"></script>”,再次刷新页面会发现p标签背景已经发生了变化。如图8.8所示。

图9.8 “npm run dev”下的index.html修改效果


但是此时出现的问题是,是需要我们在地址栏每次都输入要访问的页面名称,那由没有一种方法不用我们输入页面名称呢?我们可以在5.2.1的webpack.config.js第15行代码之后增加如下代码段。

1 , // 注意增加逗号

2 //只在内存中打包,不会输出,启动命令为webpack-dev-server

3 devServer:{

4 contentBase:path.join(__dirname,"src"),

5 compress:true,

6 port:3000,

7 open:true,

8 hot:true

9 }

接下来,在客户端运行“num run dev”,会直接进入到浏览器页面,p标签背景色为红色,如果我们将main.js的背景色修改为“yellow”后,p标签背景色会在浏览器即时显示为黄色。如图8.8所示。

图9.9 修改main.js后的index.html效果


注意:读者在阅读的时候,为了减少创新的文件和案例,会在之前的文件上进行修改

5.2.3 生成html插件

我们使用webpack-dev-server能够实现自动打包编译,生成的bundle.js在内存中,不被用户看到,还要设置script的src标签为 /bundle.js 才能实现自动打包编译。那么我们能否不用自动配置script的src属性呢?

使用webpack的插件,html-webpack-plugin能够实现在内存中创建index.html,并且不用设置script标签,这个插件自动为我们导入生成的bundle.js。

首先,在VS Code终端下使用“npm i html-webpack-plugin -D”安装html-webpack-plugin插件,安装完毕package.json可以看到。

"devDependencies": {

"html-webpack-plugin": "^5.3.2",

"jquery": "^3.6.0",

"webpack": "^5.45.1",

"webpack-cli": "^4.7.2",

"webpack-dev-server": "^3.11.2"

}

既然是一个基于webpack的插件,那么配置就肯定是要在webpack.config.js中进行的。接下来,修改webpack.config.js文件,修改后的代码如下所示。

1 const path = require('path');

2 const htmlWebpackPlugin = require("html-webpack-plugin");        // 新增代码

3 module.exports = {

4     //入口起点

5     entry:path.join(__dirname,'./src/main.js'),//入口

6     //输出路径以及文件名字

7     output:{

8         path:path.join(__dirname,'./dist'),

9         filename:'bundle.js'

10     },

11     //配置loader

12     module:{

13         rules:[]

14     },

15     //配置插件

16     plugins:[

17                                             //新增代码,用来生成内存中的html页面

18         new htmlWebpackPlugin({

19 // 需要复制在内存中的文件路径

20             template:path.join(__dirname,"./src/index.html"),

21             filename:"index.html"         // 复制完成后的文件名

22         }),

23     ],

24     //设置模式,开发模式和生产模式只能配置一个

25     mode:'development',

26     //只在内存中打包,不会输出,启动命令为webpack-dev-server

27     devServer:{

28         contentBase:path.join(__dirname,"src"),     // 设置启动后访问的目录

29         compress:true,                              // 配置是否启用 gzip 压缩

30         port:8888,                                  // 更改服务器端口号

31         open:true,                                  // 启动后直接打开浏览器

32         hot:true                                    // 设置局部刷新

33     }

34 }

将index.html中的script删除后,运行npm run dev”命令。运行结果如图8.8所示。

图9.10 html插件运行的index.html效果

在该页面上单击鼠标右键,查看当前页面源码。如下所示。

1 <!DOCTYPE html>

2 <html lang="en">

3 <head>

4 <meta charset="UTF-8">

5 <meta name="viewport" content="width=device-width, initial-scale=1.0">

6

7 <script defer src="bundle.js"></script></head>

8 <body>

9 <p>hello webpack </p>

10 <p>hello webpack </p>

11 <p>hello webpack </p>

12 </body>

13 </html>    

通过程序源码我们会发现,html-webpack-plugin生成的index.html是在内存中的,它会自动为我们导入由webpack-dev-server生成的bundle.js。

9.3 处理文件

9.3.1 处理css文件

我们提到了babel-loder的使用,那么webpack声称可以处理任何类型的文件,css该怎么处理呢,接下来,我们按照步骤演示一下。

首先介绍下style-loader和css-loader,因为处理css文件之前必须要安装这两个模块,style-loader是能够在需要载入的html中创建一个<style></style>标签,标签里的内容就是CSS内容;css-loader:是允许在js中import一个css文件,会将css文件当成一个模块引入到js文件中。打包安装命令如下代码所示。

npm i style-loader css-loader -D    

第二步:命令行安装成功后,在src目录下新建css子目录,然后在css子目录下面新建one.css文件,样式代码参考如下所示。

body{

background-color: peru;

}

p{font-size: x-large;}

第三步:main.js中通过“import './css/one.css'”命令引入要成功引入并生效,需要修改webpack.config.js文件

1 const path = require('path');

2 const htmlWebpackPlugin = require("html-webpack-plugin");

3 module.exports = {

4 //入口起点

5 entry:path.join(__dirname,'./src/main.js'),//入口

6 //输出路径以及文件名字

7 output:{

8 path:path.join(__dirname,'./dist'),

9 filename:'bundle.js'

10 },

11 //配置loader

12 module:{

13 rules:[

14 {test:/\.css$/,                 // 正则匹配要识别的css

15 // 使用style-loader和css-loader进行处理

16 use:['style-loader','css-loader']} ]

17 },

18 //配置插件

19 plugins:[

20 //用来生成内存中的html页面

21 new htmlWebpackPlugin({

22 template:path.join(__dirname,"./src/index.html"),

23 filename:"index.html"

24 }),

25 ],

26 //设置模式,开发模式和生产模式只能配置一个

27 mode:'development',

28 //只在内存中打包,不会输出,启动命令为webpack-dev-server

29 devServer:{

30 contentBase:path.join(__dirname,"src"),// 设置启动后访问的目录

31 compress:true, // 配置是否启用 gzip 压缩

32 port:8888, // 更改服务器端口号

33 open:true, // 启动后直接打开浏览器

34 hot:true // 设置局部刷新

35 }

36 }

最后,在终端使用“npm run dev”命令运行一下即可,在浏览器会看到运行后效果如下图8.9所示。

图9.11 webpack处理css文件

通过程序运行结果可以发现,我们在css子目录下编写的one.css文件针对body和p标签的设置已经生效。

9.3.2 处理less文件

上一小节,我们使用webpack针对css文件进行了处理。接下来,我们我演示一下webpack如何来处理less文件,使用步骤如下所示。

首先使用less文件之前,必须安装less-loader。打包安装命令如下代码所示。

npm i less less-loader -D    

第二步:命令行安装成功后,在src的css子目录下面新建two.less文件,样式代码参考如下所示。

p{border: 1px dotted black;

width: 600px;height: 30px;}

第三步:main.js中通过“import './css/two.less'”命令引入要成功引入并生效,需要修改webpack.config.js文件中的module配置。

1 //配置loader

2 module:{

3 rules:[

4 {test:/\.css$/,use:['style-loader','css-loader']},

5 {test:/\.less$/,use:['style-loader','css-loader','less-loader']}

6 ]

7 },

最后,在终端使用“npm run dev”命令运行一下即可,在浏览器会看到运行后效果如下图8.10所示。


图9.12 webpack处理less文件

通过程序运行结果可以发现,我们在css子目录下编写的two.less文件针对color、width和height标签的设置已经生效。

知识点拨如果使用webpack命令打包,会发现在bundle.js文件里面包含代码“.push([module.id, \"p {\\n color: gray;\\n width: 600px;\\n height: 30px;\\n}\\n\", \"\"]);”,其已经编译成css,且被放入了main.js的生成文件内。

9.3.3 处理scss文件

scss是sass的一个升级版本,完全兼容sass之前的功能,又有了些新增能力。语法形式上有些许不同,最主要的就是sass是靠缩进表示嵌套关系,scss是花括号。

上一小节,我们使用webpack针对less文件进行了处理。接下来,我们我演示一下webpack如何来处理scss文件,使用步骤如下所示。

首先使用scss文件之前,必须安装scss-loader。打包安装命令如下代码所示。

npm i node-sass sass-loader -D    

第二步:命令行安装成功后,在src的css子目录下面新建three.scss文件,样式代码参考如下所示。

p{border: 1px dotted black;

width: 600px;height: 30px;}

第三步:main.js中通过“import './css/three.scss'”命令引入要成功引入并生效,需要修改webpack.config.js文件中的module配置。

1 //配置loader

2 module:{

3 rules:[

4 {test:/\.css$/,use:['style-loader','css-loader']},

5 {test:/\.less$/,use:['style-loader','css-loader','less-loader']},

6 {test:/\.scss$/,use:['style-loader','css-loader','sass-loader']}

7 ]

8 },

最后,在终端使用“npm run dev”命令运行一下即可,在浏览器会看到运行后效果如下图8.11所示。

9.13 webpack处理scss文件

通过程序运行结果可以发现,我们在css子目录下编写的two.less文件针对p标签font-style和font-weight属性的设置已经生效。

注意:如果安装node-sass命令不成功,可以使用“npm i node-sass sass-loader -D”命令进行安装。


9.3.4 处理图片文件

上一小节,我们使用webpack针对scss文件进行了处理。默认情况下,webpack无法处理css中的图片路径和字体样式路径。接下来,我们我演示一下webpack如何来处理图片和样式文件,使用步骤如下所示。

首先安装url-loader,如果安装有问题,可以使用“npm i file-loader url-loader -D”安装。打包安装命令如下代码所示。

npm i url-loader -D

第二步:命令行安装成功后,在src的index.html的p标签之后增加div代码如下所示。

<div class="tu01.css"></div>    

css子目录下面新建tu.css文件,样式代码参考如下所示。

div{

width:600px;height: 400px;

border: 1px solid #f00;

background: url('../img/1.jpg');

background-size:cover;

}

第三步:main.js中通过“import './css/three.scss'”命令引入要成功引入并生效,需要修改webpack.config.js文件中的module配置。此处,limit的作用是limit给定的值大于等于图片的大小则不会被转为base64,小于则会被转为base64。

1 //配置loader

2 module:{

3 rules:[

4 {test:/\.css$/,use:['style-loader','css-loader']},

5 {test:/\.less$/,use:['style-loader','css-loader','less-loader']},

6 {test:/\.scss$/,use:['style-loader','css-loader','sass-loader']},

7 {test:/\.(jpg|png|gig|bmp|jpeg)$/,

8 use:['url-loader?limit=1234&name=[name].[ext]']}

9 ]

10 },

第四步:在终端使用“npm run dev”命令运行一下即可,在浏览器会看到运行后效果如下图8.11所示。

9.14 webpack处理图片和样式文件

通过程序运行结果可以发现,我们在css子目录下编写的tu.css文件针对divp标签的tu01类样式属性的设置已经生效。

接下来,在src下再次增加一个img2子目录,然后增加一个同名但和上述图片不通过的“1.jpg”,在index.html下增加“<div class="tu02">222</div>”,在tu.css增加代码如下所示。

.tu02{

width:500px;height: 300px;

background: url('../img2/1.jpg'); background-size:cover;

}

使用“npm run dev”命令运行一下即可,在浏览器会看到运行后效果如下图8.12所示。

9.15 webpack处理图片和样式文件(图片覆盖)

通过程序运行结果发现,后来增加的1.jpg也被用在了第一个div上。原因在于一个项目中如果两个文件夹中的图片重名,打包图片就会被覆盖,这个时候可以加上hash值的前八位作为图片名,可以避免重名。修改webpack.config.js代码如下所示。

{ test: /\.(jpg|png|gig|bmp|jpeg)$/, 

use: ['url-loader?limit=1000&name=[hash]-[name].[ext]'] }

webpack.config.js配置文件修改后,再次使用“npm run dev”运行程序,程序运行结果正确,如图9.16所示。

图9.16 webpack处理图片和样式文件(图片不重复)


我们通过查看网页的源码,会发现图片名已经变成了hash值,如图8.14所示。

9.17 webpack处理图片和样式文件(源码解读)



知识点拨:base64就是一串字符串码来表示的图片,在加载页面或者js的时候就一并加载过来,减少图片引用时单独的一次http请求。了解web端性能优化的同学都知道,http请求每次建立都会占用一定的时间,对于小图请求来说,可能http建立请求的时间比图片下载本身还长。所以对小图进行base64转码是优化http请求,保证页面加速渲染的一种手段。

9.4 本章小结

Webpack    是一个模块打包器。它将根据模块的依赖关系进行静态分析,然后将这些模块按照

指定的规则生成对应的静态资源

webpack包括五个核心概念:入口(entry)、输出(output)、loader、插件(plugins)、Mode模式

webpack在执行时,除在命令行传入参数,还可以通过指定的配置文件来执行。默认会搜索当前目录下webpack.config.js

loader是webpack最重要的部分之一,通过使用不同的Loader,我们能够调用外部的脚本或者工具,实现对不同格式文件的处理,loader需要在webpack.config.js里边单独用module进行配置

output选项可以控制webpack如何向硬盘写入编译文件。注意,即使可以存在多个entry起点,但只指定一个output配置

插件(plugins) 常用于(但不限于)在打包模块的 “compilation” 和 “chunk” 生命周期执行操作和自定义功能

Mode模式指示webpack使用相应模式的配置

webpack可以用于处理css、less文件、scss、处理图片和样式文件

9.5 理论习题与实践练习

1.填空题

1.1 webpack的五个核心特性

1.2 webpack是一个

1.3 webpack可以处理文件包括 、。

2.思考题

2.1 有哪些常见的Loader?他们是解决什么问题的?

2.2 有哪些常见的Plugin?他们是解决什么问题的?

2.3 请简述webpack的热更新是如何做到的?说明其原理?

2.4 请简述如何利用webpack来优化前端性能?(提高性能和体验)

2.5 npm打包时需要注意哪些?如何利用webpack来更好的构建?

3.编程题

3.1 请根据本周案例,完成webpack的基本配置;

3.2 请参考本章节案例,结合自己的实际网页,完成webpack针对css文件、less文件、scss文件、图片的使用。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。