答:是通过模板⾃动⽣成的
我们从构建指令⼊⼿,⼀步步分析element-ui官⽅⽂档的构建过程1,构建指令
\"deploy:build\": \"npm run build:file && cross-env NODE_ENV=production webpack --config build/webpack.demo.js && echo element.eleme.io>>examples/element-ui/CNAME\",
很显然这个指令分三部分,
npm run build:file
cross-env NODE_ENV=production webpack --config build/webpack.demo.js
echo element.eleme.io>>examples/element-ui/CNAME (这个没啥好说的,只是每次构建向CNAME中写⼊⼀句话⽽已)⾸先看 build:file具体内容
\"build:file\": \"node build/bin/iconInit.js & node build/bin/build-entry.js & node build/bin/i18n.js & node build/bin/version.js\",
这⾥分别执⾏了四个脚本⽂件,查看他们的内容,显然是通过node内置的fs指令通过模板⽂件⾃动⽣成另外⼀些代码,看看他们⽣成了什么代码:
iconInit.js, 这个⽣成了 /examples/icon.json⽂件,⾥⾯是项⽬中使⽤到的图标,这个icon.json的具体⽤法傻鱼没有进⼀步跟踪,也不是我们关注的重点
build-entry.js, 这个⽂件⽣成了elementUI源码的⼊⼝⽂件,没错⼊⼝⽂件是⾃动⽣成的 /src/index.js⽂件 ,仔细想想这样做的好处,当我们项⽬越来越庞⼤的时候,我们希望⽂件之间尽量减少耦合,⽐如这⾥使⽤模板,我们开发了⼀个新组建后,不需要⼈为的去修改⼊⼝⽂件来export我们⾃⼰的新组件,这样是不是减少了发⽣错误的概率。i18n.js, elementUI的⽂档有四个语⾔版本,看看这个脚本⽂件⽣成了那些代码
它竟然根据⼀个模板,⽣成了四个语⾔版本的vue⽂件(傻鱼⼀开始以为是在⼀个vue⽂件中通过i18n插件进⾏语⾔切换⽽已,现在看来显然是想错了。。。)
惊呆了,⼲嘛不直接使⽤i18n切换。。。。。。。
version.js,这个⽣成了⼀个verson.json⽂件,⾥⾯存了历史版本号。。。没啥好说的
接下来我们看
cross-env NODE_ENV=production webpack --config build/webpack.demo.js环境变量为 production,
查看webpack.demo.js的关键代码
这个⽂件中⼊⼝,出⼝,启动端⼝等都写得很清楚,我们这时回头看看examples下的⽂件,不正是我们熟悉的前端⼯程吗。以前我们把dist⽂件夹放到Nginx上,现在我们把element-ui ⽂件夹放到Nginx上以前⼊⼝⽂件是main⽂件,现在是entry⽂件
因篇幅问题不能全部显示,请点此查看更多更全内容