config.js 8.4 KB

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