【问题标题】:variables I defined in webpack.DefinePlugin is undefined我在 webpack.DefinePlugin 中定义的变量未定义
【发布时间】: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}

标签: javascript reactjs webpack ecmascript-6 ecmascript-5


【解决方案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 语义。

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

    【讨论】:

      猜你喜欢
      • 2015-07-10
      • 2011-01-29
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 2018-07-13
      相关资源
      最近更新 更多