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
相关产品推荐
相关产品推荐

