Meteor构建时如何在客户端代码中访问自定义环境变量
你当前看到的客户端process.env仅包含NODE_ENV和TEST_METADATA,是因为Meteor默认不会传递自定义环境变量到客户端,避免敏感信息意外泄露。你可以通过以下两种方案实现需求:
方案1:使用Meteor官方约定的环境变量前缀
Meteor默认会将所有以METEOR_PACKAGE_CONFIG_为前缀的环境变量暴露到客户端的process.env对象中,前缀会自动被移除,不需要额外配置:
- 构建前设置对应环境变量,示例:
# Linux/macOS 环境 export METEOR_PACKAGE_CONFIG_CLIENT=foo # Windows 环境 set METEOR_PACKAGE_CONFIG_CLIENT=foo
- 代码中直接使用即可:
if(process.env.CLIENT === 'foo') { // 仅foo客户对应的逻辑 }
- 生产构建时Meteor会自动完成变量替换和死代码消除。
方案2:通过Babel插件自定义注入规则
如果你不想用官方前缀,或者需要更灵活的注入逻辑,可以使用babel-plugin-transform-inline-environment-variables插件实现自定义环境变量注入,用法和其他构建工具完全一致:
- 安装插件:
meteor npm install babel-plugin-transform-inline-environment-variables --save-dev
- 在项目根目录的
.babelrc文件中添加配置:
{ "plugins": [ ["transform-inline-environment-variables", { "include": ["CLIENT", "THEME"] // 这里填写你需要暴露到客户端的环境变量列表 }] ] }
- 构建时设置对应环境变量即可正常使用。
注意事项
- 不要将敏感信息(如密钥、内部接口地址)通过该方式暴露到客户端,所有注入到客户端的变量都会被打包到公开的前端代码中。
- 必须使用
meteor build的生产模式构建,才会触发死代码消除逻辑,开发模式下为了调试方便不会移除未使用的代码块。
内容的提问来源于stack exchange,提问作者Prinzhorn
相关产品推荐
相关产品推荐

