From 3819721bec3580ded29378a8b656fdf6cd4b0dbc Mon Sep 17 00:00:00 2001 From: Shigma Date: Sat, 27 Jan 2024 01:57:54 +0800 Subject: [PATCH] feat(console): support esm usage, fix koishijs/koishi#1339 --- plugins/console/package.json | 5 ++++- plugins/console/src/node/index.ts | 21 ++++++++++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/plugins/console/package.json b/plugins/console/package.json index 1c6a9041..e84307d3 100644 --- a/plugins/console/package.json +++ b/plugins/console/package.json @@ -6,7 +6,10 @@ "types": "lib/index.d.ts", "exports": { ".": { - "node": "./lib/node/index.js", + "node": { + "require": "./lib/node/index.js", + "import": "./lib/node/index.mjs" + }, "browser": "./lib/browser/index.mjs", "types": "./lib/index.d.ts" }, diff --git a/plugins/console/src/node/index.ts b/plugins/console/src/node/index.ts index d4415127..80d6edc8 100644 --- a/plugins/console/src/node/index.ts +++ b/plugins/console/src/node/index.ts @@ -6,6 +6,8 @@ import { extname, resolve } from 'path' import { createReadStream, existsSync, promises as fsp, Stats } from 'fs' import {} from '@koishijs/plugin-server-proxy' import open from 'open' +import { createRequire } from 'module' +import { fileURLToPath } from 'url' declare module 'koishi' { interface EnvData { @@ -54,9 +56,12 @@ class NodeConsole extends Console { loader.envData.clientCount = this.layer.clients.size }) + // @ts-ignore + const require = createRequire(import.meta.url) this.root = config.root || (config.devMode ? resolve(require.resolve('@koishijs/client/package.json'), '../app') - : resolve(__dirname, '../../dist')) + // @ts-ignore + : fileURLToPath(new URL('../../dist', import.meta.url))) } get config() { @@ -84,7 +89,9 @@ class NodeConsole extends Console { this.serveAssets() this.ctx.on('server/ready', () => { - const target = this.ctx.server.selfUrl + this.config.uiPath + let { host, port } = this.ctx.server + if (['0.0.0.0', '::'].includes(host)) host = '127.0.0.1' + const target = `http://${host}:${port}${this.config.uiPath}` if (this.config.open && !this.ctx.get('loader')?.envData.clientCount && !process.env.KOISHI_AGENT) { open(target) } @@ -194,11 +201,11 @@ class NodeConsole extends Console { private async createVite() { const { cacheDir, dev } = this.config - const { createServer } = require('vite') as typeof import('vite') - const { default: mini } = require('unocss/preset-mini') as typeof import('unocss/preset-mini') - const { default: unocss } = require('unocss/vite') as typeof import('unocss/vite') - const { default: vue } = require('@vitejs/plugin-vue') as typeof import('@vitejs/plugin-vue') - const { default: yaml } = require('@maikolib/vite-plugin-yaml') as typeof import('@maikolib/vite-plugin-yaml') + const { createServer } = await import('vite') + const { default: mini } = await import('unocss/preset-mini') + const { default: unocss } = await import('unocss/vite') + const { default: vue } = await import('@vitejs/plugin-vue') + const { default: yaml } = await import('@maikolib/vite-plugin-yaml') this.vite = await createServer({ root: this.root,