diff --git a/example/vite.config.ts b/example/vite.config.ts index ec44b1a..d572f7e 100644 --- a/example/vite.config.ts +++ b/example/vite.config.ts @@ -9,6 +9,7 @@ export default defineConfig(({ mode }) => ({ prefix: '^/api-dev/', wsPrefix: ['/socket.io'], log: 'debug', + reload: true, formidableOptions: { // 配置上传资源存放目录 uploadDir: path.join(process.cwd(), '/uploads'), diff --git a/vite-plugin-mock-dev-server/src/compiler/loadFromCode.ts b/vite-plugin-mock-dev-server/src/compiler/loadFromCode.ts index 8c39063..0fff3e5 100644 --- a/vite-plugin-mock-dev-server/src/compiler/loadFromCode.ts +++ b/vite-plugin-mock-dev-server/src/compiler/loadFromCode.ts @@ -1,6 +1,8 @@ +import { createHash } from 'node:crypto' import fs, { promises as fsp } from 'node:fs' import path from 'node:path' import { pathToFileURL } from 'node:url' +import { attempt, attemptAsync } from '@pengzhanbo/utils' interface LoadFromCodeOptions { filepath: string @@ -17,17 +19,18 @@ export async function loadFromCode({ }: LoadFromCodeOptions): Promise { filepath = path.resolve(cwd, filepath) const ext = isESM ? '.mjs' : '.cjs' - const filepathTmp = `${filepath}.timestamp-${Date.now()}${ext}` - const file = pathToFileURL(filepathTmp).toString() + const filepathTmp = `${filepath}.${getHash(code)}${ext}` await fsp.writeFile(filepathTmp, code, 'utf8') - try { - const mod = await import(file) - return mod.default || mod - } - finally { - try { - fs.unlinkSync(filepathTmp) - } - catch {} - } + const [, mod] = await attemptAsync(importDefault, String(pathToFileURL(filepathTmp))) + attempt(fs.unlinkSync, filepathTmp) + return mod +} + +async function importDefault(filepath: string): Promise { + const mod = await import(filepath) + return mod.default || mod +} + +function getHash(str: string): string { + return createHash('md5').update(str).digest('hex') } diff --git a/vite-plugin-mock-dev-server/src/compiler/rolldown.ts b/vite-plugin-mock-dev-server/src/compiler/rolldown.ts index 33cf818..3ea431b 100644 --- a/vite-plugin-mock-dev-server/src/compiler/rolldown.ts +++ b/vite-plugin-mock-dev-server/src/compiler/rolldown.ts @@ -85,7 +85,7 @@ export async function transformWithRolldown( }) return { code: result.output[0].code, - deps: result.output[0].imports.map(normalizePath), + deps: result.output[0].moduleIds.filter(id => !id.endsWith(filename)).map(id => normalizePath(path.relative(cwd, id))), } } catch (e) { diff --git a/vite-plugin-mock-dev-server/src/mockHttp/middleware.ts b/vite-plugin-mock-dev-server/src/mockHttp/middleware.ts index 9721fe6..bef6c25 100644 --- a/vite-plugin-mock-dev-server/src/mockHttp/middleware.ts +++ b/vite-plugin-mock-dev-server/src/mockHttp/middleware.ts @@ -196,7 +196,7 @@ export function createMockMiddleware( if (error) { logger.error( - `${ansis.red(`mock error at ${pathname}`)}\n${error}\n at body (${ansis.underline(filepath)})`, + `${ansis.red(`mock error at ${pathname}`)}\n ${error}\n at body (${ansis.underline.gray(filepath)})`, logLevel, ) provideResponseStatus(response, 500) @@ -214,7 +214,7 @@ export function createMockMiddleware( logger.error( `${ansis.red( `mock error at ${pathname}`, - )}\n${error}\n at response (${ansis.underline(filepath)})`, + )}\n ${error}\n at response (${ansis.underline.gray(filepath)})`, logLevel, ) provideResponseStatus(response, 500)