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

Expo SDK升级至50后EAS构建报错:'import.meta'暂不支持

问题原因与解决办法

核心原因

报错里的import.meta.env.MODE代码大概率来自第三方依赖或Expo构建流程的自动注入代码,而非你的源码。SDK升级到50后,生产构建的Babel/Metro配置发生变化,导致原本能被转译的import.meta语法在生产构建时未被正确处理:

  • Expo SDK 50升级了Metro、Babel等核心工具,生产构建的优化策略更严格,部分依赖未适配新的语法转译规则
  • 非生产构建(development、preview)保留了更多调试/转译逻辑,能正常处理import.meta,但生产构建为压缩体积关闭了相关转译
  • 本地编译时,Metro开发模式默认会转译这类语法,而EAS生产构建的配置和本地存在差异

排查与解决步骤

1. 定位来源代码

用以下命令搜索项目中所有包含import.meta.env.MODE的文件,找到对应的第三方依赖:

grep -r "import.meta.env.MODE" ./node_modules

找到依赖包后,优先查看是否有适配Expo SDK 50的新版本,直接升级依赖即可。

2. 调整Babel配置

如果无法升级依赖,修改项目根目录的babel.config.js,添加对import.meta的转译支持:

module.exports = function(api) {
  api.cache(true);
  return {
    presets: ['babel-preset-expo'],
    plugins: [
      ['babel-plugin-transform-import-meta', { module: 'commonjs' }]
    ]
  };
};

先安装对应的插件:

npm install babel-plugin-transform-import-meta --save-dev

3. 检查EAS构建配置

确认eas.json中的生产构建配置是否开启了导致转译被跳过的优化选项,比如minify: true,同时在metro.config.js中添加支持:

const { getDefaultConfig } = require('expo/metro-config');
const config = getDefaultConfig(__dirname);

// 确保Metro能处理import.meta语法
config.transformer.enableBabelRuntime = true;

module.exports = config;

4. 清除构建缓存

EAS构建可能存在缓存,导致旧配置未更新,执行以下命令清除本地和远程缓存:

eas build --clear-cache
rm -rf node_modules && npm install
npx expo prebuild --clean

内容的提问来源于stack exchange,提问作者Maximiliano Andres Friedl Schw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:03:25