《Vue入门到精通系列之三》--- webpack详解(二)

简介: 《Vue入门到精通系列之三》--- webpack详解

1.7.less文件处理


准备工作:


先创建一个less文件,依然放在css文件夹中


7879ef4ab1c046a098a15a5175696ff5.png

4fd97908ff6d4c1c8454eb35bfe7055b.png

b109ac98d26043ebae18a805b86eda39.png


less文件处理 – less-loader:

还是需要安装对应的loader

注意:我们这里还安装了less,因为webpack会使用less对less文件进行编译

其次,修改对应的配置文件

添加一个rules选项,用于处理.less文件

6b13259cb35d45748572b54788206b0e.png


1.8.图片文件处理


1.8.1.图片文件处理 – 资源准备阶段


首先,我们在项目中加入两张图片:

一张较小的图片test01.jpg(小于8kb),一张较大的图片test02.jpeg(大于8kb)

待会儿我们会针对这两张图片进行不同的处理

我们先考虑在css样式中引用图片的情况,所以我更改了normal.css中的样式:


3d84e915ee2340e68e5726e27bdac14e.png


如果我们现在直接打包,会出现如下问题


6bf80ab362904a8988a66acaed7e3bf1.png


1.8.2.图片文件处理 – url-loader


图片处理,我们使用url-loader来处理,依然先安装url-loader


9d2847f9c0094c8b886e9aa5c1fd9dfa.png


修改webpack.config.js配置文件:


8c1a282ab901487b8728b7b81663787d.png


再次打包,运行index.html,就会发现我们的背景图片选出了出来。

而仔细观察,你会发现背景图是通过base64显示出来的

OK,这也是limit属性的作用,当图片小于8kb时,对图片进行base64编码


1.8.3.图片文件处理 – file-loader


那么问题来了,如果大于8kb呢?我们将background的图片改成test02.jpg

这次因为大于8kb的图片,会通过file-loader进行处理,但是我们的项目中并没有file-loader


f28b4d8609414f8b8c4e480d4dd3b3b0.png


所以,我们需要安装file-loader


fa67c520a68b48eb8f356ae9f4165e7b.png


再次打包,就会发现dist文件夹下多了一个图片文件


29418893737346908015a2db21c0bb89.png


1.8.4.图片文件处理 – 修改文件名称


我们发现webpack自动帮助我们生成一个非常长的名字

这是一个32位hash值,目的是防止名字重复

但是,真实开发中,我们可能对打包的图片名字有一定的要求

比如,将所有的图片放在一个文件夹中,跟上图片原来的名称,同时也要防止重复

所以,我们可以在options中添加上如下选项:

img:文件要打包到的文件夹

name:获取图片原来的名字,放在该位置

hash:8:为了防止图片名称冲突,依然使用hash,但是我们只保留8位

ext:使用图片原来的扩展名

但是,我们发现图片并没有显示出来,这是因为图片使用的路径不正确

默认情况下,webpack会将生成的路径直接返回给使用者

但是,我们整个程序是打包在dist文件夹下的,所以这里我们需要在路径下再添加一个dist/


46fe306ba05d4401a6b9d78a6f5ea871.png

7b90f5022ae7461aa61ea8a6ca8ab942.png


1.9.webpack配置vue


1.9.1.引入vue.js


我们希望在项目中使用Vuejs,那么必然需要对其有依赖,所以需要先进行安装

注:因为我们后续是在实际项目中也会使用vue的,所以并不是开发时依赖


6d0b5325aeb74abba4dde50150dff063.png


那么,接下来就可以按照我们之前学习的方式来使用Vue了


1d88a72e36dd4a9291b9e4caa09d5294.png

f55a9800510e4584af3db09ae5b6bc6f.png


1.9.2.打包项目 – 错误信息


修改完成后,重新打包,运行程序:


打包过程没有任何错误(因为只是多打包了一个vue的js文件而已)


但是运行程序,没有出现想要的效果,而且浏览器中有报错


30621cef0d7b49239667ec4ddab94084.png


这个错误说的是我们使用的是runtime-only版本的Vue,什么意思呢?


这里我只说解决方案:Vue不同版本构建,后续我具体讲解runtime-only和runtime-compiler的区别。


所以我们修改webpack的配置,添加如下内容即可


0ac4ed16ddc844f599c449a9a12dc06f.png


1.9.3.el和template区别(一)


正常运行之后,我们来考虑另外一个问题:

如果我们希望将data中的数据显示在界面中,就必须是修改index.html

如果我们后面自定义了组件,也必须修改index.html来使用组件

但是html模板在之后的开发中,我并不希望手动的来频繁修改,是否可以做到呢?

定义template属性:

在前面的Vue实例中,我们定义了el属性,用于和index.html中的#app进行绑定,让Vue实例之后可以管理它其中的内容

