config.js 7.4 KB

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