From abf84f8da408563b4bfd352725013fb52c19a4b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=89=E9=9E=8B=E6=B2=A1=E5=8F=B7?= <308487730@qq.com> Date: Sat, 18 Feb 2023 08:11:22 +0800 Subject: [PATCH] fix: types error #9 --- package.json | 18 +++++++++--------- src/index.ts | 5 ++++- vite.config.ts | 47 +++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 56 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 2c5ed06..639e6aa 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,13 @@ "name": "nuxt-electron", "version": "0.4.0", "description": "Nuxt Integration with Electron", - "main": "index.mjs", - "types": "types", + "main": "./dist/index.cjs", + "types": "./dist/index.d.ts", "exports": { ".": { - "import": "./index.mjs", - "require": "./index.js" + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.cjs" } }, "repository": { @@ -17,9 +18,9 @@ "author": "草鞋没号 <308487730@qq.com>", "license": "MIT", "scripts": { - "build": "npm run types && vite build", + "build": "vite build", "dev": "vite build --watch", - "types": "rm -rf types && tsc -p tsconfig.build.json", + "types": "tsc -p tsconfig.build.json", "prepublishOnly": "npm run build" }, "peerDependencies": { @@ -36,9 +37,8 @@ }, "files": [ "electron-env.d.ts", - "types", - "index.mjs", - "index.js" + "dist", + "types" ], "keywords": [ "nuxt", diff --git a/src/index.ts b/src/index.ts index 9b04a81..4fc56c1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,6 +7,9 @@ import { startup, } from 'vite-electron-plugin' +// Fix tsc build error +import { NuxtModule } from '@nuxt/schema' + export interface ElectronOptions extends Partial { } export default defineNuxtModule({ @@ -67,4 +70,4 @@ export default defineNuxtModule({ } }) } -}) as any +}) diff --git a/vite.config.ts b/vite.config.ts index d67dc42..1773b43 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,16 +1,17 @@ +import fs from 'node:fs' +import path from 'node:path' +import { spawn } from 'node:child_process' +import { builtinModules } from 'node:module' import { defineConfig } from 'vite' -import { builtinModules } from 'module' import pkg from './package.json' export default defineConfig({ build: { minify: false, - emptyOutDir: false, - outDir: '', lib: { entry: 'src/index.ts', formats: ['cjs', 'es'], - fileName: format => format === 'es' ? '[name].mjs' : '[name].js', + fileName: format => format === 'es' ? '[name].mjs' : '[name].cjs', }, rollupOptions: { external: [ @@ -28,4 +29,42 @@ export default defineConfig({ }, }, }, + plugins: [{ + name: 'generate-types', + async closeBundle() { + 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( + process.platform === 'win32' ? 'npm.cmd' : 'npm', + ['run', 'types'], + { stdio: 'inherit' }, + ) + cp.on('exit', code => { + !code && console.log('[types]', 'declaration generated') + resolve(code) + }) + cp.on('error', process.exit) + }) +} + +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}`) + } +}