'ts- node' не распознается как внутренняя или внешняя команда, операционная программа или командный файл

Я получаю ошибку в моем терминале Vs Code и командной строке, что 'ts- node' не распознается как внутренняя или внешняя команда, операционная программа или командный файл. m пытается запустить команду запуска в терминале 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"
}

}

Ответ 1

Я не рекомендовал бы полагаться на глобально установленный ts-node в своем собственном модуле, как предлагают некоторые ответы здесь.

Если вы сделаете это, то любой, кто установит ваш модуль, должен будет также установить глобально ts-node (просто обычной npm install будет недостаточно), и тогда у вас возникнет проблема, если двум модулям понадобятся такие вещи, как ts-node установленные глобально, но с разными версиями и т.д.

Чтобы избежать этого, все ваши зависимости должны быть определены в вашем package.json и установлены локально в node_modules.

Существует малоизвестная команда npx которая используется для запуска двоичных файлов из модулей, которые установлены локально в node_modules.

Например, посмотрите, что происходит, когда я устанавливаю (локально) ts-node и typescript:

[email protected]:~/node/test/ts-test-1$ npm i ts-node typescript
npm WARN [email protected] No description
npm WARN [email protected] No repository field.

+ [email protected]
+ [email protected]
added 19 packages from 44 contributors in 2.157s
[+] no known vulnerabilities found [19 packages audited]

и тогда я пытаюсь запустить ts-node:

[email protected]:~/node/test/ts-test-1$ ts-node -v
-bash: /Users/rsp/opt/node/bin/ts-node: No such file or directory

Я могу запустить его с помощью npx:

[email protected]:~/node/test/ts-test-1$ npx ts-node -v
ts-node v6.0.3
node v10.1.0
typescript v2.8.3

или я мог бы указать путь явно:

[email protected]:~/node/test/ts-test-1$ ./node_modules/.bin/ts-node -v
ts-node v6.0.3
node v10.1.0
typescript v2.8.3

В любом случае, мне не нужно ничего устанавливать глобально.

Ответ 2

Вам необходимо установить ts- node в качестве глобального

npm install -g ts-node

Дополнительная информация

https://github.com/TypeStrong/ts-node

Ответ 3

Я просто столкнулся с аналогичной проблемой: в Mac OS --exec ts-node работает, в Windows это не так.

Мое обходное решение - создать nodemon.json следующим образом:

{
  "watch": "src/**/*.ts",
  "execMap": {
    "ts": "ts-node"
  }
}

и измените раздел package.json скриптов на

"scripts": {
  "start": "nodemon src/index.ts"
},

Ответ 4

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

"dev": "nodemon --exec \"ts-node\" --cache-directory .tscache ./server.ts"

PS Это 1 год после проблемы. Не уверен, что версии пакета являются фактором. Подтвердит при необходимости.

Ответ 5

Мне достаточно было удалить node_modules и установить его снова, используя npm i.

Ответ 6

Если ваш ts-узел не работает, в качестве альтернативы вы можете сделать следующее:

1) Установите nodemon локально → npm я nodemon

2) В вашем package.json 'scripts' добавьте следующее:

"scripts": {
    "start": "nodemon index.ts",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

3) Теперь запустите npm start (это автоматически запустит узел для вас, но это НЕ СООТВЕТСТВУЕТ TS)

4) Откройте новую вкладку в терминале/командной строке, перейдите в папку, в которой вы работаете, и запустите tsc index.tsc --watch
Это скомпилирует вашу машинопись. Единственным недостатком является то, что вам просто нужно открыть обе вкладки, одну для автоматического запуска узла, а другую для автоматической компиляции, но это работает.

Ответ 7

Если вы используете Mac, то вот шаги, которые я придумал, чтобы исправить это в терминале.

  1. Установите globaly и используйте возвращенный путь к файлу с символической ссылкой 'ts-node и переместите этот файл в /usr/local/bin
  2. Установить локально без сохранения в package.json
  3. скопируйте папку в /node_modules в /usr/local/lib/node_modules/
  4. Убедитесь, что файл является исполняемым, открыв /ts-node/dist и используя команду chmod +x bin.js
  5. запустите npm я в папке ts-node
  6. Убедитесь, что папка dist все еще существует, если не скопируйте ее обратно.
  7. Тестовый запуск ts-узла в терминале, если он не работает, он вернет ошибку, из-за которой модуль нужно переместить в.. /
  8. После запуска ts-node обязательно удалите папку /usr/local/lib/node_modules/ts-node/node_modules

Ответ 8

Я удалил его из зависимостей dev и добавил в зависимости. Это решило проблему для моего случая.

Ответ 9

У меня была похожая проблема при использовании nodemon:

  • У меня nodemon установлен глобально, а ts-node установлен только локально.

Решение:

  • Я установил ts-node глобально (сохраняя локальную зависимость).

Ответ 10

Если вы работаете под Windows, вы не можете использовать одинарные кавычки в файле json. Вот почему вы должны заменить все символы одинарных кавычек (') на символы двойных кавычек ("). Но между двумя двойными кавычками (") нужно использовать экранированную двойную кавычку (\"). Для текущего случая вы должны изменить строку в файле "package.json":

"dev": "nodemon --exec 'ts-node --cache-directory.tscache'./server.ts",

в ряд:
"dev": "nodemon --exec \" ts-node --cache-directory.tscache\"./server.ts",