Как загрузить модуль из отдельного каталога `include`?

#typescript #webpack

#typescript #webpack

Вопрос:

В моем проекте tsconfig.json содержится это …

 "include": [
    "src/**/*",
    "generated**/*"
]
  

Есть два файла src/main.ts и generated/data.json

Я хотел бы import data from 'data.json'; внутри src/main.ts . Я могу заставить его работать, только если generated/data.json он перемещен в src .

Я использую webpack и ts-loader для вывода пакета.

Я пробовал как использовать rootDirs , так и сопоставлять пути в tsconfig , чтобы src/main.ts можно import data from было использовать data.json;`, но безрезультатно.

Ответ №1:

Если ваши import инструкции не содержат относительных спецификаторов (т. Е. просто что-то вроде import data from "messages.json" ), вы будете искать в, node_modules если ваш "moduleResolution" есть "Node" (что является наиболее распространенным).

Я думаю, что хорошим решением для вас может быть использование функции сопоставления путей компилятора (описанной здесь:https://www.typescriptlang.org/docs/handbook/module-resolution.html ). Затем вы можете импортировать свои данные, используя, import data from 'generated/messages.json' если вы настроили сопоставление путей для generated , чтобы указать, куда вы хотите. Таким образом, вы можете избежать использования относительных спецификаторов, если это то, чего вы хотите избежать.

Если это не дает вам того, что вы хотите, я бы рекомендовал выполнить синтаксический анализ здесь https://www.typescriptlang.org/docs/handbook/module-resolution.html поскольку это предоставит вам в основном все ваши варианты (если вы не хотите использовать более сложную систему сборки, такую как webpack).

Комментарии:

1. Увы, я использую webpack . Возможно, это объясняет, почему оба сопоставления путей, и rootDirs не имели никакого эффекта. Я обновлю и переориентирую вопрос.