问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

手把手带你学webpack(1)--Web初体验

发布网友 发布时间:2024-09-17 02:28

我来回答

1个回答

热心网友 时间:2024-09-17 21:01

该专栏会带你从零学习Webpack,一步步由浅入深地了解webpack的原理以及如何使用,还会教你如何自定义loader、plugin,以及webpack性能优化,如TreeShaking、gzip压缩等

希望在读完本专栏后,能够让你灵活使用webpack,从而更好地解决工作中项目构建时遇到的问题,以及知道该如何对项目的构建进行性能优化

本篇文章是该专栏的第一章,会带你体验一下webpack,让你大体上了解一下webpack是干什么用的

本专栏对应的github仓库:https://github.com/Plasticine-Yang/webpack-learning/tree/main/01_webpack_start

1.Webpack是什么?

webpackisastaticmodulebundlerformodernJavaScriptapplications.

这是官网对webpack的概念解释

bundler说明它是一个打包工具

static说明能够处理各种静态资源

module说明支持模块化开发,比如各种模块化方案ESModule、CommonJS、AMD等

综上,可以大概了解到,webpack是一个能够将项目中用到的各种静态资源、模块化js代码打包成最终可以部署在服务器上直接使用,能够直接被浏览器解析运行的构建工具

2.安装webpackpnpm?i?webpack?webpack-cli?-D3.webpack和webpack-cli的关系

一般来说需要安装webpack和webpack-cli,webpack-cli是在命令行中使用webpack时必须安装的依赖,安装了之后就能在命令行使用webpack命令了

但是它不是必须的,比如一些第三方脚手架工具,如vue-cli,其内部就只装了webpack而没有装webpack-cli,它有自己的vue-service-cli能够实现类似的功能

4.体验webpack

首先在项目目录下创建一个src目录,并在其中创建index.js文件,然后写入一些代码

//?src/index.jsconsole.log('hello?webpack!');

然后执行npxwebpack后会发现,项目目录下多出了dist目录,并且有一个main.js文件,其内容和我们的index.js一模一样

由此可以发现,webpack在没有配置的时候,默认是以src/index.js作为入口文件,dist/main.js作为打包的结果

5.webpack配置文件

可以在项目目录下创建webpack.config.js对webpack进行一些个性化配置,比如上面的入口文件默认是src/index.js,出口是dist/main.js,我们可以对其作出修改

//?webpack.config.jsconst?path?=?require('path');module.exports?=?{??entry:?path.resolve(__dirname,?'src/main.js'),??output:?{????filename:?'bundle.js',????path:?path.resolve(__dirname,?'build'),??},};

path是Node.js的内置模块,用于处理路径相关的操作,path.resolve()就是用于拼接路径,第一个参数传入了__dirname表示当前文件webpack.config.js所在目录,然后拼接上src/main.js,最终就会得到D:/webpack_learning/01_webpack_start/src/main.js这样的绝对路径了

5.1vscode编写webpack配置时提供自动补全

如果直接像上面那样去写webpack.config.js的时候是没有自动补全的,webpack的配置项那么多,一直去官网查对应配置项还是挺麻烦的,只需要添加上注释,并且用@type注解声明导出的对象的类型,就可以获得自动补全提示了!

/**?*?@type?{?import('webpack').Configuration?}?*/module.exports?=?{??entry:?path.resolve(__dirname,?'src/main.js'),??output:?{????filename:?'bundle.js',????path:?path.resolve(__dirname,?'build'),??},};

写相应配置项的时候还能够看到对应的配置项的作用(和官网的一致),省去了不少查文档的时间

5.2指定配置文件名字

默认的配置文件名是webpack.config.js,如果想要使用别的名字,可以在执行webpack命令的时候加上--config参数,然后带上配置文件的路径即可

比如我希望使用webpack.test.config.js作为配置文件,那么应当这样执行命令

npx?webpack?--config?./webpack.test.config.js5.3将webpack命令作为package.json的脚本

如果我们指定了默认配置文件名以外的配置文件时,每次都要输入npxwebpack--config./webpack.test.config.js这样一长串太麻烦了,可以直接将其写在package.json的scripts配置项中

"scripts":?{??"build":?"webpack?--config?./webpack.test.config.js"},

注意:写在**scripts**中的命令不需要再加上**npx**

6.webpack初体验案例6.1案例场景和环境搭建

在这个案例中,我们会在js中直接用import导入css文件,看看导入的css文件能否生效

首先准备一下环境,在项目根目录下创建index.html,并在其中引入打包后的js文件

<!DOCTYPE?html><html?lang="en">??<head>????<meta?charset="UTF-8"?/>????<meta?http-equiv="X-UA-Compatible"?content="IE=edge"?/>????<meta?name="viewport"?content="width=device-width,?initial-scale=1.0"?/>????<title>webpack?start</title>??</head>??<body>????<script?src="../dist/bundle.js"></script>??</body></html>

然后在src/css中创建index.css,并写好一些样式

