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

GitLab CI中dotenv使用问题:Gatsby构建环境变量无法读取排查

GitLab CI中Gatsby构建SITE_URL变量读取失败的排查方案

问题背景

在GitLab CI执行Gatsby构建时,已通过echo生成内容正确的.env.production文件,但Gatsby的gatsby-config.ts读取process.env.SITE_URL时失败,报错:

error The site's gatsby-config failed validation:
"siteMetadata.siteUrl" must be a valid uri

说明process.env中未正确加载该变量,以下是具体排查步骤:

1. 确认NODE_ENV环境变量是否为production

你的dotenv加载逻辑依赖process.env.NODE_ENV来指定.env文件路径:path: .env.${process.env.NODE_ENV},但GitLab CI默认不会自动设置NODE_ENV为production。需要在构建命令中明确指定:

NODE_ENV=production ./node_modules/.bin/gatsby build --prefix-paths

若NODE_ENV不是production,dotenv会尝试加载错误的.env文件(如.env.development),导致无法读取目标变量。

2. 验证dotenv的加载时机与结果

在gatsby-config.ts中添加日志,确认dotenv的加载状态:

import type { GatsbyConfig } from "gatsby";

// 新增日志:打印当前环境与dotenv加载结果
console.log("当前NODE_ENV:", process.env.NODE_ENV);
const result = require("dotenv").config({
  path: `.env.${process.env.NODE_ENV}`,
});

if (result.error) {
  console.error("dotenv加载错误:", result.error);
} else {
  console.log("dotenv加载的变量:", result.parsed);
}

const config: GatsbyConfig = {
  siteMetadata: {
    siteUrl: process.env.SITE_URL,
    // ...其他配置
  },
  // ...其他配置
};

export default config;

查看GitLab CI日志中的相关输出,确认NODE_ENV值和加载的变量列表是否符合预期。

3. 检查.env文件的路径正确性

GitLab CI的工作目录可能与本地不同,需确保.env.production存在于项目根目录。可在构建前添加命令验证:

- pwd
- ls -la .env.*

确认文件路径和存在性无误。

4. 绕过.env文件,直接注入环境变量

跳过.env文件,直接在CI脚本中将SITE_URL注入到process.env:

- SITE_URL=$SITE_URL NODE_ENV=production ./node_modules/.bin/gatsby build --prefix-paths

若此方式能正常构建,说明问题出在dotenv加载环节,而非变量本身。

5. 校验SITE_URL的格式与类型

Gatsby的GatsbyConfig类型对siteUrl格式要求严格,若变量存在但格式不符合URI标准(如末尾多空格、含非法字符),也会触发报错。在gatsby-config.ts中添加日志验证:

console.log("SITE_URL的值:", process.env.SITE_URL);
console.log("SITE_URL的类型:", typeof process.env.SITE_URL);

确认变量为有效字符串且格式合规。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:38:17