如何在下一步中处理不同的.env文件?

问题描述 投票:0回答:1

我想要的

我创建了一个新的Next项目,我想根据NODE_ENV变量管理应用行为。应用程序必须加载位于不同.env文件中的不同变量。 je如果我加载NODE_ENV=development,则应用程序应加载.env.development文件中的变量。在下一步中最有效,最安全的方法是什么。

我有什么

package.json

dev脚本中,我传递了环境类型:

"scripts": {
    "dev": "cross-env NODE_ENV=development next",
    "build": "next build",
    "start": "next start",
  },

next.config.js

[在下一个配置中,我根据package.json中dotenv脚本中的NODE_ENV变量,从带有dev库的正确的.env文件中加载环境变量。

const path = require('path');
const withOffline = require('next-offline');
const webpack = require('webpack');

require('dotenv').config({
  path: path.resolve(
    __dirname,
    `.env.${process.env.NODE_ENV}`,
  ),
});

module.exports = withOffline({
  webpack: (config) => {
    // Returns environment variables as an object
    const env = Object.keys(process.env).reduce((acc, curr) => {
      acc[`process.env.${curr}`] = JSON.stringify(process.env[curr]);
      return acc;
    }, {});

    // Allows you to create global constants which can be configured
    // at compile time, which in our case is our environment variables
    config.plugins.push(new webpack.DefinePlugin(env));
    return config;
  },
});

。env.development

TITLE=modo development

pages / index.js

function HomePage() {
  return <div>{process.env.TITLE}</div>
}

export default HomePage

有了这个方法...

  • 这是在Next中处理不同的.env文件的最有效,最安全的方法吗?
node.js environment-variables next.js
1个回答
0
投票

[Nextjs默认情况下支持env,而无需使用webpack.DefinePlugin,只需将其传递给envnext.config.js属性。

所以您的代码将变为:

// next.conf.js
const path = require('path');
const withOffline = require('next-offline');
const webpack = require('webpack');

require('dotenv').config({
  path: path.resolve(
    __dirname,
    `.env.${process.env.NODE_ENV}`,
  ),
});

module.exports = withOffline({
  env: process.env
});

© www.soinside.com 2019 - 2024. All rights reserved.