Vue笔记(7) 很长

2022-09-20 20:49:17 浏览数 (1)

学习内容

⊙ 作用域插槽

⊙ ES6模块的导入和导出

⊙ 认识webpack

⊙ 安装webpack

⊙ 使用webpack

⊙ loader

⊙ ES6转ES5

作用域插槽

一句话来说就是: 父组件替换插槽的标签,但是内容由子组件来提供

现在做这个案例:

搭建好基本的结构

那么此时我想在vue实例组件中使用子组件中的PLanguage的data,显然是不能直接获取到的

所以要使用作用域插槽

首先要定义一个动态属性,和pLanguage绑定起来

现在我想以'='来分割PLanguage中的元素

ES6模块的导入和导出

终于学到新内容了,马上就到webpack了

首先创建了三个文件:

此时在aaa.js中定义了两个变量, 但是我想要在bbb.js中使用这两个变量:

此时,我们在html文件中先导入两这个JS文件, 同时要注意script标签的类型,是模块类型的,这样才不会引起各种问题

那么现在就要将aaa.js中的变量导出,使用export

那自然在bbb.js中就要导入了

import后面跟的是一个大括号,里面的变量名和被导入模块里的名字必须是一致的, export的时候叫什么名字import的时候也要取同样的名字

这个也有另一种写法:

但是此时就会报错:

告诉我们aaa.js中的export需要加上default,因为我们没有使用import{}的语法.

aaa.js文件的export default会输出一个叫default的变量,然后系统允许我们引用时为它取任意名字(aaa)

代码语言:javascript复制

如果想一次性全部导入:

不需要export default

认识webpack

官方解释:

从本质来说,webpack是一个现代的JavaScript应用的静态模块打包工具

安装webpack

webpack是需要依赖环境的,所以首先要安装node,直接在官网下载就好了,我之前已经安装过了

然后全局安装webpack,这里指定下载版本号3.6.0的,不然后面可能会出问题

开始安装:

npm i webpack@3.6.0 -g

安装得超级慢.....耐心等待吧

局部安装webpack

npm i webpack@3.6.0 --save-dev

使用webpack

初体验:

index.html是源html文件

src有js文件夹,image文件夹,css文件夹,里面是源js,源css和源图片等

main.js是入口文件,在入口文件中引入要用的css文件,js,图片等,打包好以后的文件(bundle.js)在index.html中引用

dist里面放的是打包好以后生成的文件(bundle.js)

我们的math函数,一个非常简单的两位数相加的函数

math.js

在main中的调用

main.js

然后我们只要在终端中输入以下命令:

就可以生成一个bundle文件,它会根据main.js中依赖的模块,将他们全部打包进去,所以不用担心math.js

里面就是这样的,我们不用管它

bundle.js

现在再在index中引入刚刚生成的bundle文件,就能使用了

index.html

使用的结果:

但是每次命令行这么长非常的麻烦,有没有办法能够让我们输入webpack就自动帮我们打包对应的文件到对应的文件夹里呢

首先新建一个文件夹

第一步: 初始化:

npm init -y

很庆幸学了node,到这里能听懂

然后需要在webpack下写一个配置webpack的配置文件,

在配置文件中这样写:

首先下载path这个包, npm i path

webpack.config.js

这个配置文件,其实就是一个 JS 文件,通过 Node 中的模块操作,向外暴露了一个配置对象

在配置文件中需要手动指定入口和出口,在任何模块文件内部,可以使用__dirname变量获取当前模块文件所在目录的完整绝对路径

代码语言:javascript复制

entry入口,表示,要使用 webpack 打包哪个文件

path指定 打包好的文件,输出到哪个目录中去

filename这是指定 输出的文件的名称

现在只要输入webpack就能自动打包啦,下面这样就是成功了

终端

现在还需要做一个映射,虽然现在看不出作用,但是后期需要,就是我们在终端中输入npm run build实现webpack

需要到package.json中设置一下

这样做是有好处的

