在 NextJs 中检测生产或开发环境的最简单方法?

aga*_*eja 4 next.js

我想在Nextjs中基本检测运行环境是dev还是production。有没有直接的方法可以做到这一点?

if(env == "dev"){
  // do something
}
else if (env == "prod"){
 // do something
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ker 13

基本上是相同的解决方案,但我不想用丑陋的条件污染我的代码。所以我把它分解成一个简单的模块:

export const inDevEnvironment = !!process && process.env.NODE_ENV === 'development';
Run Code Online (Sandbox Code Playgroud)

现在我可以编写服务器代码

import {inDevEnvironment} from '../lib/DevEnv';
...
   <div>
     {inDevEnvironment || /* ... production only code ... */}
   </div>
...
   <div>
     {inDevEnvironment && /* ... development only code ... */}
   </div>
...
Run Code Online (Sandbox Code Playgroud)

  • 看起来比条件更糟糕 (11认同)
  • 较小版本:export const isDevEnvironment = process &amp;&amp; process.env.NODE_ENV === "development"; (7认同)

小智 5

是的,如果您env通过process.env.NODE_ENV.

当您通过next dev此方式运行您的应用程序时,将是development 在构建您的应用程序并运行时,next start将此变量设置为production

因此,这应该有效:

const env = process.env.NODE_ENV
if(env == "development"){
  // do something
}
else if (env == "production"){
 // do something
}
Run Code Online (Sandbox Code Playgroud)

  • @choz Next.js 10 神奇地设置了服务器和浏览器的“process.env.NODE_ENV”。它忽略实际的“NODE_ENV”环境变量,并根据“npm dev”与“npm start”决定开发与产品。这只是一个神奇的情况,一般来说只有“NEXT_PUBLIC_”变量可用,正如你所说。 (6认同)
  • 我发现这是不正确的,因为如果您不以“NEXT_PUBLIC_”开头命名环境变量,客户端将无法读取。或者我在这里可能是错的。 (2认同)