'ts-node' не распознается как внутренняя или внешняя команда, работающая программа или командный файл
Я получаю сообщение об ошибке в терминале и командной строке Vs Code о том, что ts-node не распознается как внутренняя или внешняя команда, работающая программа или командный файл. в то время как я пытаюсь запустить команду запуска в терминале npm, запустите dev, и я также добавил свой файл package.json.
{
"name": "tsnode",
"version": "1.0.0",
"description": "ts-node experiment.",
"scripts": {
"dev": "nodemon --exec 'ts-node --cache-directory .tscache' ./server.ts",
"start": "ts-node --fast ./server.ts"
},
"author": "Mugesh",
"license": "ISC",
"dependencies": {
"@types/body-parser": "^1.16.3",
"@types/chalk": "^0.4.31",
"@types/express": "^4.0.35",
"@types/node": "^7.0.18",
"body-parser": "^1.17.1",
"chalk": "^1.1.3",
"express": "^4.15.2",
"nodemon": "^1.11.0",
"ts-node": "^3.0.4",
"typescript": "^2.3.4"
}
}
31 ответ
Вам нужно установить ts-узел как глобальный
npm install -g ts-node
Дополнительная информация
Я бы не рекомендовал полагаться на глобально установленные ts-node
в вашем собственном модуле, как предлагают некоторые ответы здесь.
Если вы сделаете это, то любой, кто установит ваш модуль, должен будет установить ts-node
в глобальном масштабе, а также (просто обычный npm install
было бы недостаточно) и тогда у вас возникнет проблема, если двум модулям понадобятся такие вещи, как ts-node
глобально установленный, но с разными версиями и т. д.
Чтобы избежать этого, все ваши зависимости должны быть определены в вашем package.json и установлены локально в node_modules.
Есть малоизвестная команда npx
это используется для запуска двоичных файлов из модулей, которые установлены локально в node_modules.
Например, посмотрите, что происходит, когда я устанавливаю (локально) ts-node
а также typescript
:
rsp@mn-r:~/node/test/ts-test-1$ npm i ts-node typescript
npm WARN ts-test-1@0.0.0 No description
npm WARN ts-test-1@0.0.0 No repository field.
+ ts-node@6.0.3
+ typescript@2.8.3
added 19 packages from 44 contributors in 2.157s
[+] no known vulnerabilities found [19 packages audited]
а потом я пытаюсь бежать ts-node
:
rsp@mn-r:~/node/test/ts-test-1$ ts-node -v
-bash: /Users/rsp/opt/node/bin/ts-node: No such file or directory
Я могу запустить это с npx
:
127!rsp@mn-r:~/node/test/ts-test-1$ npx ts-node -v
ts-node v6.0.3
node v10.1.0
typescript v2.8.3
или я мог бы указать путь явно:
rsp@mn-r:~/node/test/ts-test-1$ ./node_modules/.bin/ts-node -v
ts-node v6.0.3
node v10.1.0
typescript v2.8.3
В любом случае, мне не нужно ничего устанавливать глобально.
Единственное решение, которое сработало для меня:
"start": "nodemon --exec npx ts-node ./index.ts",
Я только что столкнулся с похожей проблемой: на Mac OS --exec ts-node
работает, на Windows это не так.
Мой обходной путь заключается в создании nodemon.json
как это:
{
"watch": "src/**/*.ts",
"execMap": {
"ts": "ts-node"
}
}
и изменить package.json
раздел скриптов для
"scripts": {
"start": "nodemon src/index.ts"
},
Я столкнулся с той же проблемой и обнаружил, что она работает, используя двойные кавычки вместо одинарных.
"dev": "nodemon --exec \"ts-node\" --cache-directory .tscache ./server.ts"
PS Это 1 год после проблемы. Не уверен, что версии пакета являются фактором. Подтвердит при необходимости.
Если вы работаете под Windows, вы не можете использовать одинарные кавычки в файле json. Вот почему вам необходимо заменить все символы одинарных кавычек (') на символы двойных кавычек ("). Но между двумя двойными кавычками (") вы должны использовать экранированные двойные кавычки (\"). Для текущего случая вы должны измените строку в файле package.json:
"dev": "nodemon --exec 'ts-node --cache-directory.tscache'./server.ts",
в строку:
"dev": "nodemon --exec \" ts-node --cache-directory.tscache \ "./server.ts",
и повторного Nodemon предназначен для отслеживаниязапуска процессов узла при изменении файлов. Локальный, установленный в каталоге node_modules, не распознается в области действия
--exec
аргумент. Чтобы обойти это, некоторые рекомендуют устанавливать глобально. Как заметил пользователь, это не очень хорошее решение, потому что оно полагается на пакеты, внешние по отношению к вашему проекту, и делает в нашем
node_modules
бессмысленно.
Чтобы исправить ваше решение, префикс
ts-node
с
npx
помощник, который будет использовать ваш локальный
node_module
исполняемые файлы.
package.json, внутри
scripts
блокировать:
"start": "nodemon --watch './src/index.ts' --exec 'npx ts-node src/index.ts'"
Альтернативный подход может заключаться в использовании наблюдателя машинописного текста с существующим
node
команда и
concurrently
упаковка.
"start": "concurrently \"tsc --watch\" \"node ./dist/index.js\""
Тот же принцип. Один пакет отслеживает изменения (nodemon и tsc) и перезапускает второй процесс (сервер node / ts-node).
Для меня удаление node_modules
и установить его снова, используя npm i
было достаточно.
У меня была аналогичная проблема, но я решил, заменив
"dev": "nodemon --exec 'ts-node --cache-directory .tscache' ./server.ts",
к
"dev": "nodemon --exec ts-node --cache-directory .tscache ./server.ts",
Просто удалите одинарную кавычку (') и установите ts-node глобально
У меня была похожая проблема при использовании nodemon
:
- я имел
nodemon
установлен глобально, Иts-node
устанавливается только локально.
Решение:
- Я установил
ts-node
глобально (сохраняя локальную зависимость).
Я исправил проблему, удалив отдельные кворты вокруг ts-узла. как показано ниже "dev": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts"
обновляется как "dev": "nodemon --watch 'src/**/*.ts' --exec ts-node src/index.ts"
пожалуйста, обратите внимание. моя среда - Windows 10 и npm версии 6.14.4
Как предлагается в некоторых ответах, вы должны устанавливать локально, а не глобально.
npx
упрощает использование инструментов CLI и других исполняемых файлов, размещенных в реестре, как описано здесь . Следовательно, можно использовать для запуска
ts-node
на вашем терминале и даже скрипты из вашего файла. Например;
Прими это, чтобы быть моим
package.json
файл
{
...
"scripts": {
"start": "npx nodemon path/to/file"
}
}
Сейчас работает
npm run start
больше не дадут проблем.
Иногда вам просто нужно переустановить пакет или пакеты. Примерnpm install -D ts-node
илиnpm install
Вы можете попробовать следующую команду
"dev": "nodemon --watch './**/*.ts' --exec \"ts-node\" src/index.ts"
Это сработало для меня.
Если ваш ts-узел не работает, в качестве альтернативы вы можете сделать следующее:
1) Установите nodemon локально -> npm i nodemon
2) В сценарии package.json добавьте следующее:
"scripts": {
"start": "nodemon index.ts",
"test": "echo \"Error: no test specified\" && exit 1"
},
3) Теперь запустите npm start
(это автоматически запустит узел для вас, но это НЕ СОБИРАЕТ TS)
4) Откройте новую вкладку в терминале / командной строке, cd папку, в которой вы работаете, и запустите tsc index.tsc --watch
Это скомпилирует ваш машинописный текст. Единственным недостатком является то, что вам просто нужно будет открыть обе вкладки, одну для автоматического запуска узла, а другую для автоматической компиляции, но это работает.
У меня была такая же проблема с окнами. Я обнаружил, что решение моей проблемы было решено, когда я исправил некоторые неуместные'
Первоначально:
"scripts": {
"dev": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts",
"build": "tsc",
"start": "node dist/index.js"
}
Исправлена:
"scripts": {
"dev": "nodemon --watch 'src/**/*.ts' --exec \"ts-node\" src/index.ts",
"build": "tsc",
"start": "node dist/index.js"
}
Разница в случае, если это не ясно, в том, что я больше не заворачиваю ts-node
в '
* ИЗМЕНИТЬ * Я изменил это, основываясь на ответе @RoutesMaps.com выше. Это решило мою проблему, а также удалило'
но @RoutesMaps.com фактически объясняет решение проблемы
Я выполнил эту команду после npm install ts-node. Это устранило мою проблему:
npm install -D tslib @types/node
Нашел ответ. Не устанавливая ts-node глобально, просто создайте внутри вашего проекта файл nodemon.json и поместите его туда:
{
"execMap": {
"ts": "node --loader ts-node/esm"
}
}
Итак, теперь вы можете оставить тип: «модуль» в вашем package.json и модуль: «ESNEXT(или что-то, что поддерживает модули ES)» в вашем tsconfig.json. Тем не менее, вы будете получать постоянное предупреждение от nodemon, что это, я имею в виду тип загрузчика, экспериментальная функция, но это не критично.
В вашем package.json, в команде dev, например, просто запустите nodemon path/filename.ts
Напишите такой скрипт внутри вашего файла package.json.
"скрипты": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "rimraf ./build && tsc",
"start": "node build/index.js",
"tsc": "tsc",
"watch-node": "nodemon build/index.js",
"postinstall": "npm run tsc"
},
Затем запустите сборку npm.
и, наконец, запуск запуска npm
Немного опоздал на вечеринку, но моя проблема заключалась в том, что я установилNODE_ENV=Production
переменная окружения в моем CI. Когда NODE_ENV установлен, зависимости dev (где был указан ts-узел) не будут установлены.
Удаление NODE_ENV устранило проблему.
У меня была такая же проблема, и я придумал гибридное решение, используя npx для выполнения, но через конфигурацию nodemon (а не package.json).
nodemon.json...
{
"watch": ["src"],
"ext": "ts",
"exec": "npx ts-node ./src/server.ts"
}
Если вы используете Mac, то вот шаги, которые я придумал, чтобы исправить это в терминале.
- Установите globaly и используйте возвращенный путь к файлу с символической ссылкой 'ts-node' и переместите этот файл в / usr / local / bin
- Установить локально без сохранения в package.json
- скопируйте папку в /node_modules в /usr/local/lib/node_modules/
- Убедитесь, что файл исполняемый, открыв / ts-node / dist и используя команду
chmod +x bin.js
- запустите npm i в папке ts-node
- Убедитесь, что папка dist все еще существует, если не скопируйте ее обратно.
- Тестовый запуск ts-узла в терминале, если он не работает, он вернет ошибку, из-за которой модуль должен быть перемещен в../
- После запуска ts-node обязательно удалите папку /usr/local/lib/node_modules/ts-node/node_modules
У меня была такая же проблема. Я обнаружил, что решение моей проблемы было решено, когда я просто сначала запускаю эту команду"npm run build"
а потом попробуй nodemon
а также добавить в package.json
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "tsc",
"dev": "ts-node ./lib/server.ts",
"start": "nodemon ./dist/server.js",
"prod": "npm run build && npm run start"}
Если вы используете code-runner в vs-code, отредактируйте файл setting.json
"typescript": "tsc $fileName && node $fileNameWithoutExt.js "
эта ошибка может возникнуть, если у вас установлена одна версия ts-node в вашем проекте и другая версия глобально. Для решения проблемы - установите ту же версию пакета
На самом деле, если вы устанавливаете nodemon глобально, тогда также глобально устанавливайте ts-node. Если вы устанавливаете nodemon как -D (зависимость для разработчиков), установите ts-node как зависимость для разработчиков. Это будет работать.
Я столкнулся с той же ошибкой при попытке запустить nodemon из Git Bash , но, похоже, он отлично работает при запуске nodemon из PowerShell. Таким образом, вам следует подумать о том, чтобы дать шанс некоторым другим терминалам.
Мне помогла эта команда
npm i -D машинопись
Конкретнее написано там https://nodejs.dev/learn/nodejs-with-typescript