Я пытаюсь запустить dev-сервер с TypeScript и приложением Angular без необходимости каждый раз транспилировать ts-файлы.

Я обнаружил, что я могу запускать .ts файлы с ts-node, но я также хочу посмотреть .tsфайлы и перезагрузите мое приложение / сервер. Примером этого является команда gulp watch.

Заранее спасибо !!

Ответы (14)

Теперь вы можете просто npm install --save-dev ts-node nodemon, а затем запустить nodemon с файлом .ts, и он будет просто работать :

nodemon app.ts

Предыдущие версии:

Я боролся с тем же самым для своей среды разработки, пока не заметил, что API nodemonпозволяет нам изменить его поведение по умолчанию, чтобы выполнить пользовательскую команду.

For example, for the most recent version of nodemon:

nodemon --watch "src / **" --ext "ts, json" --ignore "src / ** / *. Spec.ts" --exec "ts-node src / index. ts "

Или создайте файл nodemon.json со следующим содержимым:

{
  "смотреть": ["src"],
  «ext»: «ts, json»,
  "игнорировать": ["src / ** / *. spec.ts"],
  "exec": "ts-node ./src/index.ts" // или "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, как предложил Sandokan:

{
  "watch": ["src/**/*.ts"],
  "ignore": ["src/**/*.spec.ts"],
  "exec": "ts-node ./index.ts"
}

У меня работает:

nodemon src/index.ts

Видимо благодаря этому запросу на вытягивание: https://github.com/remy/nodemon/pull/1552

я сделал с

"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

пряжа добавить ts-узел -D

запустить yarn dev, чтобы запустить dev-сервер

Специально для этой проблемы я создал библиотеку tsc-watch. Вы можете найти его на npm.

Очевидный вариант использования:

tsc-watch server.ts --outDir ./dist --onSuccess "узел ./dist/server.js"

вы можете использовать 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"
}

С nodemon и ts-node:

nodemon --watch source --ext ts, json --exec "node --loader ts-node / esm ./source/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

Я бы предпочел не использовать 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.

Добавьте "watch": "nodemon --exec ts-node - ./src/index.ts " в раздел scripts вашего package.json.

Другой способ - сначала скомпилировать код в режиме наблюдения с помощью tsc -w, а затем использовать nodemon поверх javascript. Этот метод аналогичен по скорости ts-node-dev и имеет то преимущество, что он больше похож на производственный.

 "скрипты": {
    "смотреть": "tsc -w",
    "dev": "nodemon dist / index.js"
  },

Вот альтернатива ответу HeberLZс использованием скриптов npm.

Мой 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 выполняет скрипт.

- проверить в watch: serve скрипт на самом деле является флагом node.js, он просто включает протокол отладки.

Я сбросил nodemon и ts-node в пользу гораздо лучшей альтернативы, ts-node-dev https://github.com/whitecolor/ts-node-dev

Просто запустите ts-node-dev src / index.ts

Если у вас возникли проблемы при использовании "type": "module" в package.json (описано в https://github.com/TypeStrong/ts-node/issues/1007), используйте следующую конфигурацию :

{
  "смотреть": ["src"],
  «ext»: «ts, json»,
  "игнорировать": ["src / ** / *. spec.ts"],
  "exec": "node --loader ts-node / esm --experimental-спецификатор-разрешение ./src/index.ts"
}

или в командной строке

nodemon --watch "src / **" --ext "ts, json" --ignore "src / ** / *. Spec.ts" --exec "node --loader ts-node / esm - разрешение-спецификатора-эксперимента src / index.ts "

2022 WebDevInsider