You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin/JS(Kotlin多平台)中获取local.properties内的API Key?

在Kotlin/JS(Kotlin多平台)中获取API Key的方案

下面是几种替代Android local.properties、在Kotlin/JS环境下安全获取API Key的可行方案:

1. 通过Gradle编译参数传递

这种方式和Android的思路最接近,把local.properties里的配置通过Gradle传递给Kotlin/JS编译过程:

  • 先在项目根目录的local.properties中添加API Key:
    API_KEY=your_real_api_key
    
  • 在项目根目录的build.gradle.kts中读取该属性,并注入到JS编译配置:
    // 加载local.properties文件
    val localProps = java.util.Properties().apply {
        file("local.properties").takeIf { it.exists() }?.inputStream()?.let { load(it) }
    }
    val apiKey = localProps.getProperty("API_KEY") ?: error("请在local.properties中配置API_KEY")
    
    kotlin {
        js(IR) {
            browser {
                compilations.all {
                    // 将API_KEY作为编译常量注入
                    kotlinOptions.freeCompilerArgs += "-Xdefine=API_KEY:$apiKey"
                }
            }
        }
    }
    
  • 在Kotlin/JS代码中直接引用这个编译常量:
    val apiKey = definedExternally<String>("API_KEY")
    // 后续使用apiKey即可
    

2. 读取本地JSON配置文件

这是前端项目常用的方式,通过加载本地配置文件获取密钥:

  • 在src/jsMain/resources目录下创建app-config.json(不要提交到Git,添加到.gitignore):
    {
      "apiKey": "your_real_api_key"
    }
    
  • 使用Kotlinx Serialization读取该文件:
    import kotlinx.serialization.Serializable
    import kotlinx.serialization.json.Json
    import kotlinx.browser.window
    import kotlin.js.Promise
    
    @Serializable
    data class AppConfig(val apiKey: String)
    
    fun loadAppConfig(): Promise<AppConfig> {
        return window.fetch("app-config.json")
            .then { it.text() }
            .then { Json.decodeFromString<AppConfig>(it) }
    }
    
    // 使用示例
    loadAppConfig().then { config ->
        println("Loaded API Key: ${config.apiKey}")
        // 在这里执行需要API Key的逻辑
    }
    

3. 读取系统环境变量

适合本地开发或CI/CD场景,直接从环境变量中获取密钥:

  • 本地开发时设置环境变量:
    • Linux/macOS终端:export API_KEY=your_real_api_key
    • Windows PowerShell:$env:API_KEY="your_real_api_key"
  • 在Kotlin/JS代码中读取环境变量:
    val apiKey = js("process.env.API_KEY") as? String ?: "fallback_key_if_needed"
    
  • 如果使用webpack打包,需要在webpack.config.d目录下创建env-plugin.js,确保环境变量能被webpack识别:
    const webpack = require('webpack');
    
    module.exports = {
        plugins: [
            new webpack.DefinePlugin({
                'process.env.API_KEY': JSON.stringify(process.env.API_KEY)
            })
        ]
    };
    

重要提示

  • 无论使用哪种方式,绝对不要将API Key硬编码到源代码中,也不要将包含密钥的配置文件提交到版本控制
  • 如果API Key涉及敏感操作(比如付费接口、用户数据操作),建议通过后端代理请求,避免在前端直接暴露密钥

内容的提问来源于stack exchange,提问作者sanao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:47:21