Утверждение динамического импорта из шага разрешения модуля загрузчика в nodejs v18

у меня есть пользовательский модуль --loader, где я хочу назначить тип утверждения импорта модулям json для обеспечения обратной совместимости:

       export async function resolve(specifier,context,defaultResolve)
{let {importAssertions:assert}=context||{};
 if(assert&&/\.json$/.test(specifier)&&assert.type!=="json")
 Object.assign(assert,{type:"json"});
 if(defaultResolve instanceof Function)
 return defaultResolve(specifier,context,defaultResolve);
 [...[]]
} 

но ошибка, кажется, выдается перед входом на шаг разрешения в случае статического импорта (как будто во время синтаксического анализа выражения импорта) и независимо от назначения в случае динамического импорта (мне удается зарегистрировать контекст разрешения в их случае, несмотря на ошибки никогда не возвращаются к выражению импорта):

      TypeError [ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module needs an import assertion of type "json"

Я где-то читал, что планировалось установить флаг для отключения утверждений импорта - таким образом, я мог бы определить свое собственное правило для утверждения типов даже за пределами стандартного механизма проверки расширений файлов ".json" и прибегать к объявлению только в исключительных случаях. случаи, напр. статические конечные точки API для отдыха, но я их не нахожу. Как еще мне их настроить? Или я просто неправильно меняю контекст импорта? Я ошибаюсь в том, что статический импорт json не работает еще до того, как я перешел к шагу разрешения? Действительно ли декларативные типы утверждений абсолютно необходимы? Спасибо!

1 ответ

Поскольку я опубликовал это, я понял, что объект context.importAssertions не является изменяемым на этапе разрешения(), но он находится на этапе загрузки(). Итак, в этом крючке вы можете сделатьcontext.importAssertions.type="json"например. если/\.json$/.test(specifier).

Другие вопросы по тегам