这里,我们可以将div元素中的{{message}}内容删掉,只保留一个基本的id为div的元素

但是如果我依然希望在其中显示{{message}}的内容,应该怎么处理呢?

我们可以再定义一个template属性,代码如下:


7ce7e6d9466044bfb016b21e870b79b0.png


1.9.4.el和template区别(二)


重新打包,运行程序,显示一样的结果和HTML代码结构

那么,el和template模板的关系是什么呢?

在我们之前的学习中,我们知道el用于指定Vue要管理的DOM,可以帮助解析其中的指令、事件监听等等。

而如果Vue实例中同时指定了template,那么template模板的内容会替换掉挂载的对应el的模板。

这样做有什么好处呢?

这样做之后我们就不需要在以后的开发中再次操作index.html,只需要在template中写入对应的标签即可

但是,书写template模块非常麻烦怎么办呢?

没有关系,稍后我们会将template模板中的内容进行抽离。

会分成三部分书写:template、script、style,结构变得非常清晰。


1.9.5.Vue组件化开发引入


在学习组件化开发的时候,我说过以后的Vue开发过程中,我们都会采用组件化开发的思想。

那么,在当前项目中,如果我也想采用组件化的形式进行开发,应该怎么做呢?

查看下面的代码:

当然,我们也可以将下面的代码抽取到一个js文件中,并且导出


018211d9636249b796a5fae4fdb3d3b2.png


1.9.6. .vue文件封装处理


但是一个组件以一个js对象的形式进行组织和使用的时候是非常不方便的


一方面编写template模块非常的麻烦


另外一方面如果有样式的话,我们写在哪里比较合适呢?


现在,我们以一种全新的方式来组织一个vue的组件


但是,这个时候这个文件可以被正确的加载吗?


必然不可以,这种特殊的文件以及特殊的格式,必须有人帮助我们处理。


谁来处理呢?vue-loader以及vue-template-compiler。


安装vue-loader和vue-template-compiler


npm install vue-loader vue-template-compiler --save-dev


修改webpack.config.js的配置文件:


076e283f2b2c4339bad74ab1d255de5c.png

64ac47bf07944ec69c278e5ec7f5e4d8.png


1.10.plugin的使用


1.10.1.认识plugin


plugin是什么?

plugin是插件的意思,通常是用于对某个现有的架构进行扩展。

webpack中的插件,就是对webpack现有功能的各种扩展,比如打包优化,文件压缩等等。

loader和plugin区别

loader主要用于转换某些类型的模块,它是一个转换器。

plugin是插件,它是对webpack本身的扩展,是一个扩展器。

plugin的使用过程:

步骤一:通过npm安装需要使用的plugins(某些webpack已经内置的插件不需要安装)

步骤二:在webpack.config.js中的plugins中配置插件。

下面,我们就来看看可以通过哪些插件对现有的webpack打包过程进行扩容,让我们的webpack变得更加好用


1.10.2.添加版权的Plugin


我们先来使用一个最简单的插件,为打包的文件添加版权声明

该插件名字叫BannerPlugin,属于webpack自带的插件。

按照下面的方式来修改webpack.config.js的文件:


32f0262c3a784d77bc77f64b3d1ca7e5.png


重新打包程序:查看bundle.js文件的头部,看到如下信息


037541bc20974bc3a71ed9772f0eddaf.png


1.10.3.打包html的plugin


目前,我们的index.html文件是存放在项目的根目录下的。

我们知道,在真实发布项目时,发布的是dist文件夹中的内容,但是dist文件夹中如果没有index.html文件,那么打包的js等文件也就没有意义了。

所以,我们需要将index.html文件打包到dist文件夹中,这个时候就可以使用HtmlWebpackPlugin插件

HtmlWebpackPlugin插件可以为我们做这些事情:

自动生成一个index.html文件(可以指定模板来生成)

将打包的js文件,自动通过script标签插入到body中

安装HtmlWebpackPlugin插件


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

使用插件,修改webpack.config.js文件中plugins部分的内容如下:

这里的template表示根据什么模板来生成index.html

另外,我们需要删除之前在output中添加的publicPath属性

否则插入的script标签中的src可能会有问题


1.10.4.js压缩的Plugin


在项目发布之前,我们必然需要对js等文件进行压缩处理

这里,我们就对打包的js文件进行压缩

我们使用一个第三方的插件uglifyjs-webpack-plugin,并且版本号指定1.1.1,和CLI2保持一致

npm install uglifyjs-webpack-plugin@1.1.1 --save-dev

修改webpack.config.js文件,使用插件:

32686d94f1064cc99c9748301946c295.png


查看打包后的bunlde.js文件,是已经被压缩过了。


1.11.本地服务器


webpack提供了一个可选的本地开发服务器,这个本地服务器基于node.js搭建,内部使用express框架,可以实现我们想要的让浏览器自动刷新显示我们修改后的结果。

