| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- // Using esbuild for faster dev builds.
- // We are still using Rollup for production builds because it generates
- // smaller files w/ better tree-shaking.
- // @ts-check
- const { context } = require('esbuild')
- const nodePolyfills = require('@esbuild-plugins/node-modules-polyfill')
- const { resolve, relative } = require('path')
- const args = require('minimist')(process.argv.slice(2))
- const target = args._[0] || 'vue'
- const format = args.f || 'global'
- const inlineDeps = args.i || args.inline
- const pkg = require(resolve(__dirname, `../packages/${target}/package.json`))
- // resolve output
- const outputFormat = format.startsWith('global')
- ? 'iife'
- : format === 'cjs'
- ? 'cjs'
- : 'esm'
- const postfix = format.endsWith('-runtime')
- ? `runtime.${format.replace(/-runtime$/, '')}`
- : format
- const outfile = resolve(
- __dirname,
- `../packages/${target}/dist/${
- target === 'vue-compat' ? `vue` : target
- }.${postfix}.js`
- )
- const relativeOutfile = relative(process.cwd(), outfile)
- // resolve externals
- // TODO this logic is largely duplicated from rollup.config.js
- let external = []
- if (!inlineDeps) {
- // cjs & esm-bundler: external all deps
- if (format === 'cjs' || format.includes('esm-bundler')) {
- external = [
- ...external,
- ...Object.keys(pkg.dependencies || {}),
- ...Object.keys(pkg.peerDependencies || {}),
- // for @vue/compiler-sfc / server-renderer
- 'path',
- 'url',
- 'stream'
- ]
- }
- if (target === 'compiler-sfc') {
- const consolidateDeps = require.resolve('@vue/consolidate/package.json', {
- paths: [resolve(__dirname, `../packages/${target}/`)]
- })
- external = [
- ...external,
- ...Object.keys(require(consolidateDeps).devDependencies),
- 'fs',
- 'vm',
- 'crypto',
- 'react-dom/server',
- 'teacup/lib/express',
- 'arc-templates/dist/es5',
- 'then-pug',
- 'then-jade'
- ]
- }
- }
- const plugins = [
- {
- name: 'log-rebuild',
- setup(build) {
- build.onEnd(() => {
- console.log(`built: ${relativeOutfile}`)
- })
- }
- }
- ]
- if (format === 'cjs' || pkg.buildOptions?.enableNonBrowserBranches) {
- plugins.push(nodePolyfills.default())
- }
- context({
- entryPoints: [resolve(__dirname, `../packages/${target}/src/index.ts`)],
- outfile,
- bundle: true,
- external,
- sourcemap: true,
- format: outputFormat,
- globalName: pkg.buildOptions?.name,
- platform: format === 'cjs' ? 'node' : 'browser',
- plugins,
- define: {
- __COMMIT__: `"dev"`,
- __VERSION__: `"${pkg.version}"`,
- __DEV__: `true`,
- __TEST__: `false`,
- __BROWSER__: String(
- format !== 'cjs' && !pkg.buildOptions?.enableNonBrowserBranches
- ),
- __GLOBAL__: String(format === 'global'),
- __ESM_BUNDLER__: String(format.includes('esm-bundler')),
- __ESM_BROWSER__: String(format.includes('esm-browser')),
- __NODE_JS__: String(format === 'cjs'),
- __SSR__: String(format === 'cjs' || format.includes('esm-bundler')),
- __COMPAT__: String(target === 'vue-compat'),
- __FEATURE_SUSPENSE__: `true`,
- __FEATURE_OPTIONS_API__: `true`,
- __FEATURE_PROD_DEVTOOLS__: `false`
- }
- }).then(ctx => ctx.watch())
|