Настройка
У меня есть модуль bluebird
вместе с @types/bluebird
, установленным в папке node_modules
.
У меня также есть некоторые .ts
файлы, которые будут упакованы с помощью Webpack и будут использоваться в браузере.
По разным причинам папка node_modules
находится вне иерархии путей моего .ts
files.
Проблема
Я хотел бы импортировать модуль bluebird
в мои .ts
файлы так, чтобы:
- Я получил набор текста.
- Webpack разрешит модуль и включит его в выходной комплект.
Если бы node_modules
был в нужном месте в иерархии путей, я мог бы просто сделать это:
import * as Promise from 'bluebird'
Компилятор Typescript (через ts-loader
) разрешает определения типов в node_modules/@types/bluebird
и проверяет тип, а Webpack разрешает фактический модуль в node_modules/bluebird
и выдаетэто в комплекте.
С внешней папкой node_modules
я не могу заставить это работать.
Подходы, которые я попробовал
Пока я могу получить этотак что Typescript счастлив, но не Webpack.
1.Установка baseURL
и paths
в tsconfig.ts
Самым очевидным решением для меня, похоже, было установить baseURL
и установить paths
в node_modules
в tsconfig.json
вот так (shared
содержит папку node_modules
):
"baseUrl": "..",
"paths": {"shared/*":["shared/*"]}
Однако я не могу сделать:
import * as Promise from 'shared/node_modules/bluebird'
Мне нужно:
import * as Promise from 'shared/node_modules/@types/bluebird/index'
Но этот импорт не работает для Webpack.Он либо не может найти его, либо, если я настрою его для его поиска, ts-loader не захочет его компилировать (потому что это файл объявления), либо, если я настрою его на игнорирование, произойдет сбой во время выполнения, потому чтоего там нет.
2.Относительный импорт
Я попытался указать относительный путь к папке node_modules
, но у меня возникла примерно та же проблема.