*?{??padding:?0;??margin:?0;}html,body?{??display:?flex;??justify-content:?center;??align-items:?center;??height:?100%;??width:?100%;??background-color:?#1d3557;}.box?{??height:?500px;??width:?500px;??background-color:?#457b9d;}

然后再在入口文件中导入该css文件,并使用js创建一个class为box的div元素

//?src/index.jsimport?'./css/index.css';(()?=>?{??const?boxEl?=?createEl('div',?'box');??document.body.appendChild(boxEl);})();/**?*?创建指定标签和类名的?DOM?元素?*?@param?{string}?elTag?标签名?*?@param?{string}?className?类名?*?@returns?HTMLElement?DOM?元素?*/function?createEl(elTag,?className)?{??const?el?=?document.createElement(elTag);??el.className?=?className;??return?el;}6.2初探loader

执行npxwebpack,却遇到了如下报错提示我们缺少了处理这种类型文件的loader,loader是webpack的一个重要概念,在依赖图中遇到的各种类型文件时,要有相应的loader去处理才能正常打包,之后的文章中会详细介绍loader,这里先简要介绍一下loader是干什么的:

可以用于对模块的源代码进行转化

由于我们是通过import导入css文件的,因此index.css可以被看成是一个模块

加载该模块的时候,webpack并不知道要如何处理css这种类型的模块,因此需要有一个特定的loader去处理,让它能够顺利被webpack加载

那么什么loader能够处理css类型的模块呢?答案就是css-loader

6.3安装并配置css-loader

首先需要安装css-loader

pnpm?i?css-loader?-D

配置css-loader有三种方式:

内联方式

CLI方式(webpack5中不再使用)

在配置文件中配置

下面逐一介绍这三种模式

6.3.1内联方式

直接在导入相应模块的时候指明使用的loader,因而被称为内联方式

//?src/index.jsconsole.log('hello?webpack!');0

这种方式很少用,因为不方便管理,并且每次导入css都要手动声明一下,不太方便使用

6.3.2CLI方式

该方式在webpack5中已经被取消,下面是webpack4文档中关于该方式的介绍根据官方文档,我们使用这种方式打包的命令如下

//?src/index.jsconsole.log('hello?webpack!');1

但是由于我们安装的是webpack5,已经不支持该参数了,所以会报错,但是没关系,这种方式了解即可,实际开发中并不会这样去使用loader

6.3.3配置文件中配置

这种方式是最常用的,意思是在webpack.config.js中的module.rules下配置loader

这种方式方便后期维护,能够一目了然,知道项目中用到了哪些loader,以我们的css-loader为例,看一下要怎么配置吧!

//?src/index.jsconsole.log('hello?webpack!');2

webpack的配置有很多都可以简写,这一点可以在写的时候注意一下自动补全中的文档提示由于我们暂时不需要用到css-loader的配置项,因此直接在rules.use中写上字符串就好了

//?src/index.jsconsole.log('hello?webpack!');36.4使用style-loader

现在我们配置完了,并且打包也正常了,可是通过live-server运行一个服务器,然后访问index.html的时候却发现样式并没有生效这是为什么呢?因为css-loader只是负责解析.css文件类型的模块,但是并不会将解析后的结果插入到html中如果希望将解析后的css样式插入到html中,还需要另外一个loader--style-loader

安装style-loader

//?src/index.jsconsole.log('hello?webpack!');4

然后将style-loader配置到webpack.config.js中

//?src/index.jsconsole.log('hello?webpack!');5

执行pnpmrunbuild后就能够看到效果了查看打包后的结果可以发现,会在html中的head标签中创建一个style标签,并将样式放在这里面后续我会讲解如何将css抽取到单独的文件中,并进行压缩等操作

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
网络宣传文案心碎,句句获赞! 关于朋友圈上万人点赞转发的说说 人生看的很透彻的经典句子 超现实超扎心的说说大全2019最新 心脏血管堵塞吃什么食物 投资理财有什么前景 pp理财什么情况 P2P理财行业的前景如何? 中国目前的财富管理现状是什么情况? 呼吸皮沙发寿命多久 “皮沙发的呼吸寿命” 呼吸皮沙发寿命多久 如何写我的外甥女作文? 梦见两个孕妇在说对方有外遇的预兆 打媳妇了,要离婚,昨天晚上我梦见我姐以前离婚的丈夫,是不是这次必须离... 吃鸡中如何在跳舞时开枪 具体怎么操作 海南旅游最好的时间 三伏天适合旅游的地方_三伏天去哪里避暑合适 中国最炎热的5个城市 北方人去海南上学习惯吗 海南热吗? pro的灭屏显示费电吗 邓寄尘&amp;陈嘉玲&amp;黄百呜的《理想》 歌词 AI是什么格式的文件ai是什么格式的文件手机怎么打开 消防烟感报警器多少钱一个 急求谢师宴上的家长致词,要朴实点,我父亲四十多了,不能有太多华丽的词语... 家长在谢师宴感谢老师无私付出的句子收藏四十句 怎么向老师说谢师宴呢? 中小学生田径比赛的五项全能都有什么 欠钱不还有微信手机号怎么办 怎么把cad中的长度单位改为厘米? cad比例问题,如图。标注长度是400mm,我用di命令测量时2000个单位。为什... 语文报上面有一篇:"西方哲学家黑格尔说:一个民族只有有那些关注天空的人... 一次vue-cli4项目升级到vite的经历 记一次使用`stylus-converter`将stylus转scss的过程 webpack自动打包? webpack的作用及核心配置(webpack的基本配置) 细说webpack系列 3. webpack-cli 零配置打包 umi3源码解析之核心Service类初始化 为什么笔记本电脑玩游戏会卡? 钱钧人物故事 以下选项中,合法的c语言常量是 A:1.23 B:'c++' C:"\2.0 D:2kb 劳力士满天星手表价格 劳力士满天星手表价格多少钱 MySQL中文查询解决方案mysql中文无法查询 劳力士官网报价大全满天星 MySQL中text列详解格式存取限制及性能优化mysql中text列 深入探究MySQL中Text类型对性能的影响mysql中text性能 苹果手机怎么改微信号第三次 微信怎样改微信号第三次 大连元旦跨年去哪里,元旦海边旅游推荐广东 2023大连元旦跨年哪个地方好 元旦适不适合去大连跨年 2023大连元旦期间适合去哪里跨年?