core-ds/arui-scripts

Проблема при парсинге конфига с Typescript@>=4.7

Closed this issue · 9 comments

Описание проблемы:
При запуске проекта возникает критическая ошибка при сборке во время парсинга файла конфига (с использованием npm-пакета 'config').
image

Воспроизводится при следующих зависимостях:

arui-scripts@14.0.0
NodeJS 16.16.0
typescript@4.8.2

Возможное решение:
Проблема решается апгрейдом версии ts-node и ts-loader? (мне хватило только ts-node, но пишут что второе тоже нужно).
Достаточные версии пакетов для корректной работы:

"ts-loader": "9.4.2",
"ts-node": "10.9.1"

Проблему так же решает даунгрейд версии TS до версии ниже 4.7, но это как решение, на мой взгляд, не стоит рассматривать

Актуальные ссылки:
https://stackoverflow.com/questions/72488958/false-expression-non-string-value-passed-to-ts-resolvetypereferencedirective

Echzio commented

Привет! С конфигом ты работаешь в рантайме на стороне сервера, при помощи ts-node, почему сложилось впечатление что проблема в arui-scripts?

Привет
Проблема в версии ts-node, которая идет в зависимостях скрипта. Чтобы все работало с последними версиями ТС нужно самостоятельно устанавливать более новую версию ts-node. Понимаю, что использование одной библиотеки (config) не обосновывает апдейт зависимости библиотеки, но это флаг, что похожие проблемы могут возникнуть при работе с другими пакетами.

Echzio commented

Понял, попробую разобраться

Есть какие-то апдейты?

Echzio commented

Привет! Сори за долгое ожидание, мне не удалось воспроизвести проблему, можем как-то связаться, чтобы ты написал название проекта и шаги для воспроизведения?

@me_rinta в телеге
давай там спишемся

Echzio commented

Привет!
Удалось воспроизвести проблему, но, в дополнение к моему сообщению выше - не устанавливая ts-node, ты его используешь как транзитивную зависимость из arui-scripts. Если ты хочешь использовать node-config вместе с typescript, все таки тебе нужно поставить ts-node в свой проект. В качестве обходного пути без установки ts-node ты можешь добавить флаг «transpileOnly» в твой tsconfig.json:

{
  …,
  "extends": …,
  "include": …,
  …,
  "ts-node": {
    "transpileOnly": true,
  },
  …,
}

Это избавит тебя от ошибки, используя транзитивный ts-node@9.1.1 (проверка типов через ts-node по большей части не нужна из за проверки в ide + fork-ts-checker-webpack-plugin). Но если в какой то момент в arui-scripts откажутся от ts-node, то все равно придется тянуть в его в проект, или переехать на https://github.com/tusharmath/node-config-ts

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

ts-node используется для парсинга конфигов и текущая версия справляется со своими задачами. Будет неправильно обновлять ts-node в arui-scripts ради того, чтобы в конечном проекте какой-то другой пакет (node-config), в котором не прописана эта зависимость, смог использовать корректную версию. По сути проблему стоит рассматривать в отрыве от arui-scripts. Есть пакет, который требует наличия ts-node, но сам никоим образом эту зависимость не ставит. Соответственно, нужно поставить её себе в проект.