Я пытаюсь запустить dev-сервер с TypeScript и приложением Angular без необходимости каждый раз переносить файлы ts. Я обнаружил, что могу работать с ts-node
, но я также хочу смотреть .ts
файлы и перезагружать приложение / сервер, как если бы я делал что-то вроде gulp watch.
Как смотреть и перезагружать ts-node при изменении файлов TypeScript
Ответы (13)
РЕДАКТИРОВАТЬ: Обновлено для последней версии nodemon!
Я боролся с тем же самым в своей среде разработки, пока не заметил, что API nodemon
позволяет нам изменить его поведение по умолчанию, чтобы выполнить пользовательскую команду.
Например, для последней версии nodemon
:
nodemon --watch "src/**" --ext "ts,json" --ignore "src/**/*.spec.ts" --exec "ts-node src/index.ts"
Или создайте nodemon.json
файл со следующим содержанием:
{
"watch": ["src"],
"ext": "ts,json",
"ignore": ["src/**/*.spec.ts"],
"exec": "ts-node ./src/index.ts" // or "npx ts-node src/index.ts"
}
а затем запустить nodemon
без аргументов.
Благодаря этому вы сможете перезагрузить ts-node
процесс в реальном времени, не беспокоясь о базовой реализации.
Ваше здоровье!
И со старыми версиями nodemon
:
nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/index.ts
Или даже лучше: перенесите конфигурацию nodemon в nodemon.json
файл со следующим содержимым, а затем просто запустите nodemon
, как предложил Сандокан:
{
"watch": ["src/**/*.ts"],
"ignore": ["src/**/*.spec.ts"],
"exec": "ts-node ./index.ts"
}
index.ts
- экспресс-экземпляр, как я могу его убить и перезапустить
- person hjl; 23.08.2016
{ "watch": ["src/**/*.ts"], "ignore": ["src/**/*.spec.ts"], "exec": "ts-node ./app-server.ts" }
и просто введите nodemon
- person Sandokan El Cojo; 27.10.2016
./
перед именами папок, и он сломался. У меня это сработало: { "verbose": true, "watch": ["server/**/*.ts"], "ext": "ts js json", "ignore": ["server/**/*.spec.ts"], "exec": "ts-node index.ts" }
. И командная строка: nodemon --watch server/**/*.ts --ignore server/**/*.spec.ts --verbose --exec ts-node index.ts
- person Adrian Moisa; 11.03.2017
ext
в файле конфигурации, чтобы он выглядел для изменений ts. Мой файл конфигурации выглядит так: { "watch": ["src/**/*.ts"], "ignore": ["src/**/*.spec.ts"], "ext": "ts js json", "_exec": "node dist/startup.js", "exec": "ts-node src/startup.ts" }
- person Lasse D. Slot; 28.03.2017
"exec": "ts-node ./src/index.ts"
становится = ›"exec": ["ts-node", "src/index.ts"]
- person Armeen Harwood; 10.09.2017
nomdemon.json
должно быть nodemon.json
, я думаю
- person Simon Meusel; 02.06.2018
nodemon
и ts-node
станут очень медленными, если проект машинописного текста станет слишком большим. ts-node-dev
не может перезагружаться, если ts-файл содержит только интерфейсы с изменениями.
- person Ling; 17.10.2019
\"
, скрипт будет нормально работать: "nodemon --watch \"./src/**/*.ts\" -r dotenv/config --exec \"ts-node\" src/index.ts"
- person TJBlackman; 11.03.2020
nodemon.json
версией мне приходилось запускать nodemon -e ts
, теперь с обновленным файлом конфигурации эта опция не требуется.
- person humkins; 17.03.2020
Я отказался от nodemon
и ts-node
в пользу гораздо лучшей альтернативы ts-node-dev
https://github.com/whitecolor/ts-node-dev
Просто запустите ts-node-dev src/index.ts
tsc --watch
.
- person Angelos Pikoulas; 11.03.2019
nodemon
с ts-node
. Спасибо!
- person Florian Ludewig; 16.01.2020
"start": "ts-node-dev src"
. Нет необходимости в babel, nodemon или какой-либо другой конфигурации, которая идет с ним. Все сделано за вас.
- person JMadelaine; 15.04.2020
nodemon
.
- person Nikola Mihajlović; 21.04.2020
nodemon src/index.ts
- person Rafael Pizao; 10.09.2020
ts-node-dev
- хорошая идея, но у нее много проблем. Это действительно просто недостаточно надежно для реального использования. К сожалению, сопровождающий кажется недостаточно подготовленным для решения этих проблем. Вернуться к nodemon
Я иду ...
- person forresthopkinsa; 23.07.2021
Вот альтернатива ответу HeberLZ с использованием сценариев npm.
My package.json
:
"scripts": {
"watch": "nodemon -e ts -w ./src -x npm run watch:serve",
"watch:serve": "ts-node --inspect src/index.ts"
},
-e
флаг устанавливает расширения для поиска,-w
устанавливает наблюдаемый каталог,-x
выполняет сценарий.
--inspect
в watch:serve
скрипте на самом деле является флагом node.js, он просто включает протокол отладки.
ts-node --inspect -- src/index.ts
из-за этого.
- person bluenote10; 02.04.2018
-e ts -w ./src
помогло мне - это сработало с проектом, сгенерированным CLI loopback4
- person Jonathan Cardoz; 06.01.2020
Это работает для меня:
nodemon src/index.ts
Очевидно, благодаря этому запросу на перенос: https://github.com/remy/nodemon/pull/1552
ts-node
.
- person d512; 12.12.2019
node_modules/
? Для меня это не удастся, если у меня его нет.
- person DLight; 12.12.2019
ts-node
. Выполнение этой команды без ts-node
приведет к failed to start process, "ts-node" exec not found
ошибке. Скорее всего, это оставшийся артефакт в node_modules
. При этом это решение намного приятнее, поскольку не требует дополнительной настройки.
- person Brandon Clapp; 25.05.2020
npm install -g ts-node
- person Rafael Pizao; 10.09.2020
Специально для этого вопроса я создал библиотеку tsc-watch
. вы можете найти его на npm.
Очевидный вариант использования:
tsc-watch server.ts --outDir ./dist --onSuccess "node ./dist/server.js"
"[...] similar to nodemon but for TypeCcript."
:)
- person Massimiliano Kraus; 28.01.2020
вы можете использовать ts-node-dev
Он перезапускает процесс целевого узла при изменении любого из требуемых файлов (как стандартный node-dev), но разделяет процесс компиляции Typescript между перезапусками.
Установить
yarn add ts-node-dev --dev
и ваш package.json может быть таким
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"tsc": "tsc",
"dev": "ts-node-dev --respawn --transpileOnly ./src/index.ts",
"prod": "tsc && node ./build/index.js"
}
Добавьте "watch": "nodemon --exec ts-node -- ./src/index.ts"
в scripts
раздел вашего package.json
.
я сделал с
"start": "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec ts-node src/index.ts"
и начало пряжи .. ts-node не похож на ts-node
добавьте это в свой файл package.json
scripts {
"dev": "nodemon --watch '**/*.ts' --exec 'ts-node' index.ts"
}
и для этого вам также необходимо установить ts-node как dev-dependency
yarn add ts-node -D
запустите yarn dev
, чтобы запустить сервер разработки
Я бы предпочел не использовать ts-node и всегда запускать из папки dist.
Для этого просто настройте свой package.json с конфигурацией по умолчанию:
....
"main": "dist/server.js",
"scripts": {
"build": "tsc",
"prestart": "npm run build",
"start": "node .",
"dev": "nodemon"
},
....
а затем добавьте файл конфигурации nodemon.json:
{
"watch": ["src"],
"ext": "ts",
"ignore": ["src/**/*.spec.ts"],
"exec": "npm restart"
}
Здесь я использую exec: npm restart
, чтобы весь ts-файл перекомпилировался в js-файл, а затем перезапустил сервер.
Чтобы запустить в среде разработки,
npm run dev
Используя эту настройку, я всегда буду работать с распределенными файлами и мне не понадобится ts-node.
Другой способ - сначала скомпилировать код в режиме просмотра с tsc -w
, а затем использовать nodemon поверх javascript. Этот метод аналогичен по скорости ts-node-dev и имеет то преимущество, что он больше похож на производственный.
"scripts": {
"watch": "tsc -w",
"dev": "nodemon dist/index.js"
},
"dev": "( tsc -w & ) && nodemon dist/index.js"
.
- person Craig Hicks; 20.05.2021
Если у вас возникают проблемы при использовании "type": "module"
в package.json
(описано в https://github.com/TypeStrong/ts-node/issues/1007) используйте следующую конфигурацию:
{
"watch": ["src"],
"ext": "ts,json",
"ignore": ["src/**/*.spec.ts"],
"exec": "node --loader ts-node/esm --experimental-specifier-resolution ./src/index.ts"
}
или в командной строке
nodemon --watch "src/**" --ext "ts,json" --ignore "src/**/*.spec.ts" --exec "node --loader ts-node/esm --experimental-specifier-resolution src/index.ts"
ШАГ 1. Вы можете просто установить nodemon
и ts-node
(пропустить, если вы уже сделали)
npm install --save-dev nodemon ts-node
ШАГ 2. Вы можете настроить стартовый скрипт в package.json.
"start": "nodemon ./src/app.ts"
Теперь nodemon автоматически идентифицирует машинописный текст из проекта и сам использует команду ts-node
. Используйте npm start
, и он автоматически компилируется / просматривается и перезагружается.
Если вы получаете какие-либо ошибки, например, модуль машинописного текста не найден в проекте. просто используйте эту команду в папке проекта.
npm link typescript