| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- // @ts-check
- // Using esbuild for faster dev builds.
- // We are still using Rollup for production builds because it generates
- // smaller files and provides better tree-shaking.
- import esbuild from 'esbuild'
- import { resolve, relative, dirname } from 'node:path'
- import { fileURLToPath } from 'node:url'
- import { createRequire } from 'node:module'
- import minimist from 'minimist'
- import { polyfillNode } from 'esbuild-plugin-polyfill-node'
- const require = createRequire(import.meta.url)
- const __dirname = dirname(fileURLToPath(import.meta.url))
- const args = minimist(process.argv.slice(2))
- const target = args._[0] || 'vue'
- const format = args.f || 'global'
- const prod = args.p || false
- const inlineDeps = args.i || args.inline
- const pkg = require(`../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}.${prod ? `prod.` : ``}js`
- )
- const relativeOutfile = relative(process.cwd(), outfile)
- // resolve externals
- // TODO this logic is largely duplicated from rollup.config.js
- /** @type {string[]} */
- 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 consolidatePkgPath = require.resolve(
- '@vue/consolidate/package.json',
- {
- paths: [resolve(__dirname, `../packages/${target}/`)]
- }
- )
- const consolidateDeps = Object.keys(
- require(consolidatePkgPath).devDependencies
- )
- external = [
- ...external,
- ...consolidateDeps,
- 'fs',
- 'vm',
- 'crypto',
- 'react-dom/server',
- 'teacup/lib/express',
- 'arc-templates/dist/es5',
- 'then-pug',
- 'then-jade'
- ]
- }
- }
- /** @type {Array<import('esbuild').Plugin>} */
- const plugins = [
- {
- name: 'log-rebuild',
- setup(build) {
- build.onEnd(() => {
- console.log(`built: ${relativeOutfile}`)
- })
- }
- }
- ]
- if (format !== 'cjs' && pkg.buildOptions?.enableNonBrowserBranches) {
- plugins.push(polyfillNode())
- }
- esbuild
- .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__: prod ? `false` : `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`,
- __FEATURE_PROD_HYDRATION_MISMATCH_DETAILS__: `false`
- }
- })
- .then(ctx => ctx.watch())
|