【问题标题】:How to include and use DefinePlugin in webpack config?如何在 webpack 配置中包含和使用 DefinePlugin?
【发布时间】:2019-01-18 23:34:05
【问题描述】:

您好,我正在尝试使用定义插件,因此我可以更新版本号以确保我的 JS 在发布新版本后刷新。我似乎无法让 DefinePlugin 正常工作。我在文件夹 webpack 中看到它,我正在尝试遵循文档,但我收到了找不到它的错误。这是我的配置:

const path = require('path'),
settings = require('./settings');

const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const webpack = require('webpack');


module.exports = {
  entry: {
    'scrollerbundled': [settings.themeLocation + "js/scroller.js"],
    'mapbundled': [settings.themeLocation + "js/shopmap.js"],
    'sculptor': [settings.themeLocation + "js/sculptor.js"]
  },
  output: {
    path: path.resolve(__dirname, settings.themeLocation + "js-dist"),
    filename: "[name].js"
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['@babel/preset-env']
          }
        }
      }
    ],
    plugins: [new webpack.DefinePlugin({
    PRODUCTION: JSON.stringify(true),
    VERSION: JSON.stringify('5fa3b9'),
  })]
  },
  optimization: {
    minimizer: [new UglifyJsPlugin({ 
            uglifyOptions: {
                mangle: true,
                output: {
                    comments: false
                }
            }
       })]
  },
  mode: 'production'
}

【问题讨论】:

  • 在我的例子中,我使用了'process.env.VARIABLE_NAME' 而不是普通的变量并且它起作用了。

标签: javascript npm webpack


【解决方案1】:

我有 "webpack": "^4.28.4" 并在 webpack 配置中定义

new webpack.DefinePlugin({
 PRODUCTION: JSON.stringify(true),
});

如果你控制这些变量,你就找不到它。我在条件中使用

if (PRODUCTION) {
 //do stuff
}

另一种情况是在对象中设置全局变量并与 webpack 共享。

这是一个例子

        new webpack.ProvidePlugin({
        CONFIG: path.resolve(__dirname, './CONSTS.js')
        }),
        // the path is src/CONST.JS

在 eslintrc 文件中,您可以添加该变量以避免导入错误。

    "settings": {
     "import/resolver": {
      "webpack": {
       "config": "webpack.dev.js"
      }
     }
    }

然后你可以在任何文件中使用 import {value} from 'CONFIG'

【讨论】:

  • 你在哪里设置 "settings": { "import/resolver": { "webpack": { "config": "webpack.dev.js" } } }?您能否展示您的整个配置文件,以便我可以查看在哪些部分放置插件和配置?
【解决方案2】:
{
 "parser": "babel-eslint",
 "extends": [
    "airbnb",
    "plugin:react/recommended",
    "prettier",
    "prettier/react"
 ],
 "plugins": ["react", "import", "prettier"],
 "env": {
   "browser": true
 },
 "settings": {
 "import/resolver": {
  "webpack": {
    "config": "webpack.dev.js"
   }
  }
 }
}

那是我的 eslintrc。这是为了使用在你的 webpack 配置中创建的带有 modules 别名的绝对导入。你需要安装eslint-import-resolver-webpack

【讨论】:

    【解决方案3】:

    如果您使用 laravel mix,您可以将 new webpack.DefinePlugin 代码放入您的 .webpackConfig 块的 plugins 数组中:

    webpack.mix.js:

    mix
    .webpackConfig({
        devtool: 'source-map',
        resolve: {
            alias: {
                'sass': path.resolve('resources/sass'),
            }
        },
        plugins: [
            new webpack.ProvidePlugin({
            'window.Quill': 'quill',     // <--------------------- this right here
            __VERSION__: JSON.stringify('12345')
            })
        ]
    })
    .js('resources/js/app.js', 'public/js')
    .sass('resources/sass/app.scss', 'public/css')
    .copy([
        'resources/fonts/*',
    ], 'public/fonts');
    

    通过推断,这意味着您也可以将此代码添加到常规(不是 laravel 混合)webpack 配置中的类似块中。

    【讨论】:

      【解决方案4】:

      全局安装devtools

      npm install -g @vue/devtools
      

      ...再试一次。

      如果您有任何问题,请关注官方instructions

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-01
        • 1970-01-01
        • 2016-11-21
        • 2021-11-18
        • 2019-03-29
        • 2018-10-09
        • 2017-06-02
        • 2022-01-05
        相关资源
        最近更新 更多