Vue汇总~不断更新ing

Vue-cli

全局安装脚手架(vue-cli)
npm install -g vue-cli
在这里插入图片描述

查看版本(vue -V)
在这里插入图片描述

初始化项目(vue init webpack 项目名)
vue init webpack project
在这里插入图片描述
在这里插入图片描述

项目搭建好了,使用webstorm跑一下(如图所示)

本地运行:npm run dev
打包上线:npm run build
在这里插入图片描述
build 编译打包平时的配置信息
config 配置信息
dist 打包之后的项目目录
src 项目的源码目录
assets 也可以放资源 这里的图片会被变成base64
main.js js的入口文件
xxx.vue 单文件组件 模板 js(组件的配置项) 样式
static 静态目录 访问资源需要用根路径访问 /static/xxx.jpg
index.html 唯一的入口页面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

vue-cli 工程技术集合介绍

vue.js:vue-cli工程的核心,主要特点是 双向数据绑定 和 组件系统。
vue-router:vue官方推荐使用的路由框架。
vuex:专为 Vue.js 应用项目开发的状态管理器,主要用于维护vue组件间共用的一些 变量 和 方法。
axios( 或者 fetch 、ajax ):用于发起 GET 、或 POST 等 http请求,基于 Promise 设计。
vuex:数据共享管理
创建一个emit.js文件,用于vue事件机制的管理。
webpack:模块加载和vue-cli工程打包器。

vue complier 实现

模板解析这种事,本质是将数据转化为一段 html ,最开始出现在后端,经过各种处理吐给前端。
随着各种 mv* 的兴起,模板解析交由前端处理。
总的来说,Vue complier 是将 template 转化成一个 render 字符串。

可以简单理解成以下步骤

  • parse 过程,将 template 利用正则转化成 AST 抽象语法树。 ​
  • optimize过程,标记静态节点,后 diff 过程跳过静态节点,提升性能。
  • generate 过程,生成 render 字符串

什么是vue-loader?

  • vue-loader就是一个加载器,把vue组件转换成js模块
  • 为何要转译此模块?

可以动态的渲染一些数据
对三个标签做了优化
template 写虚拟dom
script 写es6语法
style 默认可以用scss语法,提供了作用域
并且开发阶段提供了热加载功能

实现 Vue SSR

其基本实现原理
​	app.js 作为客户端与服务端的公用入口,导出 Vue 根实例,供客户端 entry 与服务端 entry 使用。
客户端 entry 主要作用挂载到 DOM 上,服务端 entry 除了创建和返回实例,还进行路由匹配与数据预获取。
​	
​	webpack 为客服端打包一个 Client Bundle ,为服务端打包一个 Server Bundle 。
​	
​	服务器接收请求时,会根据 url,加载相应组件,获取和解析异步数据,创建一个读取 Server Bundle 
的 BundleRenderer,然后生成 html 发送给客户端。
​	
​	客户端混合,客户端收到从服务端传来的 DOM 与自己的生成的 DOM 进行对比,把不相同的 DOM 激活,
使其可以能够响应后续变化,这个过程称为客户端激活 。为确保混合成功,客户端与服务器端需要共享同一套数据
在服务端,可以在渲染之前获取数据,填充到 stroe 里,这样,在客户端挂载到 DOM 之前,可以直接从 store 
里取数据。
首屏的动态数据通过 window.__INITIAL_STATE__ 发送到客户端

​	
​	Vue SSR 的实现,主要就是把 Vue 的组件输出成一个完整 HTML, vue-server-renderer 就是干这事的
	Vue SSR 需要做的事多点(输出完整 HTML),除了 complier -› vnode,还需如数据获取填充至 HTML、
	客户端混合(hydration)、缓存等等。 相比于其他模板引擎(ejs, jade 等),
	最终要实现的目的是一样的,性能上可能要差点



Vue中mixin和mixins的区别

mixin用于全局注册一个混入,如果有公共的组件使用频率很高的话,可以使用mixin很方便的引入公共的部分
mixins选项接受一个混入对象的数组,mixins在引入组件之后,则是将组件内部的内容如data属性,
methods方法与父组件的内容相对应进行合并,可以对父组件的属性进行扩充,
mixins混入的钩子函数会优先于组件内的钩子函数执行,并且在遇到同名选项的时候也会有选择性的进行合并。

为组件样式设置作用域

你不一定要使用 scoped attribute。
设置作用域也可以通过 CSS Modules,
那是一个基于 class 的类似 BEM 的策略\

<template>
  <button class="button button-close">X</button>
</template>

<!-- 使用 `scoped` attribute -->
<style scoped>
.button {
    
    
  border: none;
  border-radius: 2px;
}

.button-close {
    
    
  background-color: red;
}
</style>



<template>
  <button :class="[$style.button, $style.buttonClose]">X</button>
</template>

<!-- 使用 CSS Modules -->
<style module>
.button {
    
    
  border: none;
  border-radius: 2px;
}

.buttonClose {
    
    
  background-color: red;
}
</style>



<template>
  <button class="c-Button c-Button--close">X</button>
</template>

<!-- 使用 BEM 约定 -->
<style>
.c-Button {
    
    
  border: none;
  border-radius: 2px;
}

.c-Button--close {
    
    
  background-color: red;
}
</style>

在这里插入图片描述

Guess you like

Origin blog.csdn.net/qq_45271323/article/details/106636183