先说明官方的话 .env 类的文件应添加到你的.gitignore 文件,以避免将 secret 后端的密钥推送到你的仓库。
除了任何进程环境变量之外,如果你的项目根目录中有一个文件,它将在 dev、build 和 generate 时自动加载
.env。在那里设置的任何环境变量都可以在您的文件和模块中访问。
意思是自动加载env环境,无论build 还是dev环境
.env文件的作用- 在项目根目录下创建
.env文件,用于存储环境变量(如 API 密钥、后端地址等)。 - 这些变量会在以下阶段自动加载:
- 开发时(
dev) - 构建时(
build) - 生成静态页面时(
generate)
- 开发时(
- 在项目根目录下创建
- 环境变量的访问范围
- 加载后的变量可以在以下位置访问:
nuxt.config.js配置文件- 项目中的其他模块(Module)
- 页面组件(如
.vue文件)
- 加载后的变量可以在以下位置访问:
示例:.env 文件内容
一般以NUXT_开头可以直接替换nuxt。conifg.ts中文件
API_BASE_URL=https://api.example.com
APP_TITLE=My Nuxt App
如何在 nuxt.config.js 中使用这些变量
在 nuxt.config.js 中,可以通过 process.env 直接访问 .env 文件定义的变量:
export default {
// 配置应用标题(从 .env 中读取)
head: {
title: process.env.APP_TITLE || 'Default Title', },
// 配置 axios 模块(从 .env 中读取 API 地址)
modules: ['@nuxtjs/axios'],
axios: { baseURL: process.env.API_BASE_URL, },
// 其他配置...}
注意事项
-
敏感变量安全
- 不要将
.env文件提交到版本控制(需在.gitignore中添加.env)。 - 生产环境的环境变量应通过服务器配置(如 Docker、PM2、CI/CD)注入,而非依赖本地文件。
- 不要将
-
变量命名规范
- 通常使用全大写字母和下划线(如
API_KEY),以区分普通变量。
- 通常使用全大写字母和下划线(如
-
覆盖优先级
- 如果系统环境变量(如
export API_BASE_URL=xxx)和.env文件冲突,系统环境变量优先级更高。
- 如果系统环境变量(如
常见问题
- 问题:修改
.env后不生效?- 重启 Nuxt 开发服务器(
npm run dev),因为环境变量仅在启动时加载。
- 重启 Nuxt 开发服务器(
- 问题:变量在浏览器端暴露?
- 以
NUXT_ENV_开头的变量或publicRuntimeConfig中的变量会被编译到客户端代码,避免在此存储敏感信息。
- 以
总结
.env文件 是 Nuxt.js 管理环境变量的便捷方式,自动在开发/构建阶段加载。nuxt.config.js中通过process.env.VAR_NAME直接访问。- 生产环境建议通过服务器注入变量,而非依赖文件。
在 Nuxt 中区分不同开发环境的环境变量,推荐的做法如下:
-
使用 .env 文件(开发/构建阶段)
Nuxt CLI 在开发(nuxi dev)、构建(nuxi build)和生成(nuxi generate)时会自动加载项目根目录下的.env文件。你可以为不同环境准备不同的.env文件(如.env.local、.env.production),并通过--dotenv参数指定加载哪个文件。例如:npx nuxi dev --dotenv .env.local npx nuxi build --dotenv .env.production.env文件内容示例:NUXT_PUBLIC_API_BASE=https://api.dev.example.com NUXT_API_SECRET=dev_secret -
在 nuxt.config.ts 中配置 runtimeConfig
在nuxt.config.ts里通过runtimeConfig统一声明环境变量,并用NUXT_前缀的环境变量进行覆盖。示例:export default defineNuxtConfig({ runtimeConfig: { apiSecret: '', // 可被 NUXT_API_SECRET 覆盖 public: { apiBase: '', // 可被 NUXT_PUBLIC_API_BASE 覆盖 } } })这样你可以在代码中通过
useRuntimeConfig()获取变量:const config = useRuntimeConfig() console.log(config.public.apiBase) -
生产环境变量的设置
注意:生产环境下,Nuxt 不会读取.env文件。你需要通过部署平台(如 Vercel、Netlify、云服务器等)提供的方式设置环境变量,或在启动服务时通过命令行传递:NUXT_PUBLIC_API_BASE=https://api.prod.example.com node .output/server/index.mjs -
根据环境动态配置
你也可以在nuxt.config.ts里根据process.env.NODE_ENV或 Nuxt 的环境覆盖功能,动态设置不同环境的配置。例如:export default defineNuxtConfig({ $production: { runtimeConfig: { public: { apiBase: 'https://api.prod.example.com' } } }, $development: { runtimeConfig: { public: { apiBase: 'https://api.dev.example.com' } } } })通过
nuxi build --envName production或--envName development指定环境构建Nuxt Configuration。
总结:
- 开发/构建时用
.env文件,生产环境用平台环境变量。 - 变量名需用
NUXT_前缀(如NUXT_PUBLIC_),并在runtimeConfig中声明。 - 通过
useRuntimeConfig()获取变量。 - 可用 Nuxt 的环境覆盖功能做更细致的区分。