我正在使用cordova-plugin-facebook4插件构建Facebook身份验证访问的ionic/cordova项目。在config.xml中,它看起来像:

<plugin name="cordova-plugin-facebook4" spec="~1.7.1">
  <variable name="APP_ID" value="1234567890123456"/>
  <variable name="APP_NAME" value="My_Appy_App"/>
</plugin>

可以,但是我们使用的APP_ID用于开发应用程序,而针对其他环境(例如质量检查)我们有单独的facebook应用程序。

有什么方法可以在config.xml中参数化这些变量,并将其替换为构建步骤的一部分吗?就像是:
<plugin name="foo" spec="~0.0.0">
  <variable name="bar" value="${env.APP_ID}"/>
</plugin>

...,然后运行APP_ID=baz ionic build android或类似的代码。

我在cordova文档中看不到任何允许您执行此操作的内容。

最佳答案

正如您在帖子中提到的那样,cordova官方文档中没有太多与此相关的文档。在花了一些时间进行此分析之后,我得出以下结论:

有一些现成的最小帮助可用于参数化config.xml中可用的插件变量。这可以通过official cordova link中提到的首选项变量来实现。但是这种方法的问题在于其工作方式取决于插件的编码方式。

我用facebook插件尝试了这种方法,但是没用:(我尝试如下:

<preference name="MY_CUSTOM_STRING" default="12345678901234567" />
    <plugin name="cordova-plugin-facebook4" spec="~1.7.1">
        <variable name="APP_ID">$MY_CUSTOM_STRING</variable>
        <variable name="APP_NAME" value="My_Appy_App"/>
    </plugin>

尝试了相同的方法,谷歌 map 插件,它的工作:)我尝试如下:
<preference name="MY_CUSTOM_STRING" default="12345678901234567" />
<plugin name="cordova-plugin-googlemaps" spec="~1.3.9">
    <variable name="API_KEY_FOR_ANDROID">$MY_CUSTOM_STRING</variable>
</plugin>

因此,我可以得出的结论是,参数化方法取决于核心插件代码。

对于facebook插件,如果要参数化APP_ID变量,那么我想 Hook 是继续进行的方法。即使是简单的Windows批处理文件来替换字符串匹配,也应该可以使用,并且可以在预构建操作中调用该文件来实现所需的功能。希望能帮助到你。

更新:

我同意布兰登的评论。

在有限的时间内,我得以提出解决此问题的cordova钩子(Hook)。这可能是一种粗略的方法,也可以对其进行改进,但是目前这种方法可以正常工作。在我的github page中已将钩子(Hook)作为示例应用程序发布,并且README文件包含有关该钩子(Hook)的完整信息。希望能帮助到你。让我发布。

关于javascript - 使用环境变量/参数化config.xml,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37816035/

10-09 18:01