vue2.x 对象劫持的原理实现
目标:手写迷你版Vue
一:使用rollup打包,打包后的代码体积更小,更适合写框架源码的打包
npmirollup-D
二:安装babel相关的包,以及实现静态服务,设置环境变量的包
npmi@babel/core@babel/preset-envrollup-plugin-babelroullup-plugin-servecross-env-D
三:包的相关介绍
- rollup(打包工具)
- @babel/core(用babel核心模块)
- @babel/preset-env(babel将高级语法转成低级语法)
- rollup-plugin-serve(实现静态服务)
- cross-env(设置环境变量)
- rollup-plugin-babel(桥梁)
四:根目录书写rollup.config.js
importbabelfrom'rollup-plugin-babel';
importservefrom'rollup-plugin-serve';
exportdefault{
input:'./src/index.js',//以哪个文件作为打包的入口
output:{
file:'dist/umd/vue.js',//出口路径
name:'Vue',//指定打包后全局变量的名字
format:'umd',//统一模块规范
sourcemap:true,//es6->es5开启源码调试可以找到源代码的报错位置
},
plugins:[//使用的插件
babel({
exclude:"node_modules/**"
}),
process.env.ENV==='development'?serve({
open:true,
openPage:'/public/index.html',//默认打开html的路径
port:3000,
contentBase:''
}):null
]
}
配置package.josn
{
"name":"vue_souce",
"version":"1.0.0",
"description":"",
"main":"index.js",
"scripts":{
"build:dev":"rollup-c",
"serve":"cross-envENV=developmentrollup-c-w"
},
"keywords":[],
"author":"",
"license":"ISC",
"devDependencies":{
"@babel/core":"^7.9.0",
"@babel/preset-env":"^7.9.5",
"cross-env":"^7.0.2",
"rollup":"^2.6.1",
"rollup-plugin-babel":"^4.4.0",
"rollup-plugin-serve":"^1.0.1"
}
}
五:新建index.html(public/index.html)
Document