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

Svelte项目出现process未定义错误,如何读取.env变量?

解决Svelte应用中process.env未定义的问题

问题原因

浏览器环境不存在Node.js的process对象,你需要通过Rollup插件将环境变量注入编译后的代码,当前配置未启用相关注入插件,且.env文件格式存在错误。

修复步骤

1. 修正.env文件格式

删除变量值末尾的分号(分号会被识别为值的一部分):

DEV_MODE=true

2. 配置Rollup注入环境变量

你已安装rollup-plugin-inject-process-env插件,只需在rollup.config.js中引入并启用它,同时加载.env文件中的变量:

import svelte from 'rollup-plugin-svelte';
import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
import livereload from 'rollup-plugin-livereload';
import { terser } from 'rollup-plugin-terser';
import css from 'rollup-plugin-css-only';
// 新增:导入dotenv和环境变量注入插件
import dotenv from 'dotenv';
import injectProcessEnv from 'rollup-plugin-inject-process-env';

// 加载.env文件中的变量
dotenv.config();

const production = !process.env.ROLLUP_WATCH;

// serve函数保持不变
function serve() {
    let server;

    function toExit() {
        if (server) server.kill(0);
    }

    return {
        writeBundle() {
            if (server) return;
            server = require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], {
                stdio: ['ignore', 'inherit', 'inherit'],
                shell: true
            });

            process.on('SIGTERM', toExit);
            process.on('exit', toExit);
        }
    };
}

export default {
    input: 'src/main.js',
    output: {
        sourcemap: true,
        format: 'iife',
        name: 'app',
        file: 'public/build/bundle.js'
    },
    plugins: [
        svelte({
            compilerOptions: {
                dev: !production
            }
        }),
        css({ output: 'bundle.css' }),
        resolve({
            browser: true,
            dedupe: ['svelte']
        }),
        commonjs(),
        // 新增:注入指定环境变量到代码中
        injectProcessEnv({
            DEV_MODE: process.env.DEV_MODE,
            // 可添加更多需要注入的环境变量
        }),
        !production && serve(),
        !production && livereload('public'),
        production && terser()
    ],
    watch: {
        clearScreen: false
    }
};

3. 验证使用

在Svelte组件或JS文件中正常调用环境变量即可:

let dev = process.env.DEV_MODE;
console.log(dev); // 输出true

备选方案(使用rollup-plugin-replace)

如果你更倾向于用已安装的rollup-plugin-replace,可替换上述注入插件配置为:

// 导入replace插件
import replace from 'rollup-plugin-replace';

// 在plugins数组中添加
replace({
    'process.env.DEV_MODE': JSON.stringify(process.env.DEV_MODE),
    preventAssignment: true
}),

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:30:46