未捕获的ReferenceError:未定义require - Webpack2

时间:2016-10-18 19:00:53

标签: javascript webpack webpack-dev-server html-webpack-plugin webpack-2

我正在更新应用以使用webpack 1中的webpack 2,并且常规版本工作正常。当使用devServer并且只需要生成其中一个块时(这是一个电子应用程序,因此我有主要和渲染器块 - 两者都包含在常规构建中,并且dev服务器只包含渲染器)包括块)

所有东西都在webpack 1上工作,但由于某种原因,运行时没有被包含在我的块中?我试过重新订购它们但无济于事。

const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
const path = require('path');

module.exports = {
  context: __dirname,
  entry: {
    main: './main.js',
    renderer: './app/index.jsx'
  },
  output: {
      path: path.resolve(__dirname, './dist'),
      filename: "[name].js"
  },
  node: {
    __dirname: false,
    __filename: false
  },
  devtool: 'cheap-eval-source-map',
  target: 'electron',
  module: {
    loaders: [
      {
        test: /(\.js$|\.jsx$)/,
        exclude: /(node_modules|dist)/,
        loader: 'babel'
      },
      { test: /\.scss$/, loader: "style!css?modules!sass" },
      { test: /\.png$/, loader: "url?limit=100000" },
      { test: /\.jpg$/, loader: "file" }
    ]
  },
  resolve: {
    extensions: ['.js', '.jsx', '.scss'],
    modules: [path.resolve('./app'), 'node_modules']
  },
  plugins: [
  new HtmlWebpackPlugin({
    template: './app/index.html',
    chunks: ['renderer'],
    inject: 'body',
    hash: 'true'
  }),
  new webpack.DefinePlugin({
      'process.env': {
        'NODE_ENV': '"dev"'
      }
    })
  ],
  devServer: {
    contentBase: __dirname
  },
  externals: {
    'cheerio': 'window',
    'react/addons': true,
    'react/lib/ExecutionEnvironment': true,
    'react/lib/ReactContext': true
  }
};

似乎没有正确包含其中一个块:

/***/ },
/* 26 */
/***/ function(module, exports) {

module.exports = require("url");

为什么会这样?

1 个答案:

答案 0 :(得分:0)

所以似乎问题在于我将目标设置为electron但是为网络构建。这似乎在webpack 1中有效,但在更新到webpack 2之后,它不再包含两个bundle中的运行时。

我采用的解决方案是有两个配置 - 一个用于电子(我的主要构建),一个用于web(在webpack配置中指定目标)