Использование переменных среды Angular в библиотеках рабочей области

Я использую концепцию workspaces последней версии angular (> 6).

CLI может создать проект, который представляет собой библиотеку с такая команда:

ng generate library api

tsconfig.json приложения по умолчанию выглядит так

"paths": {
      "env": ["src/environments"],
      "api": [
        "dist/api"
      ],

После этого я создал одну службу с именем ApiService в библиотеке API, но она не работает.

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { environment } from 'env';

@Injectable()
export class ApiService {
  constructor(private http: HttpClient) {}

  getApiUrl(){
    console.log("Hello Api Url"+environment.api_url)
}
}

Возвращает ошибку, когда я создаю библиотеку API с помощью команды ng build api:

BUILD ERROR
error TS6059: File 'ROOT_APP_PATH/src/environments/environment.ts'
is not under 'rootDir' 'ROOT_APP_PATH\projects\api\src'.
'rootDir' is expected to contain all source files.

пожалуйста, помогите решить эту ошибку.

Заранее спасибо.


person Nikhil Chandu    schedule 06.08.2018    source источник


Ответы (2)


Вы должны добавить createdIn:

@Injectable({ providedIn: 'root' })

person RedOne    schedule 06.08.2018
comment
Спасибо за ваше предложение, но оно не работает. Кстати, я понял это, и я могу собрать библиотеку, если я удалю переменную среды. Так что речь идет не о создании одноэлементного сервиса в корневом модуле. Также я могу использовать эту службу в своем корневом приложении. Но когда я попытался получить переменную среды в этой библиотеке, я получаю эту ошибку. - person Nikhil Chandu; 06.08.2018
comment
@NikhilChandu, вы смогли найти какое-либо решение этой проблемы? у меня есть несколько сервисов, которые нужно импортировать в библиотеку angular, и я столкнулся с точной проблемой. любые предложения о том, как исправить это, будут действительно полезны. - person boredbear153; 18.01.2020
comment
Вы можете сделать rootDir: . или как этот rootDir: ../ в вашем tsconfig.json. - person RedOne; 19.01.2020

По умолчанию rootDir считается путем tsconfig.json

Указывает корневой каталог входных файлов. Используйте только для управления структурой выходных каталогов с --outDir.

параметры компилятора

person Akj    schedule 06.08.2018
comment
Я не понял твою мысль здесь. Я также добавил среду в пути корня tsconfig.json, но она ищет переменную среды в корне библиотеки, а не в корневом проекте. - person Nikhil Chandu; 06.08.2018
comment
но путь к среде по умолчанию настроен в угловом проекте. угловой.json - person Akj; 06.08.2018
comment
нет необходимости отдельно указывать. - person Akj; 06.08.2018
comment
Да, я согласен с вами. Но я не могу получить доступ к этой переменной среды в своей библиотеке. То же самое можно сделать с помощью ссылки. Пожалуйста, проверьте эту ссылку github для примера примера ссылка - person Nikhil Chandu; 06.08.2018
comment
Вы когда-нибудь решали это? Я столкнулся с той же проблемой. (Машинопись 3.1.1) - person PrivateJoker; 07.11.2018