vue_day06

url-loader

默认情况下,webpack无法处理css文件中的url地址,不管是图片还是字体库,只要是url地址都处理不了.
安装:cnpm install url-loader file-loader -D

image.png

默认会把图片进行base64格式编码成字符串,来减少二次请求.
在webpack.config.js中配置loader规则时,可以通过传参改为普通的图片地址而不进行base64编码

image.png

可以指定name属性,name=[hash:8]-[name].[ext]可以指定新的文件名为该文件的hash码前8位+"-"+之前的文件名称和后缀

image.png

使用url-loader处理字体

image.png

关于main.js中引入包的 问题

原因:bootstrap是node_modules下面的一个模块,所以不用写包名,他会现在核心模块中找,找不到就认为是第三方模块 然后去node_modules下去找这个模块.

image.png

错误调试

image.png

原因:package.json格式中不允许有注释,json的格式错误

image.png

原因:在package.json中的"devDependencies"节点中存在"webpack-dev-server",仅仅说明曾经使用cnpm install webpack-dev-server -D安装过,然后把名称写入到了"devDependencies"节点中.要以node_modules中存在模块为准.
如果上次出现安装模块失败,或者下载中断,应该在package.json文件中,清空"devDependencies",然后重新下载,防止项目重新启动又关联到错误的模块.

使用npm下载报错:
npm resource busy or locked.....
需要清理缓存:npm cache clean

babel模块

webpack中,只能默认处理一部分ES6的新语法,其他的就处理不了,必须依赖其他的loader来处理,处理完毕后,返回给webpack去打包到bundle.js中,通过babel可以帮我们把高级的语法转成低级的语法
1.在webpack中可以运行如下两套命令,安装两套包,去安装babel相关的loader功能
1.1第一套包:cnpm install babel-core babel-loader babel-plugin-transform-runtime -D(转换器)
1.2第二套包:cnpm install babel-preset-env babel-preset-stage-0 -D(语法插件)
2.打开webpack.config.js在module节点下的rules数组中,加入新的匹配规则:
2.1 {test:/.js$/,loader:'babel-loader',exclude:/node_modules/}
2.2 注意:在配置babel的loader规则的时候,必须把node_modules目录,通过exclude排除掉,原因:
2.2.1 如果不排除,node_modules,则babel会把node_modules中所有的第三方js文件都打包编译,这样会非常消耗cpu,同时打包速度非常慢.
2.2.2 哪怕,最终babel把node_modules中所有的js都转换完毕了,但是,项目也无法正常运行.
3.在项目的根目录中,新建一个 叫做 .babelrc的babel配置文件,这个配置文件,属于json格式,必须符合json语法规范,不能写注释,字符串必须用双引号.
3.1 在 .babelrc中写如下配置:
{ "presets":["env","stage-0"], "plugins":["transform-runtime"] }

image.png

注意:exclude和test,不能写字符串,否则,webpack在打包的时候会将node_modules中的js文件一起打包,项目启动会报错.

使用render方法来渲染组件

使用render方法相当于v-text指令,会把Vue实例中的el所指向的控制区域清空,替换成渲染好的html,必须要有return.
而使用components注册组件后,然后通过<组件名>这个标签引入,相当于插值表达式,不会影响el所控制区域的其他数据,可以存在多个组件.

image.png

在webpack中使用vue

在webpack中直接导入Vue的构造函数,功能不全,相比通过<script>标签导入的,他只是个阉割版.
页面报错:因为此时的Vue只是个runtime-only的方式.

image.png
image.png

import Vue from 'vue'var vue = require("vue")的查找规则一样

