Я все еще нахожусь в процессе настройки конфигурации моего проекта, поэтому у меня нет никаких ошибок, с которыми нужно работать прямо сейчас, но если я правильно понимаю документы Typescript ...
Похоже, что Ссылки на проекты Документы TypeScript - Ссылки на проекты не так уж необходимы при переносе с помощью babel-loader в webpack. (Я работаю в VSCode)
Я пытаюсь преобразовать приложение Electron в TypeScript и в настоящее время реорганизую структуру папок, поэтому у меня минимальные проблемы. Я пытаюсь понять, на правильном ли я пути и могу ли я избежать включения «ссылок» и вместо этого просто использовать «extends», чтобы получить нужную мне функциональность.
Вот моя структура проекта, игнорирующая все файлы которые не являются файлами tsconfig:
./tsconfig.json
./tsconfig-base.json
./main/tsconfig.json
./src/client/tsconfig.json
./__tests__
./__tests__/__client__/tsconfig.json
./__tests__/__main__/tsconfig.json
В этой структуре ./tsconfig.json
действительно будет только для ссылок, таких как пример на Microsoft Github
Electron Main Process и связанные с ним файлы находятся в формате ./main
. Здесь tsconfig установит "module":"commonjs"
для работы в node. Я думаю, что он также будет расширен из процесса ./tsconfig-base.json
Electron Renderer, а мои файлы приложения React-Redux находятся в ./src/client
. Здесь tsconfig устанавливает "module":"es2015"
или "module":"ESNEXT"
для работы с модулями es. Я думаю, что это также будет расширяться от ./tsconfig-base.json
./__tests__/__client__/tsconfig.json
и ./__tests__/__main__/tsconfig.json
будут просто дубликатами версий папки не tests , аналогичным образом расширяющейся из базовой конфигурации в ./
Конфигурация Webpack уже настроена для обработки создания отдельных пакетов для основных процессов и процессов рендеринга, чтобы все приложение могло быть на TypeScript. Есть ли причина, по которой я должен использовать «ссылки» в моих файлах в основной или клиентской папках?
Примеры фрагментов конфигурации Webpack, прежде чем я переключу файлы tnry на файлы .ts (dev):
const rendererInclude = path.resolve(__dirname, "src");
const mainInclude = path.resolve(__dirname, "main");
Основной процесс:
module.exports = [
{
mode: "development",
entry: path.join(__dirname, "main", "swell.js"),
output: {
path: path.join(__dirname, "dist"),
filename: "main-bundle.js",
},
target: "electron-main",
node: {
__dirname: false,
__filename: false,
},
resolve: {
extensions: [".ts", ".tsx", ".js", ".json"],
},
module: {
rules: [
{
test: /\.(ts|js)x?$/,
loader: "babel-loader",
include: mainInclude,
exclude: /node_modules/,
}
] } ... },
продолжение процесса рендеринга:
{
mode: "development",
entry: path.join(__dirname, "src", "index.js"),
output: {
path: path.join(__dirname, "dist"),
filename: "renderer-bundle.js",
},
target: "electron-renderer",
resolve: {
extensions: [".ts", ".tsx", ".js", ".json"],
},
module: {
rules: [
{
test: /\.(ts|js)x?$/,
loader: "babel-loader",
include: rendererInclude,
exclude: /node_modules/,
]} ...} ]