我们在终端中直接运行webpack是使用的全局的webpack,而我们修改以后就会优先使用本地的webpack

loader

css-loader

但是我们的文件不止只有JS, 还会有其他格式的文件,比如CSS

现在看看怎么使用吧:

进入官网看一下

选择'样式'

按着步骤来就好了

注意一下安装版本:

npm install --save-dev css-loader@0.28.11

在src下面创建一个CSS文件

给背景一个颜色

normal.css

然后将这个CSS文件在main.js入口文件中引入一下

main.js

和前面的思路是一样的,把CSS文件当成一个模块去使用它,所以也是将它打包到bundle.js中,就可以使用了,但是由于webpack无法打包像css,less之类的文件,无法转换,所以才要使用loader

这个也是要配置的,文档中有写:

但是我们还没下载style-loader,暂时不写

webpack.config.js

现在运行npm run build,打开index.html看看效果

没有任何效果的哈,背景也没变色

这是因为CSS-loader只负责帮忙加载,但是没有解析,style-loader负责将样式添加到DOM中

所以安装一下style-loader:

npm install style-loader@0.23.1 --save-dev

然后进入webpack.config.js进行配置

也许会有个疑问,为什么是先写添加的,再写加载的呢?因为使用多个loader时,是从右向左的.

现在重新npm run build一下,注意只要代码改动了都需要重新run一下才能生效

url-loader

当然我们有时候还会有图片,所以我现在将网页的背景图设置为一张图片,

图片放在src文件下的image文件夹中

normal.css

然后尝试打包

当然会报错,因为我们的webpack只能处理js,报错提示我们需要用合适的loader来处理图片

来到官方文档,不知道为啥跑到资源模块里来了

安装一下:

npm install --save-dev url-loader@1.1.2

官方文档会告诉我们怎么配置,直接复制粘贴就OK了

webpack.congfig.js

修改一下limit限制(我改成了15000)以后,重新run一下再打开文件

file-loader

那如果我的limit设置的太小,run的时候就会报错

意思就是我们缺少一个file-loader,它的机制是这样的,假如我们的图片大小大于了limit的限制,他就会去查找file-loader,所以我们需要安装file-loader

安装:

npm install file-loader@2.0.0 --save-dev

安装完以后run了发现还是报错,此时我们的dist下面多了一张图片,

报错这张图片找不到

因为将图片通过base64进行编译了,所以会多出一张图片,打包的时候要连同这张一起发布,加载的时候应该加载这张编译后的

查看元素后发现它的查找路径有问题:因为这个图片不在这个文件夹的路径下

所以我们要想办法让他的路径变成这样的,图片就能显示出来了

webpack.config.js

再次run一下

这次就成功啦

看弹幕说为什么不把limit设置的非常大,这样就可以不要file-loader了,因为base64处理的图片会没原图那么清晰,所以只适合小图,大图还是用原图好。

但是我们生成的图片的名字很长,是一个32位的哈希值,为了避免重复的.但是在真实开发中,我们可能对打包的名字有一定的要求,比如在所有的图片放在一个文件夹中,跟上图片原来的名称,同时也要防止重复

webpack.config.js

注意是写在options里的哈

run一下:

ES6语法处理

我们观察我们的bundle文件,会发现里面还是ES6语法,那么对于一些还支持ES6的浏览器来说,就会出现问题.这个时候需要使用babel

npm install --save-derv babel-loader@7 babel-core babel-preset-es2015

接着还是配置,文档中直接复制就好

webpack.config.js

现在去复习一遍

我在这里说明一下版本的问题:

webpack:

  • npm install webpack@3.6.0 -g
  • npm install webpack@3.6.0 --save-dev

css-loader:

  • npm install --save-dev css-loader@0.28.11

style-loader:

  • npm install style-loader@0.23.1 --save-dev

url-loader:

  • npm install --save-dev url-loader@1.1.2

file-loader:

  • npm install file-loader@2.0.0 --save-dev

babel:

  • npm install --save-derv babel-loader@7 babel-core babel-preset-es2015

0 人点赞