2017-02-17 68 views
9

我使用构建服务器来构建我的Vue项目,使用由Vue 2模板很好地提供的npm run build命令。 Vue模板还提供访问可在config目录下的文件中配置的环境特定数据的功能。比如prod.env.js等。然后,您可以通过process.env.API_PREFIX访问该数据,如模板手册中所示。使用Vue webpack模板的独立于环境的构建

我希望能够构建一次代码,然后将相同的构建(如输出在Dist中定义)部署到多个服务器,但不同的服务器使用不同的配置(不同的API_PREFIX等)。目前,process.env引用在编译时由Webpack编译器进行扩展。因此我必须为每个环境重建。

我可以想到一些方法来做到这一点 - 显然配置的加载必须在运行时发生,并且假设它在浏览器中运行并且必须引用某个文件,它必须通过Web服务器单独提供的某些静态JSON配置的AJAX请求,或类似的请求。但我很想知道这里有人会如何处理这个要求。

+1

有几个技巧,但需要更多关于如何确定API_PREFIX的信息。它与应用程序将要访问的域相关吗?你能举出具体的例子吗? – aristidesfl

+0

是的,API前缀是特定于每个环境的配置数据的示例。这对每个部署环境都是不同的域。例如,在“分段”部署环境的构建中,API前缀可能是“https:// staging-api.mycompany.com”。 [虽然原则上来自环境名称并不是可以推导出来的。] – amoe

回答

2

不知道你的具体架构很难给出具体的建议。相反,我会留下一些一般的想法。

为了以一种理智的方式做你想做的事情,你可能必须从你服务前端的域中获得前缀。

有几件事情,你可以使用,除了在运行时使用window.location

即使它不解决您的具体情况,希望它给你一个可用的概念。

+0

我的问题并不是真的关于API前缀,这只是我想在构建过程之后参数化的一个配置的偶然示例。我还有很多其他特定于部署环境的内容与前缀无关。我需要一种通用的方式来在运行时读取配置变量。 – amoe

+1

问题在于你在哪里,何时以及如何编写它们。根据哪些标准。没有关于用例的更具体的描述,很难给出更具体的想法。 – aristidesfl

+0

我想我已经决定使用Webpack外部程序,一个全局脚本标记以及''static'目录下的一个文件来定义'window'对象的配置。这在运行时被评估,但仍然以同步的方式进入webpack上下文。 – amoe