Skip to content

fix(build): add production build for every build type #2959

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: v3
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 15 additions & 30 deletions rollup.config.mjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// @ts-check
import { dirname, resolve } from 'node:path'
import { dirname, parse, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
import { readFileSync } from 'node:fs'
import ts from 'rollup-plugin-typescript2'
Expand All @@ -23,7 +23,6 @@ const packageDir = resolve(packagesDir, process.env.TARGET)
const pkg = JSON.parse(
readFileSync(resolve(packageDir, `package.json`), 'utf-8')
)
const name = pkg.name

function getAuthors(pkg) {
const { contributors, author } = pkg
Expand Down Expand Up @@ -68,18 +67,10 @@ const outputConfigs = {
},
}

const packageBuilds = Object.keys(outputConfigs)
const packageConfigs = packageBuilds.map((format) =>
createConfig(format, outputConfigs[format])
)

// only add the production ready if we are bundling the options
packageBuilds.forEach((buildName) => {
if (buildName === 'cjs') {
packageConfigs.push(createProductionConfig(buildName))
} else if (buildName === 'global') {
packageConfigs.push(createMinifiedConfig(buildName))
}
const packageConfigs = []
Object.entries(outputConfigs).forEach(([buildName, output]) => {
packageConfigs.push(createConfig(buildName, output))
packageConfigs.push(createProductionConfig(buildName, output))
})

export default packageConfigs
Expand All @@ -101,7 +92,8 @@ function createConfig(buildName, output, plugins = []) {
const isGlobalBuild = buildName === 'global'
const isRawESMBuild = buildName === 'browser'
const isNodeBuild = buildName === 'cjs'
const isBundlerESMBuild = buildName === 'browser' || buildName === 'mjs'
const isBundlerESMBuild =
!isProductionBuild && (buildName === 'browser' || buildName === 'mjs')

if (isGlobalBuild) output.name = pascalcase(pkg.name)

Expand All @@ -125,7 +117,8 @@ function createConfig(buildName, output, plugins = []) {
// during a single build.
hasTSChecked = true

const external = ['vue', '@vue/devtools-api']
const external = ['vue']
if (!isProductionBuild) external.push('@vue/devtools-api')

const nodePlugins = [nodeResolve(), commonjs()]

Expand Down Expand Up @@ -208,25 +201,17 @@ function createReplacePlugin(
})
}

function createProductionConfig(format) {
const extension = format === 'cjs' ? 'cjs' : 'js'
const descriptor = format === 'cjs' ? '' : `.${format}`
return createConfig(format, {
file: `dist/${name}${descriptor}.prod.${extension}`,
format: outputConfigs[format].format,
})
}

function createMinifiedConfig(format) {
function createProductionConfig(buildName, output) {
const parsedPath = parse(output.file)
return createConfig(
format,
buildName,
{
file: `dist/${name}.${format === 'global' ? 'iife' : format}.prod.js`,
format: outputConfigs[format].format,
file: `${parsedPath.dir}/${parsedPath.name}.prod${parsedPath.ext}`,
format: output.format,
},
[
terser({
module: /^esm/.test(format),
module: output.format === 'es',
compress: {
ecma: 2015,
pure_getters: true,
Expand Down