From 3aba009478bd68f1b74c7b55f94f8c9e9ea788f3 Mon Sep 17 00:00:00 2001 From: EGOIST <0x142857@gmail.com> Date: Wed, 24 Nov 2021 17:41:04 +0800 Subject: [PATCH] fix: use `bundle-require` to bundle `tsup.config.ts` skip-release --- package-lock.json | 15 +++++++++ package.json | 1 + src/load.ts | 77 +++++------------------------------------------ 3 files changed, 24 insertions(+), 69 deletions(-) diff --git a/package-lock.json b/package-lock.json index 71d0a387..a9adbdf0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.0-semantic-release", "license": "MIT", "dependencies": { + "bundle-require": "^2.1.2", "cac": "^6.7.2", "chalk": "^4.1.0", "chokidar": "^3.5.1", @@ -1661,6 +1662,14 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "node_modules/bundle-require": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-2.1.2.tgz", + "integrity": "sha512-i8FENp+PiV5SUJztmjtfoq9rQDKhcQ1Ss924lrmAeBfL0IYT5rb6KTBMss9UNhtxndYVN6HUAh5974aZ6DDIPA==", + "peerDependencies": { + "esbuild": ">=0.13" + } + }, "node_modules/cac": { "version": "6.7.3", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.3.tgz", @@ -8687,6 +8696,12 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "bundle-require": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-2.1.2.tgz", + "integrity": "sha512-i8FENp+PiV5SUJztmjtfoq9rQDKhcQ1Ss924lrmAeBfL0IYT5rb6KTBMss9UNhtxndYVN6HUAh5974aZ6DDIPA==", + "requires": {} + }, "cac": { "version": "6.7.3", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.3.tgz", diff --git a/package.json b/package.json index 85ee75aa..9ade517d 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "build:simple": "tsup src/cli-*.ts src/index.ts src/rollup.ts --clean --splitting" }, "dependencies": { + "bundle-require": "^2.1.2", "cac": "^6.7.2", "chalk": "^4.1.0", "chokidar": "^3.5.1", diff --git a/src/load.ts b/src/load.ts index 4c72a4b9..d712c831 100644 --- a/src/load.ts +++ b/src/load.ts @@ -2,7 +2,7 @@ import fs from 'fs' import { parse as parseJson } from 'jju/lib/parse' import JoyCon from 'joycon' import path from 'path' -import { Loader } from 'esbuild' +import { bundleRequire } from 'bundle-require' import stripJsonComments from 'strip-json-comments' import { defineConfig } from './' @@ -65,79 +65,18 @@ export async function loadTsupConfig( return {} } - const config = await bundleConfig(configPath) - return { path: configPath, data: config } + const config = await bundleRequire({ + filepath: configPath, + }) + return { + path: configPath, + data: config.mod.tsup || config.mod.default || config.mod, + } } return {} } -function removeFile(filepath: string) { - if (fs.existsSync(filepath)) { - fs.unlinkSync(filepath) - } -} - -async function bundleConfig(configFile: string) { - const { build } = await import('esbuild') - const outFile = configFile.replace(/\.[a-z]+$/, '.bundled.cjs') - const readConfig = () => { - delete require.cache[outFile] - const result = require(outFile) - removeFile(outFile) - return result.tsup || result.default || result - } - try { - await build({ - entryPoints: [configFile], - format: 'cjs', - outfile: outFile, - platform: 'node', - bundle: true, - plugins: [ - { - name: 'ignore', - setup(build) { - build.onResolve({ filter: /.*/ }, (args) => { - if (!path.isAbsolute(args.path) && !/^[\.\/]/.test(args.path)) { - return { external: true } - } - }) - build.onLoad( - { filter: /\.(js|ts|mjs|cjs|jsx|tsx)$/ }, - async (args) => { - const contents = await fs.promises.readFile(args.path, 'utf8') - const ext = path.extname(args.path) - return { - contents: contents - .replace( - /\b__dirname\b/g, - JSON.stringify(path.dirname(args.path)) - ) - .replace(/\b__filename\b/g, JSON.stringify(args.path)) - .replace( - /\bimport\.meta\.url\b/g, - JSON.stringify(`file://${args.path}`) - ), - loader: - ext === '.mjs' || ext === '.cjs' - ? 'js' - : (ext.slice(1) as Loader), - } - } - ) - }, - }, - ], - }) - const config = readConfig() - return config - } catch (error) { - removeFile(outFile) - throw error - } -} - export async function loadPkg(cwd: string) { const { data } = await joycon.load(['package.json'], cwd, path.dirname(cwd)) return data || {}