榆树版本:0.19.1
有没有办法使用project-metadata-utils(或其他一些工具/解决方案)在 Elm 项目中进行一些元编程?诸如“获取自己的文件名”、“获取自己的文件目录”之类的简单内容,然后我将在我的 elm 应用程序中使用它们。
我想要的是这样的:
moduleName : String
moduleName = MetaData.moduleName
Run Code Online (Sandbox Code Playgroud)
从根本上说,Elm 不提供对此类信息的访问(没有反射 API),因此没有单一的好方法可以完全在 Elm 中执行此操作。您可以尝试使用 Ports 和 JS,但是如果您谈论的是 Elm 源的文件名,则不太可能仍然是已编译代码中的数据。
实际上,现在执行此操作的方法可能是在任何构建过程中将其作为代码生成构建步骤来实现,并生成一些仅包含您需要的常量的简单 Elm 文件。
例如,我的一个项目使用一个简单的 NPMprebuild脚本执行此操作,该脚本仅执行一个简单的sed命令将版本(从构建环境设置的环境变量中找到)插入Elm 文件中。这显然非常简单和脆弱,但如果需要,您可以创建一个更强大的系统来提供更多元数据。
显然,缺点是总是有可能在不更新元数据的情况下运行 Elm 构建。据我所知,没有办法避免这种情况,因为 elm 编译器当前不提供任何钩子。