Vue.js源码是基于Rollup构建的,它的构建相关配置都在源码scripts目录下。
Rollup 是一个 轻量的JavaScript 模块打包器,以将小块代码编译成大块复杂的代码,例如 library 或应用程序。Rollup 对代码模块使用新的标准化格式,这些标准都包含在 JavaScript 的 ES6 版本中,而不是以前的特殊解决方案,如 CommonJS 和 AMD。ES6 模块可以使你自由、无缝地使用你最喜爱的 library 中那些 最有用独立函数,而你的项目不必携带其他未使用的代码。ES6 模块最终还是要由浏览器原生实现,但当前 Rollup 可以使你提前体验。
构建脚本
通常一个基于 NPM 托管的项目都会有一个 package.json 文件,它是对项目的描述文件,它的内容实际上是一个标准的 JSON 对象。
我们通常配置script字段作为NPM的执行脚本,Vue.js 源码构建的脚本如下:
这里总共有 3 条命令,作用都是构建 Vue.js,后面 2 条是在第一条命令的基础上,添加一些环境参数。
当在命令行运行 npm run build 的时候,实际上就会执行 node scripts/build.js,接下来我们来看看它实际是怎么构建的。
构建过程
主要过程入口JS在scripts/build.js里面
1. 首先会从配置文件中读取配置,然后根据命令行参数(process.argv[2])对配置文件做过滤,就可以构建不同用途的Vue.js(Vue.js 是一个跨平台的 MVVM 框架,它可以跑在 web 上,也可以配合 weex 跑在 native 客户端上;所以有两种Vue.js,一种是web、一种是weex跨平台)
2. 而配置文件在scripts/config.js的builds对象里面,遵循Rollup构建规则。
entry:构建的入口 JS 文件地址
dest :表示构建后的 JS 文件地址
format: 属性表示构建的格式,cjs 表示构建出来的文件遵循 CommonJS 规范,es 表示构建出来的文件遵循 ES Module 规范。 umd 表示构建出来的文件遵循 UMD 规范。
其中dest涉及到resolve方法,根据scripts/alias下的别名找到找到了最终路径。
最终在dist目录下生成对应打包文件。