У меня есть сервер typecript nodejs с такой структурой:
tsconfig.json
package.json
src/
middleware/
utils/
index.ts
dist/
middleware/
utils/
index.js
При использовании Typescript 2 я смог перенести свой проект из src / в папку dist / и получить зеркальное отображение моей структуры каталогов для работы.
С выпуском Typescript 3 они представили ссылки на проекты и изменили способ преобразования кода в выходной каталог. Теперь tsc выводит в папку dist / вложенным образом следующим образом:
dist/
src/
middleware/
utils/
index.js
Мой tsconfig.json:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"allowJs": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"resolveJsonModule": true,
"declaration": false,
"outDir": "dist/",
"lib": [
"es7",
"dom"
]
},
"include": [
"src/"
]
}
Как я могу настроить Typescript для вывода моей папки src / в виде зеркального изображения в папку dist /?






Само по себе обновление TypeScript 2 до 3 не должно было изменить поведения; Если мы сможем подтвердить, что это так, это может быть ошибкой. В любом случае убедитесь, что параметр компилятора rootDir указывает на ваш каталог src, а не на родительский каталог, потому что структура под rootDir зеркально отражена под outDir.
Я добавил свой tsconfig.json, чтобы прояснить ситуацию. Проект сконфигурирован с использованием ключа "include" для указания каталога src /. Я только что подтвердил, что компилятор Typescript 2 просто отразит src / в dist / с этой конфигурацией, но компилятор Typescript 3 автоматически включит package.json и папку src /, вложенную в dist /. Попытки указать rootDir на src / терпят неудачу, потому что файла package.json там нет.
Мне не удалось воспроизвести такое поведение на основе предоставленной вами информации. Если вы можете опубликовать репозиторий, воспроизводящий проблему, я посмотрю. В противном случае я могу только предложить вам попробовать удалить что-то из своего проекта, пока проблема не исчезнет, и тогда вы увидите, что ее вызывает.
Я смог определить причину. Похоже, что добавление resolveJsonModule: true в мой tsconfig.json заставляло tsc выводить каталог dist / по-другому. Я до сих пор не совсем понимаю, почему он это делает, но, похоже, это тема для разговоров в нескольких проблемах Github: github.com/Microsoft/TypeScript/issues/25216 и github.com/Microsoft/TypeScript/issues/24744 Спасибо за вашу помощь, Мэтт!
Это совсем не ясно из страницы параметры компилятора.
Проблема появляется после добавления resolveJsonModule: true в tsconfig.json
У меня была аналогичная проблема при первоначальном преобразовании в проект Typescript. Я также установил resolveJsonModule: true, и каталог src был скопирован в выходной каталог dist.
Основная причина в том, что один из моих исходных файлов required package.json находится в корне проекта. После того, как я удалил это, tsc больше не добавлял src в каталог dist.
Короче говоря, убедитесь, что вам не нужны файлы вне каталога src.
Пояснительный FAQ здесь: https://github.com/Microsoft/TypeScript/wiki/FAQ#why-does---outdir-moves-output-after-adding-a-new-file
Оно работает! Но почему? Почему resolveJsonModule выводит tsc на /dist/src вместо /dist? В этом нет никакого смысла.
@ s.meijer, потому что он позволяет импортировать package.json ("JsonModule"), и это заставляет rootDir автоматически устанавливаться в каталог, содержащий весь исходный код (т.е. включая package.json), и теперь каталог src больше не является корневым каталогом, а subdir, и таким образом отражается в выводе. См. stackoverflow.com/a/61467483/8910547 для получения дополнительной информации и ссылок на то, что руководитель Typescript говорит по этому поводу.
Спасибо за это. он также дает тот же результат, когда вы хотите иметь такую структуру, как ./src/ и ./typings, но не хотите, чтобы ./src в вашем ./dist ... короче говоря, если вы ссылаетесь на ./ введя ./src, он будет включен, поэтому ./src будет сохранен. T_T
В моем случае это был "include": ["**/*.ts"] -> "include": ["src/**/*.ts"] в tsconfig.json.
Структура каталога вывода контролируется rootDir из compilerOptions. См. Документацию здесь, установка ./src должна решить проблему.
{
"compilerOptions": {
"rootDir": "src",
...
},
"include": [
"src/"
]
}
Фактически, в этом случае он просто поменяет местами проблемы. OP импортирует package.json, поэтому, если вы измените rootDir на src, вы получите правильную структуру outDir, но ошибку компиляции, потому что у вас есть исходный код за пределами rootDir. См. stackoverflow.com/a/61467483/8910547 для получения дополнительной информации и ссылок на то, что руководитель Typescript говорит по этому поводу.
использование rootDir решило проблему для меня с локальной библиотекой .ts, которую я импортировал
вы можете изменить импорт файла из src / entity / Post -> ../entities/Post в файле в ./src
это изменяет импорт в папку dist.
Помимо указания compilerOptions.outDir, укажите compilerOptions.rootDir в tsconfig.json.
{
"compilerOptions": {
// ...
"outDir": "dist",
"rootDir": "./",
// ...
}
}
Затем запустите: $ tsc -b внутри папки, где находится файл tsconfig.json.
Спасибо! Удалим комментарии.