From 4917ce9e7a05a6986cc3174dcc9d4a5af3b6435c Mon Sep 17 00:00:00 2001 From: fengmk2 Date: Wed, 25 Dec 2024 22:37:30 +0800 Subject: [PATCH] fix: use fileurl on import --- package.json | 4 ++-- src/middleware/global_options.ts | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 69214f84..067049b1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@eggjs/bin", - "version": "7.0.0-beta.0", + "version": "7.0.0-beta.2", "publishConfig": { "access": "public" }, @@ -80,7 +80,7 @@ "typescript": "5" }, "scripts": { - "postinstall": "node scripts/postinstall.mjs", + "postinstall-skip": "node scripts/postinstall.mjs", "lint": "eslint --cache src test --ext .ts", "pretest": "npm run clean && npm run lint -- --fix && npm run prepublishOnly", "test": "npm run test-local", diff --git a/src/middleware/global_options.ts b/src/middleware/global_options.ts index 45e7b8b9..3055f07d 100644 --- a/src/middleware/global_options.ts +++ b/src/middleware/global_options.ts @@ -96,7 +96,7 @@ export default class GlobalOptions implements ApplicationLifecycle { findPaths.unshift(ctx.args.base); } ctx.args.tscompiler = tscompiler ?? 'ts-node/register'; - const tsNodeRegister = importResolve(ctx.args.tscompiler, { + let tsNodeRegister = importResolve(ctx.args.tscompiler, { paths: findPaths, }); // should require tsNodeRegister on current process, let it can require *.ts files @@ -104,6 +104,7 @@ export default class GlobalOptions implements ApplicationLifecycle { // await importModule(tsNodeRegister); // let child process auto require ts-node too if (isESM) { + tsNodeRegister = pathToFileURL(tsNodeRegister).href; addNodeOptionsToEnv(`--import ${tsNodeRegister}`, ctx.env); } else { addNodeOptionsToEnv(`--require ${tsNodeRegister}`, ctx.env); @@ -127,12 +128,11 @@ export default class GlobalOptions implements ApplicationLifecycle { let esmLoader = importResolve('ts-node/esm', { paths: [ getSourceDirname() ], }); - if (process.platform === 'win32') { - // ES Module loading with absolute path fails on windows - // https://github.com/nodejs/node/issues/31710#issuecomment-583916239 - // https://nodejs.org/api/url.html#url_url_pathtofileurl_path - esmLoader = pathToFileURL(esmLoader).href; - } + // ES Module loading with absolute path fails on windows + // https://github.com/nodejs/node/issues/31710#issuecomment-583916239 + // https://nodejs.org/api/url.html#url_url_pathtofileurl_path + // Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, and node are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'd:' + esmLoader = pathToFileURL(esmLoader).href; // wait for https://github.com/nodejs/node/issues/40940 addNodeOptionsToEnv('--no-warnings', ctx.env); addNodeOptionsToEnv(`--loader ${esmLoader}`, ctx.env);