dev script (#11668)
// @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 fs from 'node:fs'import { dirname, relative, resolve } from 'node:path'import { fileURLToPath } from 'node:url'import { createRequire } from 'node:module'import { parseArgs } from 'node:util'import { polyfillNode } from 'esbuild-plugin-polyfill-node'const require = createRequire(import.meta.url)const __dirname = dirname(fileURLToPath(import.meta.url))const {values: { format: rawFormat, prod, inline: inlineDeps },positionals,} = parseArgs({allowPositionals: true,options: {format: {type: 'string',short: 'f',default: 'global',},prod: {type: 'boolean',short: 'p',default: false,},inline: {type: 'boolean',short: 'i',default: false,},},})const format = rawFormat || 'global'const targets = positionals.length ? positionals : ['vue']// resolve outputconst outputFormat = format.startsWith('global')? 'iife': format === 'cjs'? 'cjs': 'esm'const postfix = format.endsWith('-runtime')? `runtime.${format.replace(/-runtime$/, '')}`: formatconst privatePackages = fs.readdirSync('packages-private')for (const target of targets) {const pkgBase = privatePackages.includes(target)? `packages-private`: `packages`const pkgBasePath = `../${pkgBase}/${target}`const pkg = require(`${pkgBasePath}/package.json`)const outfile = resolve(__dirname,`${pkgBasePath}/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 depsif (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, `${pkgBasePath}/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')),__CJS__: String(format === 'cjs'),__SSR__: String(format !== 'global'),__COMPAT__: String(target === 'vue-compat'),__FEATURE_SUSPENSE__: `true`,__FEATURE_OPTIONS_API__: `true`,__FEATURE_PROD_DEVTOOLS__: `false`,__FEATURE_PROD_HYDRATION_MISMATCH_DETAILS__: `true`,},}).then(ctx => ctx.watch())}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。