【问题标题】:Using two different modules with the same name in elm在 elm 中使用两个不同的同名模块
【发布时间】:2021-11-25 22:33:26
【问题描述】:

我使用openapi-generator-cli 为使用OpenAPI 描述的 REST api 生成 elm 代码。

到目前为止,基本上这对我来说效果很好。但现在我不得不提出一个问题,即我想访问在单独的 OpenAPI 文档中描述的两个微服务。问题是,openapi-generator 会为它为其生成接口的每个 REST API 生成一个 ApiApi.Data 模块。我已经检查了 openapi-generator 中的模板,但是这些模块名称是固定的,无法更改。

所以我想知道:是否有可能在一个 elm 项目中使用两个包含同名模块的包?任何其他想法如何在一个 elm 项目中使用两个单独的 API?

【问题讨论】:

    标签: elm openapi-generator-cli


    【解决方案1】:

    如果我没有误解你,你可以试试:

    import Foo.Api as FooApi
    import Bar.Api as BarApi
    

    【讨论】:

    • 不,这不是我的问题。我的问题是,实际上每个生成的 Api 客户端都在一个名称相同的模块中,即“Api”,没有前缀。
    • @Mathias Wimmer 如果您不自己编写模块,请尝试sed 我猜。
    • 我实际上已经修补了 openapi-generator 以支持为不同的模块指定不同的模块名称。
    【解决方案2】:

    您将需要重命名生成项目之一的模块。我建议自动重命名。

    This project 解决了一个类似的问题,所以也许它可以成为有用的灵感。

    最简单的方法可能是只分叉生成器并为模块前缀添加一个选项(并可能将其贡献回来,因为这似乎是一个普遍有用的选项;elm-graphql 已经有了这个)。

    【讨论】:

    • 感谢您的提示。我现在正在生成模块的 CI 服务器上对模块进行后处理。也许我稍后会扩展 openapi-generator 并向项目提交补丁。
    【解决方案3】:

    没有。 Elm 中的模块名称需要不同。在同一个项目中不能有两个同名的模块。您将收到以下错误:

    Detected problems in 1 module.
    -- AMBIGUOUS IMPORT ----------------------------------------------- src/Main.elm
    
    You are trying to import a `Foo` module:
    
    3| import Foo
              ^^^
    But I found multiple files in your "source-directories" with that name:
    
        src/Foo.elm
        src2/Foo.elm
    
    Change the module names to be distinct!
    

    【讨论】:

    • 我想我必须扩展 openapi-generator 或对生成的文件进行后处理。感谢您确认,我不必再寻找不同的解决方案了。
    猜你喜欢
    • 2014-04-21
    • 2017-03-06
    • 2013-03-21
    • 2020-11-13
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    相关资源
    最近更新 更多