Как избежать "Модуль не найден: Ошибка: не удается разрешить 'tslib'" - ошибка при обращении к внешнему файлу машинописи? - PullRequest
0 голосов
/ 06 октября 2019

Вопрос

У меня есть клиент-серверное приложение, где клиент является angular-приложением. Сервер предоставляет несколько определений машинописи для предоставляемого им API. Эти определения загружаются из внешней папки проекта. До сих пор это работало нормально, однако теперь я обновляю с Angular 7 до Angular 8 (и с этим также обновляю Typescript с Версии 3.1 до 3.5), и при попытке использовать нестатическое перечисление из определений, это теперь вызывает эту ошибку:

Модуль не найден: Ошибка: Не удается разрешить 'tslib' в '/ path / to / server / definitions'

Когда файл api.ts имеет значениерасположенный в директории client, тогда все работает просто отлично.

Почему это происходит и что я могу с этим поделать?

Создание минимального воспроизводимого примера

Вот быстрый скрипт для создания минимального воспроизводимого примера:

mkdir project
cd project
ng new client --minimal=true --skipGit=true --routing=false --style=css
mkdir server
echo 'export enum ApiSample { X = "X" }' > server/api.ts
sed -i 's/"compilerOptions": {/"compilerOptions": {"paths":{"api":["..\/server\/api"]},/' client/tsconfig.json
sed -i -e "1iimport { ApiSample } from 'api';" -e "s/title = 'client';/title = 'client' + ApiSample.X;/" client/src/app/app.component.ts
cd client
npm start

Или, альтернативно, для создания примера вручную:

  1. Создание нового угловогоproject
  2. Создайте где-нибудь в файловой системе файл "api.ts" с содержимым export enum ApiSample { X = "X" }
  3. В файле "tsconfig.json" добавьте {"paths":{"api":["/path/to/server/api"]} к compilerOptions
  4. Доступ к ApiSample.X из любого файла углового проекта
  5. Выполнение npm start

Результаты пока

  • Мигратор добавил "importHelpers": true в tsconfig.json. Вот почему он работал раньше и больше не работает сейчас. Указание "importHelpers": false в tsconfig.json устраняет проблему, но, конечно, эта опция существует по определенной причине, так что окончательное решение не существует
  • Явное указание "tslib": ["node_modules/tslib"] устраняет проблему. Это может быть окончательным решением, хотя было бы интересно узнать, что именно происходит и где это задокументировано.
...