Хорошо, поэтому, чтобы избежать путаницы с другими, я публикую свое решение / выводы:
Да, вы можете просто использовать tsconfig.json
без необходимости resolve/alias
в Webpack.Вы должны просто сделать это один раз с настройкой Typescript.
РЕДАКТИРОВАТЬ: Нет, оказывается, вам нужен resolve/alias
раздел в webpack.config.js
.Typescript будет счастлив без него, но тогда вы получите ошибки Webpack при его сборке. Выполните оба действия, чтобы заставить его работать .
СОВЕТ: Убедитесь, что пути, указанные вами в paths
разделе tsconfig.json
, относятся к baseUrl
точка входа.Не делайте их относительно файла tsconfig.json
, baseUrl
подобен корню проекта для не относительных импортов модулей, определенных с paths
.
Из документов Typescript, абсолютных имен модулей (импорт *от package-a
) относительно baseUrl
~ https://www.typescriptlang.org/docs/handbook/module-resolution.html#base-url
Все импорты модулей с не относительными именами предполагаются относительно baseUrl.
Относительные модули (импорт * из ./packages
) только из текущего файла, как указано:
Обратите внимание, что относительный импорт модулей не влияет на установку baseUrl, поскольку они всегда разрешаются относительно их импортируемых файлов..
Итак, если у вас есть:
./packages
./package-a
./package-b
./index.ts
./tsconfig.json
Ваш tsconfig.json
будет выглядеть так:
{
"compilerOptions": {
"baseUrl": "./packages",
"paths": {
"package-a/*": [ "./package-a/*" ],
},
},
"include": [
"./packages/**/*"
]
}
Тогда ваш webpack.config.json
будет выглядеть так:
{
resolve: {
alias: {
'package-a': path.resolve(__dirname, 'packages/package-a/'),
}
},
}
Затем вы можете импортировать из index.ts
следующим образом:
import { pkgAThing } from 'package-a';
// or
import { otherPkgAThing } from 'package-a/dir/dir`;
Что является альтернативой относительному стилю:
import { pkgAThing } from './packages/package-a`;