我在 webpack.DefinePlugin 中定义的变量未定义

Posted

技术标签:

【中文标题】我在 webpack.DefinePlugin 中定义的变量未定义【英文标题】:variables I defined in webpack.DefinePlugin is undefined 【发布时间】:2020-01-23 00:20:44 【问题描述】:

webpack.config.js

const path = require('path')
htmlWebpackPlugin = require('html-webpack-plugin')

module.exports = 
  entry: './src/index.js',
  output: 
    path: path.join(__dirname, 'dist'),
    filename: 'index_bundle.js',
  ,
  module: 
    rules: [
      
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: 
          loader: 'babel-loader',
          options: 
            presets: ["@babel/preset-env", "@babel/preset-react"],
            plugins: ["@babel/plugin-proposal-class-properties"]
          
        
      ,
      
        test:/\.css$/,
        use:['style-loader','css-loader']
      
    ]
  ,
  plugins: [
    new webpack.DefinePlugin(
      APIHOST: JSON.stringify('test'),
      BLOCKCHAINHOST: JSON.stringify('test')
    ),
    new HtmlWebpackPlugin(
      template: './src/template.html'
    ),
  ]

我定义了 2 个变量 APIHOST 和 BLOCKCHAINHOST,并尝试在 reactjs App.js 中进行控制台记录

componentDidMount() 
    console.log(APIHOST)

我得到的错误是 APIHOST 未定义。我不确定在这里做什么,我尝试为 webpack.defineplugin 添加单引号,所以它看起来像 'APIHOST': JSON.stringify('test') 但它仍然给我同样的错误。

【问题讨论】:

尝试要求 webpack:const webpack = require('webpack') 如果app 编译并给出undefined 我认为webpack 是必需的。我想看到的是控制台的webpack 输出。或者可能是Codesandbox,我可以在其中使用尽可能少的代码。 @RutherfordWonkington 你是对的,我怎么会错过这个 我终于意识到这是一个编译错误或警告。如果你的 webpack 配置中没有 eslint-loader,你应该试试这个:new webpack.optimize.UglifyJsPlugin( minimize : true, compress : warnings : false ),如果你的项目中有 eslint,尝试在你的 .eslintrc.json 中添加 globals: "APIHOST":true 【参考方案1】:

你可以这样做

plugins: [
    new webpack.DefinePlugin(
        'process.env': 
            'NODE_ENV': JSON.stringify('development')
        
    )
],

然后在你的代码中

process.env.NODE_ENV

我使用的版本是

"webpack": "^4.29.6"

【讨论】:

【参考方案2】:

看起来这是一个已知问题:

https://github.com/webpack/webpack/issues/1977

DefinePlugin 在 React 组件中不起作用

稍后在 Webpack 3 中修复:

这是固定的。从 webpack 3 开始,解析器现在完全理解 ES6 语义。

你用的是什么版本?升级有意义吗?

【讨论】:

以上是关于我在 webpack.DefinePlugin 中定义的变量未定义的主要内容,如果未能解决你的问题,请参考以下文章

webpack.DefinePlugin

即使在 webpack.DefinePlugin 中设置了环境变量,也没有在电子中定义

使用来自 WebPack.DefinePlugin 的全局注入变量进行 NodeJS Mocha 单元测试

什么是用于 create-react-app 的 webpack.DefinePlugin 的良好替代品?

webpack

在webpack中区分环境变量