不过它是一个单独的模块,在webpack中使用之前需要先安装它

npm install --save-dev webpack-dev-server@2.9.1

devserver也是作为webpack中的一个选项,选项本身可以设置如下属性:

contentBase:为哪一个文件夹提供本地服务,默认是根文件夹,我们这里要填写./dist

port:端口号

inline:页面实时刷新

historyApiFallback:在SPA页面中,依赖HTML5的history模式

webpack.config.js文件配置修改如下:

我们可以再配置另外一个scripts:

–open参数表示直接打开浏览器


4432604fad3a49eeb415b8278cbed246.png

19845b6d1c71417a9a06a92b34e68af8.png

目录
相关文章
|
3月前
|
JavaScript
webpack学习三:webpack初始化整合配置vue,一步一步的抽离代码块整合vue。
这篇文章是关于如何在webpack环境中配置Vue.js,包括安装Vue.js、解决报错、理解el与template的区别、使用SPA模式、抽离模板为对象、封装为单独的js文件、安装vue-loader时遇到的问题及解决方案,以及整个过程的总结。
109 2
webpack学习三:webpack初始化整合配置vue,一步一步的抽离代码块整合vue。
|
4月前
|
JavaScript 前端开发 小程序
一小时入门Vue.js前端开发
本文是作者关于Vue.js前端开发的快速入门教程,包括结果展示、参考链接、注意事项以及常见问题的解决方法。文章提供了Vue.js的基础使用介绍,如何安装和使用cnpm,以及如何解决命令行中遇到的一些常见问题。
122 5
一小时入门Vue.js前端开发
|
4月前
|
JavaScript 测试技术 Windows
vue配置webpack生产环境.env.production、测试环境.env.development(配置不同环境的打包访问地址)
本文介绍了如何使用vue-cli和webpack为Vue项目配置不同的生产和测试环境,包括修改`package.json`脚本、使用`cross-env`处理环境变量、创建不同环境的`.env`文件,并在`webpack.prod.conf.js`中使用`DefinePlugin`来应用这些环境变量。
230 2
vue配置webpack生产环境.env.production、测试环境.env.development(配置不同环境的打包访问地址)
|
3月前
|
存储 JavaScript 前端开发
前端开发:Vue.js入门与实战
【10月更文挑战第9天】前端开发:Vue.js入门与实战
|
3月前
|
JavaScript API 开发者
十分钟 带你强势入门 vue3
十分钟 带你强势入门 vue3
71 1
|
3月前
|
JavaScript
vue3完整教程从入门到精通(新人必学2,搭建项目)
本文介绍了如何在Vue 3项目中安装并验证Element Plus UI框架,包括使用npm安装Element Plus、在main.js中引入并使用该框架,以及在App.vue中添加一个按钮组件来测试Element Plus是否成功安装。
113 0
vue3完整教程从入门到精通(新人必学2,搭建项目)
|
3月前
|
JavaScript Java CDN
vue3完整教程从入门到精通(新人必学1,vue3快速上手)
本文提供了Vue 3从入门到精通的完整教程,涵盖了创建Vue应用、通过CDN使用Vue、定义网站以及使用ES模块构建版本的步骤和示例代码。
838 0
vue3完整教程从入门到精通(新人必学1,vue3快速上手)
|
3月前
|
JavaScript 前端开发 C#
从入门到放弃,我们为何从 Blazor 回到 Vue
【10月更文挑战第29天】在前端开发中,许多开发者从尝试新技术 Blazor 最终回到熟悉的 Vue。主要原因包括:1) Blazor 学习曲线陡峭,Vue 上手容易;2) Vue 开发工具成熟,开发效率高;3) Vue 性能优异,优化简单;4) Vue 社区庞大,生态丰富;5) 项目需求和团队协作更适配 Vue。选择技术栈需综合考虑多方面因素。
173 0
|
4月前
|
JSON 前端开发 JavaScript
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
该文章提供了Webpack的基础入门指南,涵盖安装配置、基本使用、加载器(Loaders)、插件(Plugins)的应用,以及如何通过Webpack优化前端项目的打包构建流程。
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
|
5月前
|
缓存 监控 JavaScript
vue从安装到熟练 2022流畅无痛版(第一季:入门篇)
该文章是《vue从安装到熟练 2022流畅无痛版》系列的第一季入门篇,介绍了Vue的基本概念、环境配置、项目创建与运行,并通过修改HelloWorld.vue和App.vue文件内容展示了如何在页面上显示"Hello World",最后还提供了Vue官方文档链接和介绍了Vue的常用内置指令和模板语法等基础知识。
vue从安装到熟练 2022流畅无痛版(第一季:入门篇)

热门文章

最新文章

下一篇
开通oss服务