«npx tsc --version» сообщает о другой версии TypeScript внутри виртуальной машины - PullRequest
1 голос
/ 13 марта 2019

Я хочу иметь возможность запускать npx tsc в моем проекте на обеих хостах + гостевые операционные системы. Но гость использует другую (более старую) версию tsc - и я не уверен, откуда она.

Моя настройка:

  • Хост ОС: Windows 10
  • Гостевая ОС: Debian 9
  • Я использую VirtualBox, а гость монтирует файлы хоста с помощью функции «общих папок» VirtualBox, поэтому у него нет отдельной копии файлов проекта - мой проект всегда доступен через общие папки.
  • У меня НЕ установлен Typescript глобально (npm -g) ни на хосте, ни на гостевой ОС (чтобы подтвердить это, запуск npm -g ls typescript на хосте + гость показывает «пусто», а запуск только «tsc» не работает , как и ожидалось).

У меня есть проект с TypeScript 3.3.3333, установленный в проект с NPM.

В операционной системе Windows, когда я cd в папку проекта и запускаю:

  • npm ls typescript Я вижу вывод: typescript@3.3.3333 (как и ожидалось)
  • npx tsc --version Я вижу вывод: Version 3.3.3333 (как и ожидалось)

Внутри гостевой ОС Linux, когда я cd в папку проекта и запускаю:

  • npm ls typescript Я вижу вывод: typescript@3.3.3333 (как и ожидалось)
  • npx tsc --version Я вижу вывод: message TS6029: Version 1.5.3 ( неожиданно! )

Так что я не могу запустить npx tsc для компиляции моего кода в гостевой системе, поскольку он не поддерживает некоторые из моих новых настроек tsconfig.

Откуда взялась эта версия tsc 1.5.3 и как от нее избавиться?

Или есть какая-нибудь альтернативная команда NPM, которую я могу запустить на хосте, которая установит пригодный tsc в проект, который работает как для Windows + Linux?

Кроме того, ни одна из родительских папок выше в корне моего проекта есть папка node_modules (но, конечно, в корне моего проекта есть подпапка node_modules).

1 Ответ

2 голосов
/ 13 марта 2019

Бинарный код TypeScript называется tsc для краткости.Когда он не установлен глобально, npx не может знать, что tsc относится к двоичному файлу tsc для пакета typescript.npx tsc относится к устаревшим tsc пакетам .

Способ, которым это можно исправить, заключается в явном указании имени пакета:

npx -p typescript tsc

И здесь проблемаявляется то, что проект опирается на глобальную установку TypeScript.Обычно typescript проект был написан с учетом зависимостей проекта и ссылался на локальную установку в сценариях package.json NPM:

...
"scripts": {
  "build": "tsc"
},
"devDependencies": {
  "typescript": "~3.3.0"
"
...
...