Вопрос
У меня есть клиент-серверное приложение, где клиент является 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
Или, альтернативно, для создания примера вручную:
- Создание нового угловогоproject
- Создайте где-нибудь в файловой системе файл "api.ts" с содержимым
export enum ApiSample { X = "X" }
- В файле "tsconfig.json" добавьте
{"paths":{"api":["/path/to/server/api"]}
к compilerOptions
- Доступ к
ApiSample.X
из любого файла углового проекта - Выполнение
npm start
Результаты пока
- Мигратор добавил
"importHelpers": true
в tsconfig.json. Вот почему он работал раньше и больше не работает сейчас. Указание "importHelpers": false
в tsconfig.json устраняет проблему, но, конечно, эта опция существует по определенной причине, так что окончательное решение не существует - Явное указание
"tslib": ["node_modules/tslib"]
устраняет проблему. Это может быть окончательным решением, хотя было бы интересно узнать, что именно происходит и где это задокументировано.