在手写 Vue1 时,编译器时通过 DOM API 来遍历模版的 DOM 结构来完成的,在 Vue2 中不再使用这种方式,而是和官方一样,直接编译组件的模版字符串,生成 AST,然后从 AST 生成渲染函数。 首先将 Vue1 的 compiler 目录备份,然后新建一个 compiler 目录,作为 Vue2 的编译器目录 mv compiler compiler-vue1 && mkd...
编译过程 借助插件vue-template-compiler将vue 文件编译成 render 函数 执行render 函数,返回 vnode 基于vnode 执行 patch 和 diff ,完成 DOM 渲染 演示代码 const compiler = require('vue-template-compiler')const template = `{{message}}`const res = compiler.compile(template)console.log(res.render) 得到...
constcompiler=require('vue-template-compiler') API compiler.compile(template, [options]) Compiles a template string and returns compiled JavaScript code. The returned result is an object of the following format: {ast: ?ASTElement,// parsed template elements to ASTrender:string,// main render fu...
Runtime-Compiler和Runtime-only的区别 其实他们两就一个区别 就是main.js 文件中: VS 无非就是那个 render ,这个东西非同小可 ,下面解释说明: 就是:template -> ast -> render -> vdom -> UI 或 render -> vdom -> UI 那肯定是右边那个解析快啊 ,所以呢最终引用的是render函数中的数据,之前的什么什么...
module.exports=function(source){// 这里就是.vue文件的ASTconstloaderContext=this...// 解析.vue原文件,source对应的就是.vue模板constdescriptor=compiler.parse({source,compiler:options.compiler||templateCompiler,filename,sourceRoot,needMap:sourceMap})...// 使用webpack query sourcelettemplateImport=`var ...
npm i vue-template-compiler@2.7.14 (这里的版本必要要跟vue的版本一致) 5、gulp打包css文件 根目录新建gulpfile.js 安装相关依赖: npminstallgulp gulp-sass gulp-minify-css //gulpfile.jsconst gulp = require('gulp'); const sass= require('gulp-sass')( require ( 'sass' ) )//sass转成cssconst...
"vue-template-compiler": "^2.6.0" } } 文件结构: Vue 3的项目结构通常包括一个src目录,里面有main.js或main.ts文件,并且大多数情况下会使用单文件组件(SFC)。Vue 2的项目结构也类似,但Vue 3可能会有一些新的文件或目录,例如setup函数的使用。
3. compiler实现对各个指令模板的解析器 通过compiler实现对vue各个指令模板的解析器,生成抽象语法树,编译成Virtual Dom,渲染视图。// 编译器 function compiler(node, vm){ var reg = /\{\{(.*)\}\}/;// 节点类型为元素 if(node.nodeType ===1){ var attr = node.attributes;// 解析属性 for(var...
Vue.js 提供了 2 个版本,一个是 Runtime + Compiler 的,一个是 Runtime only 的,前者是包含编译代码的,可以把编译过程放在运行时做,后者是不包含编译代码的,需要借助 webpack 的 vue-loader 事先把模板编译成 render函数。 下一章我们将介绍 render 和 patch 过程。关于 render函数如何生成虚拟DOM,以及如何...
vue-template-compiler包 vue-loader的作用就是可以把一个模版变成一个对象。内部用到一个NPM包:《vue-template-compiler》 (插槽、指令等也是用的这个包来处理的,可以自己安装包看下) 包内VueTemplateCompiler.compile就是用来将模版转化成AST语法树的。