来自Ruby on Rails,我发现很难掌握NextJS上的环境变量的概念,特别是在Vercell平台上。我遵循NextJS文档,推荐Vercell文档在他们的项目设置中设置环境变量,即使是开发环境。所以我用vercel env pull .env.local
拉了它们。但是当我运行开发服务器时,这个过程。环境变量总是未定义的。找到了很多关于这个的问题,但到目前为止还没有运气。
export function getEncodedClientIdAndSecret(): string {
const clientId = process.env.CLIENT_ID;
const clientSecret = process.env.CLIENT_SECRET;
if (!clientId || !clientSecret) {
throw new Error('Missing client ID or client secret');
}
const encodedString = Buffer.from(`${clientId}:${clientSecret}`).toString('base64');
return `Basic ${encodedString}`;
}
.env.local
file:
# Created by Vercel CLI
REDIRECT_URI=localhost:3000/api/callback
BASE_URL=localhost:3000
FIREBASE_DATABASE_URL=projectid.firebaseio.com
FIREBASE_CLIENT_EMAIL=dfsdfo@projectid.iam.gserviceaccount.com
FIREBASE_PRIVATE_KEY_B64=longenccryptedprivatekey
FIREBASE_PROJECT_ID=projectid
CLIENT_SECRET=secreiclient
CLIENT_ID=clientid
我不是JavaScript的粉丝。
过了一段时间,我又遇到了这个问题。
但是这次,文档中的NEXT_PUBLIC_
前缀工作得很顺利。我不知道为什么当我尝试那个解决方案的时候它没有。
.env
文件的工作版本:
NEXT_PUBLIC_REDIRECT_URI=<Callback URI from Spotify>
NEXT_PUBLIC_BASE_URL=<Base URL of the project>
NEXT_PUBLIC_CLIENT_ID=<Spotify app client ID>
CLIENT_SECRET=<Spotify app client secret key>
FIREBASE_PROJECT_ID=<Firebase project ID>
FIREBASE_PRIVATE_KEY_B64=<Base64-encoded string of Firebase private key>
FIREBASE_CLIENT_EMAIL=<Firebase client email>
FIREBASE_DATABASE_URL=<Firebase database URL>
WARMUP_KEY=<Secret to trigger Firebase database warmup>
这是我正在做的PR。