Есть ли способ использовать npm-скрипты для запуска tsc -watch && nodemon --watch?
Я ищу способ использовать скрипты npm для запуска tsc --watch && nodemon --watch
одновременно. Я могу запускать эти команды независимо, но когда я хочу запустить оба из них, выполняется только первый.
например.
если у меня есть этот script:
"scripts": {
"runDeb": "set NODE_ENV=development&& tsc --watch && nodemon --watch"
}
tsc --watch
выполняется, но nodemon
никогда не вызывается, и наоборот.
Ответы
Ответ 1
Попробуйте добавить это в свой пакет package.json:
"scripts": {
"start": "concurrently --kill-others \"tsc -w\" \"nodemon dist/app.js\"",
}
А также добавьте эти пакеты npm (одновременно, nodemon, typescript) к вашему package.json:
"devDependencies": {
"concurrently": "^2.2.0",
"typescript": "^1.8.10",
"nodemon": "^1.9.2",
}
Ответ 2
Я думаю, что вы хотите что-то вроде этого (моя текущая настройка):
"scripts": {
"compile": "tsc && node app.js",
"dev": "./node_modules/nodemon/bin/nodemon.js -e ts --exec \"npm run compile\""
}
Я создал два сценария "compile" и "dev". Чтобы начать разработку, вы просто запускаете npm run dev
, который запускает nodemon и заставляет его смотреть файлы .ts(используя флаг -e
). Затем каждый раз, когда файл .ts изменяется, nodemon будет exec
компилируемой задачей, которая в основном компилирует и запускает приложение node.
В то время как одновременное использование является хорошим вариантом, моя настройка гарантирует, что tsc
выполняется работа перед попыткой выполнить полученные .js файлы.
Ответ 3
Я уже некоторое время использую решение AlterX, и оно отлично работает, но я обнаружил, что оно довольно медленное. Вместо этого я сейчас использую tsc -w atch. Это заставляет tsc использовать инкрементную компиляцию, похожую на флаг -w
, что делает перезапуск приложения намного быстрее.
Это так же просто, как положить что-то похожее на это в вашем package.json:
"scripts": {
"start": "./node_modules/.bin/tsc-watch --onSuccess \"node .\""
}
Ответ 4
Мое решение в октябре 2018 года с использованием новейших версий nodemon.
первый:
установить nodemon
(npm install nodemon --save-dev
) и ts-node
(npm install ts-node --save-dev
)
второй:
создать nodemon.json
. Мне нравится хранить мою конфигурацию nodemon в отдельном файле nodemon.json, чтобы облегчить чтение сценариев npm. Итак, создайте nodemon.json
в корне проекта со следующим содержимым:
{
"ignore": ["**/*.test.ts", "**/*.spec.ts", ".git", "node_modules"],
"watch": ["src"], // your .ts src folder
"exec": "npm start", // your npm script created in package.json
"ext": "ts"
}
затем создайте свой npm start
скрипт npm start
например, так:
"scripts": {
...
"start": "ts-node src/server.ts",
"dev:ts": "nodemon",
...
}
Затем запустите npm run dev:ts
или yarn dev:ts
и посмотрите код вашего машинописного сервера.
Для более подробной информации, такой как Jest
тесты Jest
т.д., Вы можете заглянуть в эту статью
Ответ 5
TypeScript-node-Starter
работает быстро
https://github.com/microsoft/TypeScript-node-Starter/blob/master/package.json
"dev": "concurrently -k -n \"TypeScript,Node\" -c \"yellow.bold,cyan.bold\" \"npm run watch-ts\" \"nodemon ./dist/app.js\"",
"watch-ts": "tsc -w"
Здесь мы даем npm run watch-ts
имя TypeScript
(используя concurrently -n
) и добавляем цвет yellow.bold
, используя concurrently -c
.
Итак, я могу довольно легко распознать сообщения для каждого процесса.
Ответ 6
Что происходит
Проблема в том, что на всех файлах есть два наблюдателя. Один из них - tsc -w
а nodemon
- nodemon
.
Когда .ts
изменение в файл .ts
, tsc
обнаружит это, tsc
и создаст версию .js
в папке назначения.
Теперь, с точки зрения Nodemon, он обнаруживает два изменения (как минимум) - одно для .ts
и одно для .js
. При первом изменении он перезапускается сам, но при втором изменении он не знает, что уже происходит другое "начало", поэтому он пытается перезапустить снова, и это не удается. Для меня это ошибка nodemon - см. Https://github.com/remy/nodemon/issues/763.
Решения
1) Используйте tsc-watch --onSuccess
У tsc -w atch есть --onSuccess
который вы можете поместить node
. Таким образом, у вас будет только один наблюдатель.
2) Задержка nodemon
Вы можете легко отложить перезапуск nodemon (см. --delay). Это требует наименьшего изменения настройки.
3) У nodemon только мониторинг целевой папки TSC
Я не смог настроить его, но, таким образом, nodemon
обнаружит только одно изменение. Это может вызвать проблемы в будущем или когда tsc генерирует несколько файлов.
Ответ 7
Обычная компиляция: если имя файла main.ts
шаг 1: tsc main.ts
шаг 2: узел main.js
Простая и разовая (цикличная) компиляция:
TSC Main --watch