build: 统一构建
This commit is contained in:
96
scripts/build.mjs
Normal file
96
scripts/build.mjs
Normal file
@@ -0,0 +1,96 @@
|
||||
import fs from 'node:fs';
|
||||
import { createRequire } from 'node:module';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
import { build as buildVite } from 'vite';
|
||||
import vue from '@vitejs/plugin-vue';
|
||||
import minimist from 'minimist';
|
||||
import rimraf from 'rimraf';
|
||||
|
||||
const args = minimist(process.argv.slice(2));
|
||||
|
||||
const toPascalCase = (str) => str.replace(/(^\w|-\w)/g, (text) => text.replace(/-/, '').toUpperCase());
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const packagesDir = path.resolve(__dirname, '../packages');
|
||||
|
||||
if (args.package) {
|
||||
const pkgRoot = path.resolve(packagesDir, args.package);
|
||||
if (fs.statSync(pkgRoot).isDirectory()) {
|
||||
rimraf.sync(path.resolve(packagesDir, `./${args.package}/dist`));
|
||||
|
||||
build({ packageName: args.package, format: 'es' });
|
||||
build({ packageName: args.package, format: 'umd' });
|
||||
}
|
||||
} else {
|
||||
const packages = fs.readdirSync(packagesDir).filter((p) => {
|
||||
const pkgRoot = path.resolve(packagesDir, p);
|
||||
if (fs.statSync(pkgRoot).isDirectory()) {
|
||||
const pkg = JSON.parse(fs.readFileSync(path.resolve(pkgRoot, 'package.json'), 'utf-8'));
|
||||
return !pkg.private && !pkg.bin;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
for (const packageName of packages) {
|
||||
rimraf.sync(path.resolve(packagesDir, `./${packageName}/dist`));
|
||||
|
||||
build({ packageName, format: 'es' });
|
||||
build({ packageName, format: 'umd' });
|
||||
}
|
||||
}
|
||||
|
||||
async function build({ packageName, format }) {
|
||||
const pkg = createRequire(import.meta.url)(`../packages/${packageName}/package.json`);
|
||||
|
||||
await buildVite({
|
||||
root: path.resolve(packagesDir, `./${packageName}`),
|
||||
clearScreen: false,
|
||||
configFile: false,
|
||||
plugins: [vue()],
|
||||
|
||||
build: {
|
||||
emptyOutDir: false,
|
||||
cssCodeSplit: false,
|
||||
sourcemap: false,
|
||||
minify: false,
|
||||
target: 'esnext',
|
||||
|
||||
lib: {
|
||||
entry: 'src/index.ts',
|
||||
name: `TMagic${toPascalCase(packageName)}`,
|
||||
fileName: `tmagic-${packageName}`,
|
||||
formats: [format],
|
||||
},
|
||||
|
||||
rollupOptions: {
|
||||
// 确保外部化处理那些你不想打包进库的依赖
|
||||
external(id) {
|
||||
if (format === 'umd' && id === 'lodash-es') {
|
||||
return false;
|
||||
}
|
||||
return Object.keys({
|
||||
...pkg.dependencies,
|
||||
...pkg.peerDependencies,
|
||||
}).some((k) => new RegExp(`^${k}`).test(id));
|
||||
},
|
||||
|
||||
output: {
|
||||
// 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
|
||||
globals: {
|
||||
vue: 'Vue',
|
||||
'element-plus': 'ElementPlus',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
resolve: {
|
||||
alias: [
|
||||
{ find: /^@data-source/, replacement: path.join(packagesDir, '/data-source/src') },
|
||||
{ find: /^@editor/, replacement: path.join(packagesDir, './editor/src') },
|
||||
],
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -1,11 +1,12 @@
|
||||
// @ts-check
|
||||
import enquirer from 'enquirer';
|
||||
import execa from 'execa';
|
||||
import minimist from 'minimist';
|
||||
import fs from 'node:fs';
|
||||
import { createRequire } from 'node:module';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
import enquirer from 'enquirer';
|
||||
import execa from 'execa';
|
||||
import minimist from 'minimist';
|
||||
import pico from 'picocolors';
|
||||
import semver from 'semver';
|
||||
|
||||
@@ -35,7 +36,8 @@ const args = minimist(process.argv.slice(2), {
|
||||
const preId = args.preid || semver.prerelease(currentVersion)?.[0];
|
||||
const isDryRun = args.dry;
|
||||
/** @type {boolean | undefined} */
|
||||
let { skipTests } = args;
|
||||
// eslint-disable-next-line prefer-destructuring
|
||||
let skipTests = args.skipTests;
|
||||
const { skipBuild } = args;
|
||||
const skipPrompts = args.skipPrompts || args.canary;
|
||||
const skipGit = args.skipGit || args.canary;
|
||||
@@ -335,7 +337,7 @@ function updatePackage(pkgRoot, version, getNewPackageName, updateDep = false) {
|
||||
|
||||
/**
|
||||
* @param {Package} pkg
|
||||
* @param {'dependencies' | 'peerDependencies'} depType
|
||||
* @param {'dependencies' | 'peerDependencies' | 'devDependencies'} depType
|
||||
* @param {string} version
|
||||
*/
|
||||
function updateDeps(pkg, depType, version) {
|
||||
|
||||
Reference in New Issue
Block a user