diff --git a/.gitignore b/.gitignore index 27a441d..fea8b62 100644 --- a/.gitignore +++ b/.gitignore @@ -110,5 +110,3 @@ pnpm-lock.yaml yarn.lock /types -/index.cjs -/index.js diff --git a/package.json b/package.json index 9ef9196..529c07b 100644 --- a/package.json +++ b/package.json @@ -2,15 +2,15 @@ "name": "vite-plugin-dynamic-import", "version": "1.3.0", "description": "Enhance Vite builtin dynamic import", - "type": "module", - "main": "index.js", - "types": "types", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", "exports": { ".": { - "import": "./index.js", - "require": "./index.cjs", - "types": "./types/index.d.ts" - } + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.js" + }, + "./*": "./*" }, "repository": { "type": "git", @@ -26,6 +26,7 @@ "prepublishOnly": "npm run build" }, "dependencies": { + "acorn": "^8.8.2", "es-module-lexer": "^1.2.1", "fast-glob": "^3.2.12" }, @@ -45,8 +46,6 @@ "dynamic" ], "files": [ - "types", - "index.cjs", - "index.js" + "dist" ] } diff --git a/vite.config.ts b/vite.config.ts index e905ecd..837be5e 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -5,32 +5,46 @@ import { builtinModules } from 'node:module' import { defineConfig } from 'vite' import pkg from './package.json' +const isdev = process.argv.slice(2).includes('--watch') + export default defineConfig({ build: { - emptyOutDir: false, minify: false, - outDir: '', - target: 'node14', + emptyOutDir: !isdev, lib: { - entry: path.join(__dirname, 'src/index.ts'), - formats: ['es', 'cjs'], - fileName: format => format === 'cjs' ? '[name].cjs' : '[name].js', + entry: 'src/index.ts', + formats: ['cjs', 'es'], + fileName: format => format === 'es' ? '[name].mjs' : '[name].js', }, rollupOptions: { external: [ - ...builtinModules - .filter(m => !m.startsWith('_')) - .map(m => [m, `node:${m}`]) - .flat(), - ...Object.keys(pkg.dependencies), + 'vite', + ...builtinModules, + ...builtinModules.map(m => `node:${m}`), + ...Object.keys('dependencies' in pkg ? pkg.dependencies as object : {}), ], output: { exports: 'named', }, }, }, + plugins: [{ + name: 'generate-types', + async closeBundle() { + if (process.env.NODE_ENV === 'test') return + + removeTypes() + await generateTypes() + moveTypesToDist() + removeTypes() + }, + }], }) +function removeTypes() { + fs.rmSync(path.join(__dirname, 'types'), { recursive: true, force: true }) +} + function generateTypes() { return new Promise(resolve => { const cp = spawn( @@ -46,7 +60,12 @@ function generateTypes() { }) } -if (process.env.NODE_ENV !== 'test') { - fs.rmSync('types', { recursive: true, force: true }) - generateTypes() +function moveTypesToDist() { + const types = path.join(__dirname, 'types') + const dist = path.join(__dirname, 'dist') + const files = fs.readdirSync(types).filter(n => n.endsWith('.d.ts')) + for (const file of files) { + fs.copyFileSync(path.join(types, file), path.join(dist, file)) + console.log('[types]', `types/${file} -> dist/${file}`) + } }