在工作区库中使用Angular环境变量

7
我正在使用Angular最新版本(>6)中的工作区概念。
CLI可以通过以下命令生成一个项目:
ng generate library api

默认应用的 tsconfig.json 如下所示

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

之后,我在api库中创建了一个名为ApiService的服务,像这样,但它没有起作用。
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)
}
}

使用命令ng build api构建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.

请帮忙解决这个错误。

提前感谢。

2个回答

0
您应该添加providedIn:
@Injectable({ providedIn: 'root' })

谢谢您的建议,但它并没有起作用。顺便说一下,我理解了这个问题,并且如果我删除环境变量,我可以构建该库。因此,这与在根模块中创建单例服务无关。另外,我能够在我的根应用程序中使用该服务。但是当我尝试在该库中获取环境变量时,我遇到了这个错误。 - Nikhil Chandu
@NikhilChandu,你能找到解决这个问题的方法吗?我有几个服务需要导入到一个Angular库中,但我遇到了同样的问题。如果你有任何建议来解决这个问题,那将非常有帮助。 - boredbear153
你可以在tsconfig.json中设置"rootDir": "."或者"rootDir": "../"。 - RedOne

0

默认情况下,rootDir 被视为 tsconfig.json 的路径。

它指定输入文件的根目录。仅用于通过 --outDir 控制输出目录结构。

编译器选项


我不太明白你的意思。我已经在根目录的tsconfig.json文件中添加了环境路径,但它只在库的根目录中搜索环境变量,而不是在根项目中搜索。 - Nikhil Chandu
但是环境路径在 Angular 项目中默认已配置。angular.json - Akj
没有必要单独指定 - Akj
是的,我同意你的观点。但是我无法在我的库中访问该环境变量。可以使用 link 来完成相同的操作。 请查看此 GitHub 链接以获取示例 link - Nikhil Chandu
你解决过这个问题吗?我也遇到了同样的问题。(Typescript 3.1.1) - PrivateJoker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接