config.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. const path = require('path')
  2. const buble = require('rollup-plugin-buble')
  3. const alias = require('rollup-plugin-alias')
  4. const cjs = require('rollup-plugin-commonjs')
  5. const replace = require('rollup-plugin-replace')
  6. const node = require('rollup-plugin-node-resolve')
  7. const flow = require('rollup-plugin-flow-no-whitespace')
  8. const version = process.env.VERSION || require('../package.json').version
  9. const weexVersion = process.env.WEEX_VERSION || require('../packages/weex-vue-framework/package.json').version
  10. const featureFlags = require('./feature-flags')
  11. const banner =
  12. '/*!\n' +
  13. ` * Vue.js v${version}\n` +
  14. ` * (c) 2014-${new Date().getFullYear()} Evan You\n` +
  15. ' * Released under the MIT License.\n' +
  16. ' */'
  17. const weexFactoryPlugin = {
  18. intro () {
  19. return 'module.exports = function weexFactory (exports, document) {'
  20. },
  21. outro () {
  22. return '}'
  23. }
  24. }
  25. const aliases = require('./alias')
  26. const resolve = p => {
  27. const base = p.split('/')[0]
  28. if (aliases[base]) {
  29. return path.resolve(aliases[base], p.slice(base.length + 1))
  30. } else {
  31. return path.resolve(__dirname, '../', p)
  32. }
  33. }
  34. const builds = {
  35. // Runtime only (CommonJS). Used by bundlers e.g. Webpack & Browserify
  36. 'web-runtime-cjs-dev': {
  37. entry: resolve('web/entry-runtime.js'),
  38. dest: resolve('dist/vue.runtime.common.dev.js'),
  39. format: 'cjs',
  40. env: 'development',
  41. banner
  42. },
  43. 'web-runtime-cjs-prod': {
  44. entry: resolve('web/entry-runtime.js'),
  45. dest: resolve('dist/vue.runtime.common.prod.js'),
  46. format: 'cjs',
  47. env: 'production',
  48. banner
  49. },
  50. // Runtime+compiler CommonJS build (CommonJS)
  51. 'web-full-cjs-dev': {
  52. entry: resolve('web/entry-runtime-with-compiler.js'),
  53. dest: resolve('dist/vue.common.dev.js'),
  54. format: 'cjs',
  55. env: 'development',
  56. alias: { he: './entity-decoder' },
  57. banner
  58. },
  59. 'web-full-cjs-prod': {
  60. entry: resolve('web/entry-runtime-with-compiler.js'),
  61. dest: resolve('dist/vue.common.prod.js'),
  62. format: 'cjs',
  63. env: 'production',
  64. alias: { he: './entity-decoder' },
  65. banner
  66. },
  67. // Runtime only ES modules build (for bundlers)
  68. 'web-runtime-esm': {
  69. entry: resolve('web/entry-runtime.js'),
  70. dest: resolve('dist/vue.runtime.esm.js'),
  71. format: 'es',
  72. banner
  73. },
  74. // Runtime+compiler ES modules build (for bundlers)
  75. 'web-full-esm': {
  76. entry: resolve('web/entry-runtime-with-compiler.js'),
  77. dest: resolve('dist/vue.esm.js'),
  78. format: 'es',
  79. alias: { he: './entity-decoder' },
  80. banner
  81. },
  82. // Runtime+compiler ES modules build (for direct import in browser)
  83. 'web-full-esm-browser-dev': {
  84. entry: resolve('web/entry-runtime-with-compiler.js'),
  85. dest: resolve('dist/vue.esm.browser.js'),
  86. format: 'es',
  87. transpile: false,
  88. env: 'development',
  89. alias: { he: './entity-decoder' },
  90. banner
  91. },
  92. // Runtime+compiler ES modules build (for direct import in browser)
  93. 'web-full-esm-browser-prod': {
  94. entry: resolve('web/entry-runtime-with-compiler.js'),
  95. dest: resolve('dist/vue.esm.browser.min.js'),
  96. format: 'es',
  97. transpile: false,
  98. env: 'production',
  99. alias: { he: './entity-decoder' },
  100. banner
  101. },
  102. // runtime-only build (Browser)
  103. 'web-runtime-dev': {
  104. entry: resolve('web/entry-runtime.js'),
  105. dest: resolve('dist/vue.runtime.js'),
  106. format: 'umd',
  107. env: 'development',
  108. banner
  109. },
  110. // runtime-only production build (Browser)
  111. 'web-runtime-prod': {
  112. entry: resolve('web/entry-runtime.js'),
  113. dest: resolve('dist/vue.runtime.min.js'),
  114. format: 'umd',
  115. env: 'production',
  116. banner
  117. },
  118. // Runtime+compiler development build (Browser)
  119. 'web-full-dev': {
  120. entry: resolve('web/entry-runtime-with-compiler.js'),
  121. dest: resolve('dist/vue.js'),
  122. format: 'umd',
  123. env: 'development',
  124. alias: { he: './entity-decoder' },
  125. banner
  126. },
  127. // Runtime+compiler production build (Browser)
  128. 'web-full-prod': {
  129. entry: resolve('web/entry-runtime-with-compiler.js'),
  130. dest: resolve('dist/vue.min.js'),
  131. format: 'umd',
  132. env: 'production',
  133. alias: { he: './entity-decoder' },
  134. banner
  135. },
  136. // Web compiler (CommonJS).
  137. 'web-compiler': {
  138. entry: resolve('web/entry-compiler.js'),
  139. dest: resolve('packages/vue-template-compiler/build.js'),
  140. format: 'cjs',
  141. external: Object.keys(require('../packages/vue-template-compiler/package.json').dependencies)
  142. },
  143. // Web compiler (UMD for in-browser use).
  144. 'web-compiler-browser': {
  145. entry: resolve('web/entry-compiler.js'),
  146. dest: resolve('packages/vue-template-compiler/browser.js'),
  147. format: 'umd',
  148. env: 'development',
  149. moduleName: 'VueTemplateCompiler',
  150. plugins: [node(), cjs()]
  151. },
  152. // Web server renderer (CommonJS).
  153. 'web-server-renderer-dev': {
  154. entry: resolve('web/entry-server-renderer.js'),
  155. dest: resolve('packages/vue-server-renderer/build.dev.js'),
  156. format: 'cjs',
  157. env: 'development',
  158. external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
  159. },
  160. 'web-server-renderer-prod': {
  161. entry: resolve('web/entry-server-renderer.js'),
  162. dest: resolve('packages/vue-server-renderer/build.prod.js'),
  163. format: 'cjs',
  164. env: 'production',
  165. external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
  166. },
  167. 'web-server-renderer-basic': {
  168. entry: resolve('web/entry-server-basic-renderer.js'),
  169. dest: resolve('packages/vue-server-renderer/basic.js'),
  170. format: 'umd',
  171. env: 'development',
  172. moduleName: 'renderVueComponentToString',
  173. plugins: [node(), cjs()]
  174. },
  175. 'web-server-renderer-webpack-server-plugin': {
  176. entry: resolve('server/webpack-plugin/server.js'),
  177. dest: resolve('packages/vue-server-renderer/server-plugin.js'),
  178. format: 'cjs',
  179. external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
  180. },
  181. 'web-server-renderer-webpack-client-plugin': {
  182. entry: resolve('server/webpack-plugin/client.js'),
  183. dest: resolve('packages/vue-server-renderer/client-plugin.js'),
  184. format: 'cjs',
  185. external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
  186. },
  187. // Weex runtime factory
  188. 'weex-factory': {
  189. weex: true,
  190. entry: resolve('weex/entry-runtime-factory.js'),
  191. dest: resolve('packages/weex-vue-framework/factory.js'),
  192. format: 'cjs',
  193. plugins: [weexFactoryPlugin]
  194. },
  195. // Weex runtime framework (CommonJS).
  196. 'weex-framework': {
  197. weex: true,
  198. entry: resolve('weex/entry-framework.js'),
  199. dest: resolve('packages/weex-vue-framework/index.js'),
  200. format: 'cjs'
  201. },
  202. // Weex compiler (CommonJS). Used by Weex's Webpack loader.
  203. 'weex-compiler': {
  204. weex: true,
  205. entry: resolve('weex/entry-compiler.js'),
  206. dest: resolve('packages/weex-template-compiler/build.js'),
  207. format: 'cjs',
  208. external: Object.keys(require('../packages/weex-template-compiler/package.json').dependencies)
  209. }
  210. }
  211. function genConfig (name) {
  212. const opts = builds[name]
  213. const config = {
  214. input: opts.entry,
  215. external: opts.external,
  216. plugins: [
  217. flow(),
  218. alias(Object.assign({}, aliases, opts.alias))
  219. ].concat(opts.plugins || []),
  220. output: {
  221. file: opts.dest,
  222. format: opts.format,
  223. banner: opts.banner,
  224. name: opts.moduleName || 'Vue'
  225. },
  226. onwarn: (msg, warn) => {
  227. if (!/Circular/.test(msg)) {
  228. warn(msg)
  229. }
  230. }
  231. }
  232. // built-in vars
  233. const vars = {
  234. __WEEX__: !!opts.weex,
  235. __WEEX_VERSION__: weexVersion,
  236. __VERSION__: version
  237. }
  238. // feature flags
  239. Object.keys(featureFlags).forEach(key => {
  240. vars[`process.env.${key}`] = featureFlags[key]
  241. })
  242. // build-specific env
  243. if (opts.env) {
  244. vars['process.env.NODE_ENV'] = JSON.stringify(opts.env)
  245. }
  246. config.plugins.push(replace(vars))
  247. if (opts.transpile !== false) {
  248. config.plugins.push(buble())
  249. }
  250. Object.defineProperty(config, '_name', {
  251. enumerable: false,
  252. value: name
  253. })
  254. return config
  255. }
  256. if (process.env.TARGET) {
  257. module.exports = genConfig(process.env.TARGET)
  258. } else {
  259. exports.getBuild = genConfig
  260. exports.getAllBuilds = () => Object.keys(builds).map(genConfig)
  261. }