add clean to build

This commit is contained in:
Rene Haas
2022-10-31 11:00:33 +01:00
parent 7c0fd242ca
commit 3d095f747d
5 changed files with 47 additions and 13 deletions
+20 -12
View File
@@ -7,6 +7,7 @@ const glob = require('glob');
const resolve = require('@~local/config/resolve');
const defaultOptions = require('./defaultOptions');
const pipelineDefault = require('./pipeline.default');
const rollupPluginClean = require('./plugins/clean');
const workspaceRoot = path.dirname(execSync('npm root').toString());
const pkg = require(`${workspaceRoot}/package.json`);
@@ -30,6 +31,7 @@ const resolvePath = (basePath, pathToResolve, appendExt) => {
const mergeAndResolveOptions = (userOptions) => {
const {
clean: defaultClean,
outDir: defaultOutDir,
paths: defaultPaths,
versions: defaultVersions,
@@ -44,6 +46,7 @@ const mergeAndResolveOptions = (userOptions) => {
} = defaultOptions;
const {
project,
clean: rawClean,
outDir: rawOutDir,
paths: rawPaths = {},
alias: rawAlias = {},
@@ -56,12 +59,13 @@ const mergeAndResolveOptions = (userOptions) => {
banner: rawBanner,
useEsbuild: rawUseEsbuild,
} = userOptions;
const projectPath = process.cwd();
const projectDir = process.cwd();
const workspaces = pkg.workspaces
.map((pattern) => glob.sync(pattern, { cwd: workspaceRoot }))
.flat();
const mergedOptions = {
project: project || path.basename(projectPath),
project: project || path.basename(projectDir),
projectDir,
extractStyles: rawExtractStyles ?? defaultExtractStyles,
extractTypes: rawExtractTypes ?? defaultExtractTypes,
extractPackageJson: rawExtractPackageJson ?? defaultExtractPackageJson,
@@ -69,6 +73,7 @@ const mergeAndResolveOptions = (userOptions) => {
banner: rawBanner ?? defaultBanner,
versions: rawVersions ?? defaultVersions,
useEsbuild: rawUseEsbuild ?? defaultUseEsbuild,
clean: rawClean ?? defaultClean,
outDir: rawOutDir ?? defaultOutDir,
paths: {
...defaultPaths,
@@ -94,12 +99,12 @@ const mergeAndResolveOptions = (userOptions) => {
const pluginFromFn = (plugin) =>
typeof plugin === 'function' ? plugin(mergedOptions, workspaceRoot, workspaces) : plugin;
paths.js = resolvePath(projectPath, path.join(outDir, js));
paths.types = resolvePath(projectPath, path.join(outDir, types));
paths.styles = resolvePath(projectPath, path.join(outDir, styles));
paths.js = resolvePath(projectDir, path.join(outDir, js));
paths.types = resolvePath(projectDir, path.join(outDir, types));
paths.styles = resolvePath(projectDir, path.join(outDir, styles));
mergedOptions.outDir = resolvePath(projectPath, outDir);
mergedOptions.rollup.input = resolvePath(projectPath, mergedOptions.rollup.input, true);
mergedOptions.outDir = resolvePath(projectDir, outDir);
mergedOptions.rollup.input = resolvePath(projectDir, mergedOptions.rollup.input, true);
mergedOptions.rollup.output = {
...(mergedOptions.rollup.output || {}),
name: mergedOptions.rollup.output?.name || mergedOptions.project,
@@ -115,15 +120,15 @@ const mergeAndResolveOptions = (userOptions) => {
const createConfig = (userOptions = {}) => {
const options = mergeAndResolveOptions(userOptions);
const { project, useEsbuild, verbose } = options;
const { project, useEsbuild, verbose, clean, outDir, projectDir } = options;
const result = pipelineDefault(resolve, options, useEsbuild);
const resultArr = Array.isArray(result) ? result : [result];
const prePlugins = !Array.isArray(resultArr[0].plugins) ? [] : resultArr[0].plugins;
resultArr[0].plugins = prePlugins;
if (verbose) {
if (!Array.isArray(resultArr[0].plugins)) {
resultArr[0].plugins = [];
}
resultArr[0].plugins.push({
prePlugins.push({
name: 'PROJECT',
buildStart() {
console.log('');
@@ -132,6 +137,9 @@ const createConfig = (userOptions = {}) => {
},
});
}
if (clean && outDir !== projectDir) {
prePlugins.push(rollupPluginClean({ paths: [outDir], verbose }));
}
return resultArr;
};
+1
View File
@@ -4,6 +4,7 @@ module.exports = {
banner: null,
useEsbuild: false,
outDir: './dist',
clean: false,
paths: {
js: '.',
types: './types',
+24
View File
@@ -0,0 +1,24 @@
const path = require('path');
const fs = require('fs');
module.exports = ({ paths = [], verbose = false } = {}) => {
let cleaned = false;
return {
name: 'clean',
async buildStart() {
if (!cleaned) {
paths.forEach((currPath) => {
const resolvedPath = path.resolve(currPath);
if (fs.existsSync(resolvedPath)) {
if (verbose) {
// eslint-disable-next-line no-console
console.log(`Clean: ${resolvedPath}`);
}
fs.rmSync(resolvedPath, { recursive: true });
}
});
cleaned = true;
}
},
};
};
@@ -2,7 +2,7 @@
"extends": "./tsconfig.json",
"compilerOptions": {
"rootDir": "./src/",
"outDir": "dist",
"outDir": "./dist/types",
"declaration": true,
"types": ["react"]
},
@@ -9,6 +9,7 @@ module.exports = createRollupConfig({
verbose: true,
extractStyles: true,
extractTypes: true,
clean: true,
extractPackageJson: {
json: ({
name,