1.找项目根目录中有没有node_modules的文件夹
2.在node_modules中根据包名,找对应的vue文件夹
3.在vue文件夹中,找一个叫做package.json的包配置文件.
4.在package.json文件中,查找一个main属性[main属性指定了这个包在被加载的时候 的入口文件]
解决方法1:
import Vue from "./node_modules/vue/dist/vue.js" 在main.js中导入Vue构造函数直接指定好.
解决方法2:
仍旧使用import Vue from "vue",但是在webpack.config.js中增加一个resolve节点,增加alias子节点,通过配置vue的真正的查找路径来解决.
这样配置后,当import Vue from "vue"之后,他会在配置文件中的resolve节点下进行匹配,发现是vue结尾,那么会去dist目录下查找指定的js文件并加载.

image.png

把组件单独抽取成.vue文件

.vue的格式:
使用import login from './login.vue'导入的模板实际上是 .vue 中三个标签组装好后的模板.

image.png

默认 webpack无法打包 .vue文件,需要安装相关的loader
cnpm i vue-loader vue-template-complier -D
安装之后,需要在webpack.config.js中新增一个module-->rules的规则
此时控制台还会报错:

image.png

原因: . Vue-loader在15.*之后的版本都是 vue-loader的使用都是需要伴生 VueLoaderPlugin的,
参考自:https://blog.csdn.net/cominglately/article/details/80555210

在webpack.config.js中导入vue-loader/lib/plugin
const VueLoaderPlugin = require('vue-loader/lib/plugin');
在plugins中加入new VueLoaderPlugin()就可以解决.

在webpack中如果想要通过vue把一个组件放到页面中去展示,vm实例中的render函数可以实现.

image.png

上述代码可以通过箭头函数简写成:
render c => c(login)

总结梳理:

1.安装vue包:cnpm i vue -S
2.由于在webpack中,推荐使用 .vue这个组件模板文件定义组件,所以,需要安装 能够解析这种文件的loader cnpm i vue-loader vue-template-compiler -D
3.在main.js中导入vue模块,import Vue from 'vue'
4.定义一个 .vue 结尾的组件,其中 组件有三部分组成,template script style
5.使用import导入这个组件
6.创建vm实例, var vm = new Vue({ el : "#app" , render: c => c(login) })
7.在页面中创建一个id为app的div元素,作为我们vm实例要控制的区域.

export default 和 export

在ES6中,也通过规范的形式,规定了ES6中如何导入和导出
ES6中导入模块,使用 import 模块名称 from '模块标识符'import '表示路径'

在ES6中,使用export default和export向外暴露成员

在Node中,使用 var 名称 = require('模块标识符')
module.exportsexports来暴露成员

export default 向外暴露的成员,可以使用任意的变量接收.

在一个模块中,export default 只允许向外暴露一次

在一个模块中,可以同时使用export default 和export向外暴露成员.

使用export向外暴露的成员,只能使用 花括号 的形式,这种形式 叫做 [按需导出]

export可以向外暴露多个成员,同时 如果某些成员 在我们import的时候,不需要 则可以不在{ }中定义

使用export导出的成员,必须严格按照导出时候的名称,来使用{ }按需接收.

使用export导出的成员,如果需要使用别名,可以用 as 起别名import {name as n} from './test.js'

webpack集合vue-router模块

image.png

注意:app这个组件,是通过vm实例的render函数,渲染出来的,render函数如果要渲染组件,渲染出来的组件只能放到 el : "#app" 所指定的元素中去.

Account和Goodslist组件,是通过路由匹配监听到的,这两个组件,只能展示到属于 路由的<router-view>标签中去.

webpack实现子路由功能

和实现嵌套组件一样,通过children属性

image.png

组件中<style>标签的属性lang和scoped:

image.png

建议:每个组件的<style>标签都开启scoped属性,私有这个样式

抽取路由模块

image.png

可以把涉及路由的代码抽取到一个单独的模块中,然后向外暴露一个成员,也就是router实例,以供外部的main.js中的Vue实例使用.

组件中<style>元素中scoped属性的实现原理:

image.png

只要为样式开启了scoped属性,就会为响应的<div>元素添加一个data-v-xxx的属性,后期通过css的属性选择器来实现私有样式.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容