dotenv无法读取.env文件求助(Playwright项目环境)
解决Playwright项目中dotenv无法读取.env文件的问题
问题描述
Playwright项目中,dotenv无法读取根目录下的.env文件。该文件确实存在,但无论配置相对路径还是绝对路径都无法识别,却能读取文件夹内其他文件。已尝试dotenv.config({path:'relative path'})和dotenv.config({path:'absolute path'})两种方式,通过npx playwright test命令运行项目。
项目目录结构
root: modules playwright-report pupputeer test-results tests .env example.spec.ts login.test.ts tests-examples .gitignore package-lock.json package.json playwright.config.ts
相关代码
login.test.ts
import dotenv from 'dotenv'; dotenv.config({ path: './tests/.env' }); import { firefox, test } from "@playwright/test"; test("Login test demo", async () => { const browser = await firefox.launch(); const context = await browser.newContext(); const page = await context.newPage(); console.log(process.env); await page.goto("https://ecommerce-playground.lambdatest.io/"); await page.hover("//a[@data-toggle='dropdown']//span[contains(.,'My account')]"); await page.click("text=Login"); // await page.fill("input[name='email']", ); });
playwright.config.ts
import type { PlaywrightTestConfig } from "@playwright/test"; const config: PlaywrightTestConfig = { use: { headless: false }, testMatch: ["tests/login.test.ts"] } export default config;
package.json
{ "type": "commonjs", "name": "scrape", "version": "1.0.0", "main": "index.js", "scripts": { "start": "ts-node tests-examples/demo-todo-app.spec.ts" }, "keywords": [], "author": "", "license": "ISC", "description": "", "devDependencies": { "@playwright/test": "^1.46.1", "@types/node": "^22.5.0" }, "dependencies": { "dotenv": "^16.4.5", "ts-node": "^10.9.2" } }
解决方案
1. 修正.env路径配置
你的代码中指定的路径./tests/.env与实际目录不符,.env文件在项目根目录而非tests文件夹下。修改login.test.ts中的路径:
// 相对路径方式 dotenv.config({ path: './.env' }); // 更可靠的绝对路径方式(推荐) import dotenv from 'dotenv'; import path from 'path'; dotenv.config({ path: path.resolve(__dirname, '../.env') });
2. 排查文件本身问题
- 确认.env文件没有被误命名(例如
.env.txt或.env.old),确保文件名就是.env - 检查文件权限:在Linux/macOS系统中执行
chmod 644 .env赋予可读权限
3. 全局加载dotenv(推荐)
在playwright.config.ts中提前加载.env,确保所有测试文件都能获取到环境变量,避免每个测试文件重复配置:
import type { PlaywrightTestConfig } from "@playwright/test"; import dotenv from 'dotenv'; import path from 'path'; // 加载根目录下的.env文件 dotenv.config({ path: path.resolve(__dirname, '.env') }); const config: PlaywrightTestConfig = { use: { headless: false }, testMatch: ["tests/login.test.ts"] } export default config;
4. 验证环境变量加载情况
不要直接打印整个process.env,而是打印具体的环境变量名,方便确认是否加载成功:
// 替换成你.env中实际的变量名 console.log('测试环境变量:', process.env.YOUR_VARIABLE_NAME);
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

