'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

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

https://github.com/TypeStrong/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

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

'начало пряжи' теперь работает

Нашел ответ. Не устанавливая 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, то вот шаги, которые я придумал, чтобы исправить это в терминале.

  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 i в папке ts-node
  6. Убедитесь, что папка dist все еще существует, если не скопируйте ее обратно.
  7. Тестовый запуск ts-узла в терминале, если он не работает, он вернет ошибку, из-за которой модуль должен быть перемещен в../
  8. После запуска 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

Пожалуйста, используйте TSC --init, вместо TS --init

Другие вопросы по тегам