vant/packages/vant-cli/src/compiler/compile-bundles.ts

69 lines
1.8 KiB
TypeScript

import fse from 'fs-extra';
import { join } from 'path';
import { build } from 'vite';
import { getPackageJson, getVantConfig, LIB_DIR } from '../common/constant.js';
import { mergeCustomViteConfig } from '../common/index.js';
import { getViteConfigForPackage } from '../config/vite.package.js';
// generate entry file for nuxt
async function genEntryForSSR() {
const { name } = getVantConfig();
const cjsPath = join(LIB_DIR, 'ssr.js');
const mjsPath = join(LIB_DIR, 'ssr.mjs');
const cjsContent = `'use strict';
if (process.env.NODE_ENV === 'production') {
module.exports = require('./${name}.cjs.min.js');
} else {
module.exports = require('./${name}.cjs.js');
};
`;
const mjsContent = `export * from './index.js';\n`;
return Promise.all([
fse.outputFile(cjsPath, cjsContent),
fse.outputFile(mjsPath, mjsContent),
]);
}
export async function compileBundles() {
const dependencies = getPackageJson().dependencies || {};
const externals = Object.keys(dependencies);
const configs = [
// umd bundle
getViteConfigForPackage({
minify: false,
formats: ['umd'],
external: ['vue'],
}),
// umd bundle (minified)
getViteConfigForPackage({
minify: true,
formats: ['umd'],
external: ['vue'],
}),
// esm/cjs bundle
getViteConfigForPackage({
minify: false,
formats: ['es', 'cjs'],
external: ['vue', ...externals],
}),
// esm/cjs bundle (minified)
// vite will not minify es bundle
// see: https://github.com/vuejs/vue-next/issues/2860
getViteConfigForPackage({
minify: true,
formats: ['es', 'cjs'],
external: ['vue', ...externals],
}),
];
await Promise.all(
configs.map((config) => build(mergeCustomViteConfig(config)))
);
await genEntryForSSR();
}