in: file and data are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
Возникает при запуске следующей команды:
node --loader ./server/loader.js ./server/index.ts
// loader.js
import {
resolve as resolveTs,
getFormat,
transformSource,
load,
} from "ts-node/esm";
import * as tsConfigPaths from "tsconfig-paths"
export { getFormat, transformSource };
const { absoluteBaseUrl, paths } = tsConfigPaths.loadConfig()
const matchPath = tsConfigPaths.createMatchPath(absoluteBaseUrl, paths)
export function resolve(specifier, context, defaultResolver) {
const mappedSpecifier = matchPath(specifier)
if (mappedSpecifier) {
specifier = `${mappedSpecifier}.js`
}
return resolveTs(specifier, context, defaultResolver);
}
export { load }
// server/index.ts
import { AppModule } from '@serv/app.module'
AppModule
// tsconfig
"paths": {
"@serv/*": ["./server/*"]
}
Где то динамический import, по всей видимости, отваливается.
Это все, что есть в файлах
У меня была точно такая же ошибка, буква в букву. Беда была в том, что в import передавался файл со схемой c: вместо file: Вылечил при помощи pathToFileURL
У меня начинают вот такие пути строятся C:\Users\user\Documents\projects\pets\the-last-chance\file:\C:\Users\user\Documents\projects\pets\the-last-chance\server\index.ts
У тебя один путь на другой накладывается. Пошагово смотри что происходит.
resolveTs функция из пакета ts-node/esm, что в ней происходит не знаю
Возможно там недочёт. Твоя ошибка свойственна винде. Её могли вообще не учесть т.к. тот код писался не под виндой.
Я этот код взял изначально из ts-node, где этот код указан, как решение проблемы, но у меня не работает
Обсуждают сегодня