Svelte使用@rollup/plugin-replace配置环境变量__myapp未定义问题问询
问题原因与修复方案
报错根因
- 你参考的教程使用的是
@rollup/plugin-replacev4.0以下的旧版本,v4.0+版本做了不兼容更新:不再支持直接在插件配置顶层写要替换的键值对,必须统一放到values配置项中,所以你第一种配置里的__myapp替换规则根本没有生效。 - 新版本插件默认开启了
preventAssignment: true配置,会拦截对赋值语句左侧标识符的替换,也会影响部分嵌套对象引用场景的替换逻辑。 - 第一种配置没有提前执行
config()加载dotenv,虽然单次调用config().parsed也能获取配置,但重复调用会产生不必要的解析开销。
修正方法
修改rollup配置
import {config} from 'dotenv'; import replace from '@rollup/plugin-replace'; // 提前加载.env内容到process.env config() plugins: [ // 环境变量配置 replace({ // 所有替换规则统一放到values字段 values: { __myapp: JSON.stringify({ env: { isProd: production, ...config().parsed } }), }, // 关闭赋值拦截开关 preventAssignment: false }), // 其他原有插件(如svelte、commonjs等)保持不变 ]
注意:replace插件必须放在plugins数组的最前位,保证在其他插件编译代码前完成变量替换,避免引用失效。
代码调用规范
直接在业务代码中引用即可,不要给__myapp加引号:
const API_ID = __myapp.env.API_ID
内容的提问来源于stack exchange,提问作者user3873617
相关产品推荐
相关产品推荐

