webpackJsonp未定义:webpack-dev-server和CommonsChunkPlugin

8
这是我的webpack.config.js文件:
const webpack = require('webpack');
const path = require('path');

module.exports = {
  cache: true,
  devtool: 'source-map',
  entry: {
    app : [
      './src/index.js'
    ],
    vendor: ['lodash']
  },
  output: {
    filename: 'bundle.js',
    path: path.join(__dirname, 'dist'),
    publicPath: '/dist/',
    pathinfo: true
  },
  module: {
    loaders: [
      { test: /\.js$/, exclude: /node_modules/, loaders: ['babel'] },
      { test: /\.scss/, exclude: /node_modules/, loaders: ['style', 'css', 'sass'] }
    ]
  },
  plugins: [
    new webpack.NoErrorsPlugin(),
    new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.bundle.js', Infinity)
  ]
};

这是我运行webpack-dev-server的脚本:

const webpack =require('webpack');
const WebpackDevServer = require('webpack-dev-server');
const webpackConfig = require('../webpack.config');
const _  = require('lodash');

const webpackDevConfig = _.cloneDeep(webpackConfig);
const devPort = 3000;

webpackDevConfig.entry.app.unshift('webpack/hot/dev-server');
webpackDevConfig.entry.app.unshift('webpack-dev-server/client?http://localhost:' + devPort + '/');
webpackDevConfig.plugins.push(new webpack.HotModuleReplacementPlugin());

new WebpackDevServer(webpack(webpackDevConfig), {
  publicPath: webpackConfig.output.publicPath,
  hot: true,
  stats: {
    colors: true,
    chunks: false
  }
}).listen(devPort, 'localhost');
webpack 命令输出良好 (bundle.js 和 vendor.bundle.js),但是开发服务器失败并显示 webpackJsonp 未定义 (尽管其内存编译成功)。
当从 webpack.config.js 中移除 CommonsChunkPlugin,一切正常运行。
...
entry: [
    './src/index.js'
  ],
...
plugins: [
    new webpack.NoErrorsPlugin()
  ]

有什么想法吗?


你找到解决方案了吗? - JeremyP
3个回答

15

在你的index.html文件中,只需在调用bundle.js之前调用vendor.bundle.js

<script src="assets/js/vendor.bundle.js"></script>
<script src="assets/js/bundle.js"></script>

就这些了,现在应该可以工作了。 更多信息。


1
重命名供应商入口点为 'vendor.js': ['lodash']

不起作用。我已经在看到 https://github.com/webpack/webpack/issues/368 时尝试过了。我还尝试将一个对象传递给 commonschunkplugin 插件(而不是3个参数...),但它也没有起作用... :( - Amit Kaspi

0

仅为扩展一下概念,由于运行时包含在供应商中(所有定义变量和方法的内容都是由于webpacking而在客户端加载时间运行),因此供应商必须首先到达。

如果使用清单文件(由于分块等原因),则必须首先放置它,因为模块构建的方式会使其包含运行时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接