vue源码(1)

flow:

vue.js源码目录设计

javascript通常写es6,es6用babel编译

类型检查:编译期检查,运行不检查

之所以yongflow,因为babel和eslint都有对应的
flow插件以支持语法,可以沿用现有的构建配置,
非常小成本的改动就可以拥有静态类型检查的能力

flow工作方式:
类型检查分2种,
类型推断:通过变量的使用上下文推断出变量类型,
根据这些推断来检查类型
类型注释:事先注释好我们期待类型,flow会基于这些
注释来判断

》npm install -g flow-bin
>flow init    //创建flowconfig文件


给类型打上标记
function add(x:number, y:number): number{
  return x+y
}
add(12, 11)

在一个文件中出现/*@flow/才说明需要flow检查,
否则会跳过
var arr:Array<numer>=[1,2,3] 
//定义了一个 数字数组

arr.push('Hello')

constructor(x:string, y:string|number){
  
}
只传一个参数

class Bar{
  x:string;       //x是字符串
  y:string|number|void;
  z:boolean;
constructor(x:string, y:string|number|void){
  this.x=x
  this.y=y
  this.z=false
}  
}

var bar:Bar=new Bar('hello')
……

Null
若想任意类型t可以为null 或者 undefined,
只需写成?T的格式

/*@flow/
var foo: ?string=null
foo可以是字符串,也可以是null

检测第三方定义的类型:
flow提出一个libdef,可以识别第三方库或是
自定义类型

(虚拟node|void&null|typecript)

vue2.0目录结构:
compiler编译
core核心
server=》render核心
sfc  简单的解释器
shared  一些辅助的方法(一些常量、工具方法)


vuejs源码构建
基于 rollup
rollup  和 webpack都是构建工具
rollup更适合javascript库的编译

package.json  做描述
'main'  npm包的一个入口
'module'和'main' 非常类似,webpack2以上,
把module作为默认入口  .esm.js

"scripts":{
  
}
定义了很多脚本,每个脚本都是一个任务,通过
npm run执行不同的任务

源码托管在src目录下,通过构建生成的目标代码
生在dist


//scripts\build.js
let builds=require('./config').getAllBuilds()
//拿到所有的builds,之后做一层过滤,最终调用build函数,做真正的构建过程
build(builds)

//scripts\config.js
export.getAllBuild=()=>

const builds={
  entry:入口  通过resolve函数传递一个字符串
  dest:目标
}
//编译配置

//scripts\alias.js
  alias.js    提供真正地址的一个映射关系
const resolve=p => path.resolve(__dirname, '../', p) 
path.resolve   node.js提供的路径解析的一个方法
__dirname    当前的一个目录
alias
resolve 返回一个字符串flow:

vue.js源码目录设计

javascript通常写es6,es6用babel编译

类型检查:编译期检查,运行不检查

之所以yongflow,因为babel和eslint都有对应的
flow插件以支持语法,可以沿用现有的构建配置,
非常小成本的改动就可以拥有静态类型检查的能力

flow工作方式:
类型检查分2种,
类型推断:通过变量的使用上下文推断出变量类型,
根据这些推断来检查类型
类型注释:事先注释好我们期待类型,flow会基于这些
注释来判断

》npm install -g flow-bin
>flow init    //创建flowconfig文件


给类型打上标记
function add(x:number, y:number): number{
  return x+y
}
add(12, 11)

在一个文件中出现/*@flow/才说明需要flow检查,
否则会跳过
var arr:Array<numer>=[1,2,3] 
//定义了一个 数字数组

arr.push('Hello')

constructor(x:string, y:string|number){
  
}
只传一个参数

class Bar{
  x:string;       //x是字符串
  y:string|number|void;
  z:boolean;
constructor(x:string, y:string|number|void){
  this.x=x
  this.y=y
  this.z=false
}  
}

var bar:Bar=new Bar('hello')
……

Null
若想任意类型t可以为null 或者 undefined,
只需写成?T的格式

/*@flow/
var foo: ?string=null
foo可以是字符串,也可以是null

检测第三方定义的类型:
flow提出一个libdef,可以识别第三方库或是
自定义类型

(虚拟node|void&null|typecript)

vue2.0目录结构:
compiler编译
core核心
server=》render核心
sfc  简单的解释器
shared  一些辅助的方法(一些常量、工具方法)


vuejs源码构建
基于 rollup
rollup  和 webpack都是构建工具
rollup更适合javascript库的编译

package.json  做描述
'main'  npm包的一个入口
'module'和'main' 非常类似,webpack2以上,
把module作为默认入口  .esm.js

"scripts":{
  
}
定义了很多脚本,每个脚本都是一个任务,通过
npm run执行不同的任务

源码托管在src目录下,通过构建生成的目标代码
生在dist


//scripts\build.js
let builds=require('./config').getAllBuilds()
//拿到所有的builds,之后做一层过滤,最终调用build函数,做真正的构建过程
build(builds)

//scripts\config.js
export.getAllBuild=()=>

const builds={
  entry:入口  通过resolve函数传递一个字符串
  dest:目标
}
//编译配置

//scripts\alias.js
  alias.js    提供真正地址的一个映射关系
const resolve=p => path.resolve(__dirname, '../', p) 
path.resolve   node.js提供的路径解析的一个方法
__dirname    当前的一个目录
alias
resolve 返回一个字符串

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值