config.js 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  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').nodeResolve
  7. const ts = require('rollup-plugin-typescript2')
  8. // const babel = require('@rollup/plugin-babel').babel
  9. const version = process.env.VERSION || require('../package.json').version
  10. const weexVersion = process.env.WEEX_VERSION || 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(require('../packages/vue-template-compiler/package.json').dependencies)
  143. },
  144. // Web compiler (UMD for in-browser use).
  145. 'web-compiler-browser': {
  146. entry: resolve('web/entry-compiler.ts'),
  147. dest: resolve('packages/vue-template-compiler/browser.js'),
  148. format: 'umd',
  149. env: 'development',
  150. moduleName: 'VueTemplateCompiler',
  151. plugins: [node(), cjs()]
  152. },
  153. // Web server renderer (CommonJS).
  154. 'web-server-renderer-dev': {
  155. entry: resolve('web/entry-server-renderer.ts'),
  156. dest: resolve('packages/vue-server-renderer/build.dev.js'),
  157. format: 'cjs',
  158. env: 'development',
  159. external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
  160. },
  161. 'web-server-renderer-prod': {
  162. entry: resolve('web/entry-server-renderer.ts'),
  163. dest: resolve('packages/vue-server-renderer/build.prod.js'),
  164. format: 'cjs',
  165. env: 'production',
  166. external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
  167. },
  168. 'web-server-renderer-basic': {
  169. entry: resolve('web/entry-server-basic-renderer.ts'),
  170. dest: resolve('packages/vue-server-renderer/basic.js'),
  171. format: 'umd',
  172. env: 'development',
  173. moduleName: 'renderVueComponentToString',
  174. plugins: [node(), cjs()]
  175. },
  176. 'web-server-renderer-webpack-server-plugin': {
  177. entry: resolve('server/webpack-plugin/server.ts'),
  178. dest: resolve('packages/vue-server-renderer/server-plugin.js'),
  179. format: 'cjs',
  180. external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
  181. },
  182. 'web-server-renderer-webpack-client-plugin': {
  183. entry: resolve('server/webpack-plugin/client.ts'),
  184. dest: resolve('packages/vue-server-renderer/client-plugin.js'),
  185. format: 'cjs',
  186. external: Object.keys(require('../packages/vue-server-renderer/package.json').dependencies)
  187. },
  188. // Weex runtime factory
  189. 'weex-factory': {
  190. weex: true,
  191. entry: resolve('weex/entry-runtime-factory.ts'),
  192. dest: resolve('packages/weex-vue-framework/factory.js'),
  193. format: 'cjs',
  194. plugins: [weexFactoryPlugin]
  195. },
  196. // Weex runtime framework (CommonJS).
  197. 'weex-framework': {
  198. weex: true,
  199. entry: resolve('weex/entry-framework.ts'),
  200. dest: resolve('packages/weex-vue-framework/index.js'),
  201. format: 'cjs'
  202. },
  203. // Weex compiler (CommonJS). Used by Weex's Webpack loader.
  204. 'weex-compiler': {
  205. weex: true,
  206. entry: resolve('weex/entry-compiler.ts'),
  207. dest: resolve('packages/weex-template-compiler/build.js'),
  208. format: 'cjs',
  209. external: Object.keys(require('../packages/weex-template-compiler/package.json').dependencies)
  210. }
  211. }
  212. function genConfig (name) {
  213. const opts = builds[name]
  214. // console.log('__dir', __dirname)
  215. const config = {
  216. input: opts.entry,
  217. external: opts.external,
  218. plugins: [
  219. // flow(),
  220. ts({
  221. tsconfig: path.resolve(__dirname, '../', 'tsconfig.json'),
  222. cacheRoot: path.resolve(__dirname, '../','node_modules/.rts2_cache'),
  223. tsconfigOverride: {
  224. // compilerOptions: {
  225. // sourceMap: output.sourcemap,
  226. // declaration: shouldEmitDeclarations,
  227. // declarationMap: shouldEmitDeclarations
  228. // },
  229. exclude: ['test', 'test-dts']
  230. }
  231. }),
  232. // babel({
  233. // extensions: ['.js', '.jsx', '.ts', '.tsx']
  234. // }),
  235. alias(Object.assign({}, aliases, opts.alias))
  236. ].concat(opts.plugins || []),
  237. output: {
  238. file: opts.dest,
  239. format: opts.format,
  240. banner: opts.banner,
  241. name: opts.moduleName || 'Vue',
  242. exports: 'auto'
  243. },
  244. onwarn: (msg, warn) => {
  245. if (!/Circular/.test(msg)) {
  246. warn(msg)
  247. }
  248. }
  249. }
  250. // built-in vars
  251. const vars = {
  252. __WEEX__: !!opts.weex,
  253. __WEEX_VERSION__: weexVersion,
  254. __VERSION__: version
  255. }
  256. // feature flags
  257. Object.keys(featureFlags).forEach(key => {
  258. vars[`process.env.${key}`] = featureFlags[key]
  259. })
  260. // build-specific env
  261. if (opts.env) {
  262. vars['process.env.NODE_ENV'] = JSON.stringify(opts.env)
  263. }
  264. vars.preventAssignment = true
  265. config.plugins.push(replace(vars))
  266. if (opts.transpile !== false) {
  267. config.plugins.push(buble())
  268. }
  269. Object.defineProperty(config, '_name', {
  270. enumerable: false,
  271. value: name
  272. })
  273. return config
  274. }
  275. if (process.env.TARGET) {
  276. module.exports = genConfig(process.env.TARGET)
  277. } else {
  278. exports.getBuild = genConfig
  279. exports.getAllBuilds = () => Object.keys(builds).map(genConfig)
  280. }