如何在 Webpack 5 中访问 process.env.VAR?

问题描述

我以前从未使用过 Webpack,我正在开发一个只有普通 JS 和 HTML 的项目。我在访问我在 .env 中设置的值时遇到问题。这是我的配置。

const path = require("path");
const dotenv = require('dotenv');

var webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const Dotenv = require('dotenv-webpack');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

module.exports = () => {

  env = dotenv.config().parsed;
  
  const envKeys = Object.keys(env).reduce((prev,next) => {
    prev[`process.env.${next}`] = JSON.stringify(env[next]);
    return prev;
  },{});
  
  return {
    entry: {
      main: './src/index.js'
    },output: {
      path: path.join(__dirname,'../build'),filename: '[name].bundle.js'  
    },mode: 'development',devServer: {
      contentBase: "./src/",publicPath: "./src/",compress: true,port: 9000,overlay: true,disableHostCheck: true
    },devtool: 'inline-source-map',resolve: {
      alias: {
          process: "process/browser"
      }},module: {
      rules: [
        {
          test: /\.js$/,exclude: /node_modules/,use: {
            loader: 'babel-loader'
          }
        },{
          test: /\.css$/,use: [
            'style-loader','css-loader'
          ]
        },{
          test: /\.(png|svg|jpe?g|gif)$/,use: [
            {
              loader: 'file-loader',options: {
                name: '[name].[ext]',outputPath: 'assets/'
              }
            }
          ]
        },{
          test: /\.html$/,use: {
            loader: 'html-loader',options: {
              //attributes: ['img:src',':data-src'],minimize: true
            }
          }
        }
      ]
    },plugins: [
      new webpack.ProvidePlugin({
        process: 'process/browser',}),new Dotenv(),new webpack.DefinePlugin(envKeys),new HtmlWebpackPlugin({
        template: './src/index.html',filename: 'index.html'
      }),]
  }
};

如您所见,我正在使用 dotEnv、definePlugin,甚至 dotEnv-webpack 插件。不幸的是,这些解决方案似乎都不允许我访问 process.env.originURL。

originURL=https://localhost:3000

我没有在我的 javascript 文件 index.js 中导入或要求任何内容。我假设这应该可行,但控制台告诉我进程未定义。

console.log(process.env.originURL);

如何在我的 index.js 中访问 process.env.originURL?

解决方法

它应该可以工作。也许你可以试试这个版本:

 new Dotenv({ systemvars: true })

如果它仍然不起作用,请显示您的 package.json 以及您的 .env 文件(当然是随机值)。 .env 是您应用的根目录吗?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...