Vue2.5.9源码解读(2) — build/config.js
来源:互联网 发布:python调用exe程序 编辑:程序博客网 时间:2024/06/07 15:24
const banner = '/*!\n' + ' * Vue.js v' + version + '\n' + ' * (c) 2014-' + new Date().getFullYear() + ' Evan You\n' + ' * Released under the MIT License.\n' + ' */'
在生成的文件中添加的vuejs版本、版权、许可声明信息。
// 为一些路径起别名const aliases = { vue: resolve('src/platforms/web/entry-runtime-with-compiler'), compiler: resolve('src/compiler'), core: resolve('src/core'), shared: resolve('src/shared'), web: resolve('src/platforms/web'), weex: resolve('src/platforms/weex'), server: resolve('src/server'), entries: resolve('src/entries'), // 2.5.9版本中已经不存在这个目录,只是别名模块中还存在[不影响] sfc: resolve('src/sfc')};// 判断别名对象中是否存在传入参数的第一个元素对应的键值const resolve = p => { // 将传入字符串参数分割成数组,并取出第一个元素 const base = p.split('/')[0] // 如果别名对象中存在第一个元素对应的键值,则返回的路径为别名对应值与参数除第一个元素外的字符串组成的全路径,参看示例1。 if (aliases[base]) { return path.resolve(aliases[base], p.slice(base.length + 1)) } // 否则,返回值为当前目录的上一级路径与参数组成的全路径,参看示例2。 else { return path.resolve(__dirname, '../', p) }}// 示例1. resolve('web/entry-runtime-with-compiler.js'); => [vue-2.5.9/]src/platforms/web/entry-runtime-with-compiler.js2. resolve('dist/vue.js'); => [vue-2.5.9/]/dist/vue.js
resolve主要是为了方便操作路径。
// 可以认为是编译的对象的配置,源码中都有对每个对象的注释const builds = { // 只运行时(CommonJS). 使用bundlers,如Webpack、Browserify 'web-runtime-cjs': ..., // 运行时+编译 CommonJS构建(CommonJS) 'web-full-cjs': ..., // 只运行时(ES Modules). 使用支持ES Modules的bundler,如Rollup、Webpack2 'web-runtime-esm': ..., // 运行时+编译 ES Modules构建(ES Modules) 'web-full-esm': ..., // 只运行时,开发环境构建(Browser) 'web-runtime-dev': ..., // 只运行时,生产环境构建(Browser) 'web-runtime-prod': ..., // 运行时+编译 开发环境构建(Browser) 'web-full-dev': ..., // 运行时+编译 生产环境构建(Browser) 'web-full-prod': ..., // web平台 编译(CommonJS) 'web-compiler': ..., // web平台 编译(Browser) 'web-compiler-browser': ..., // web平台服务端渲染(CommonJS) 'web-server-renderer': ..., // web平台服务端渲染(UMD) 'web-server-basic-renderer': ..., // web平台服务端渲染(CommonJS),使用webpack server插件 'web-server-renderer-webpack-server-plugin': ..., // web平台服务端渲染(CommonJS),使用webpack client插件 'web-server-renderer-webpack-client-plugin': ..., // weex平台 运行时 factory (CommonJS) 'weex-factory': ..., // weex平台 运行时 framework (CommonJS) 'weex-framework': ..., // weex平台 编译 (CommonJS)。使用weex的webpack装载器 'weex-compiler': ...};// 根据不同的process.env.TARGET生成不同的配置function genConfig (name) { const opts = builds[name] const config = { input: opts.entry, external: opts.external, plugins: [ replace({ __WEEX__: !!opts.weex, __WEEX_VERSION__: weexVersion, __VERSION__: version }), flow(), buble(), alias(Object.assign({}, aliases, opts.alias)) ].concat(opts.plugins || []), output: { file: opts.dest, format: opts.format, banner: opts.banner, name: opts.moduleName || 'Vue' } } // 如果有配置env,则修改config.plugins中的process.env.NODE_ENV的值为配置的env值 if (opts.env) { config.plugins.push(replace({ 'process.env.NODE_ENV': JSON.stringify(opts.env) })) } // 为config定义一个_name属性,属性值为enumerable和value Object.defineProperty(config, '_name', { enumerable: false, // 不可枚举 value: name }) return config}
genConfig根据指定的process.env.TARGET与builds中的键做对比,如果在builds中存在对应的键,则生成并对应的配置。这里并没有做指定的process.env.TARGET不存在于builds中的处理。
if (process.env.TARGET) { module.exports = genConfig(process.env.TARGET)} else { exports.getBuild = genConfig exports.getAllBuilds = () => Object.keys(builds).map(genConfig)}
如果指定了process.env.TARGET,则按指定的导出;否则提供getBuild和getAllBuilds方法。
阅读全文
0 0
- Vue2.5.9源码解读(2) — build/config.js
- node.js——http源码解读
- Zepto.js 源码解读
- push.js 源码解读
- jit.js源码解读
- vue.js 源码解读
- [源码解读] FastClick.js源码解读
- debian---2-----live-build-config
- webpack.config.js源码解析
- Zepto源码解读-zepto.js
- Node.js-require() 源码解读
- OpenLayers 2 源码解读(2) Class.js
- dubbo源码深度解读二之config模块
- Caffe源码解读2 —— SyncedMemory
- Ibatisnet源码解读(2)—DataMapper
- CppUnit源码解读(2)
- CYYMysql 源码解读 2
- jqzoom源码解读 2
- DNS解析过程
- PAT考试乙级1050(C语言实现) (重点题目)(memset以及思路)
- NuttX用户手册阅读记录2
- Q版缓冲区溢出教程-第一章读书笔记
- HDOJ 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你(水题)
- Vue2.5.9源码解读(2) — build/config.js
- ERROR:Pack:2860
- Linux下redis-cluster单机集群安装方法
- 趣写算法系列之--匈牙利算法
- 011大数据课程知识点小结
- DirectShow下的MediaType与VideoInfoHeader问题
- 矩阵求导
- officemix安装 0x80091007 哈希数值不正确
- JAVA IO源码学习系列一(FilterInpuStream 和FilterOutputStream)