如何将javascript配置文件包含到Angular main.bundle.js中

如何将javascript配置文件包含到Angular main.bundle.js中,angular,typescript,config,Angular,Typescript,Config,我已经看过好几篇关于这个的帖子,但是没有一篇完全符合我的要求,所以我不得不再问一次 我的愿望是在我的项目根目录下有一个名为“config.js”的文件,我将在git repo中设置为忽略该文件。在这个文件中,我只想添加一些全局配置变量,这些变量可以在项目中的任何其他地方访问 一篇帖子建议您将文件放入assets文件夹,然后使用HttpClient获取它。我尝试过这个方法,但它确实有效,但我遇到的问题是,这是一个配置文件,在处理任何脚本的一开始就非常需要它。之所以需要这样做,是因为其中一个全局变量

我已经看过好几篇关于这个的帖子,但是没有一篇完全符合我的要求,所以我不得不再问一次

我的愿望是在我的项目根目录下有一个名为“config.js”的文件,我将在git repo中设置为忽略该文件。在这个文件中,我只想添加一些全局配置变量,这些变量可以在项目中的任何其他地方访问

一篇帖子建议您将文件放入assets文件夹,然后使用HttpClient获取它。我尝试过这个方法,但它确实有效,但我遇到的问题是,这是一个配置文件,在处理任何脚本的一开始就非常需要它。之所以需要这样做,是因为其中一个全局变量是我将使用的api的url

这样做意味着我必须等待dom加载,然后等待ajax操作完成,然后才能在应用程序中执行任何其他操作。这是不能接受的

在检查控制台中下载的文件时,我看到一个名为main.bundle.js的文件。我不确定所有编译过的typescript文件都会在哪里结束,但我猜它就在这里。我希望我的config.js以某种方式附加到这个文件中,并在页面加载时加载。这有意义吗,或者有更好的/推荐的方法吗


(注意,Angular 5)

您应该使用环境目录

您可以为每个环境添加
environment..ts
文件。 默认的
environment.ts
文件应该是本地文件。当涉及到源代码管理提交时,忽略它

要部署,请使用
ngbuild--env=

为了使用环境,只需导入它

import { environment } from '../../environments/environment';

您可以阅读更多信息。

另一种解决方案是在生成后替换键。 你所有的钥匙都应该是字符串。 1.在您的environment.ts中,放置所有键:

{
keys1:"%%mykey1%%",
keys2:"%%mykey2%%"
}
  • 您可以像通常使用Angular CLI一样构建应用程序 然后您将在dist/main.js中找到您的
    %%mykey1%%
  • 制作一个小脚本,用所需的键替换
    %%mykey1%%
  • 这样,您就不需要在git repo中有100个环境文件。

    虽然有点晚了。。 最初的问题几乎是对的。 是的,您将配置放在json文件中,是的,您使用httpClient加载它。 你一直在挣扎如何在正确的时间加载它。。 嗯,APP_初始化器来解围了

    您可以使用此令牌提供一个服务工厂,它将在angular实际开始呈现组件之前加载您的配置


    这是一篇关于它的博文:

    为什么不使用环境..ts文件并简单地部署\服务于正确的环境?你能给我介绍一些相关文档吗?我注意到app下的environments文件夹包含environments.ts文件。这就是您所说的吗?您使用约定(例如environment.qa.json)创建环境文件。然后,使用
    ngbuild--env=qa
    标志进行部署。environment.ts文件(没有环境)是默认文件。你可以设置你想要的任何属性(比如APIRL),只需导入并在你的应用程序中使用它:
    import{environment}from'../../environments/environment'
    this.http.get(environment.apiUrl)。。。嗯。。当然请作为答案发布,我将接受虽然我同意这是处理我的情况的正确方法,但我仍然想知道如何将我自己的javascript文件添加到main.bundle.js(或任何其他可以使用它们的地方)@DallasCaley-我通常创建一个资产目录作为应用程序目录的同级目录。在此基础上,我添加了在npm上找不到的自定义js文件或内部js文件,并在apps\scripts下的angular-cli.json文件中添加了一个条目。ng构建将文件添加到捆绑包中。这很好,但它不是只在构建应用程序时才起作用吗?我想要一个解决方案,它既适用于您构建应用程序,也适用于您提供应用程序。是的,它只适用于构建应用程序。在工作中,我们实现了这两个小脚本,一个用于“开发模式”,另一个用于“生产”。我们从一个远程url获取属性,并将环境直接绑定到一个版本连接的构建。我为您提供的这个解决方案更多的是作为“额外解决方案”,而不是针对您的问题的最佳解决方案。