【问题标题】:webpack keeps bundling react with each of the multiple entry pointswebpack 不断捆绑对多个入口点中的每一个做出反应
【发布时间】:2015-04-18 20:21:25
【问题描述】:

我正在学习 webpack,但我无法将每个入口点与 React.js 源代码结合起来。我一直在关注this writeup 的代码,但无济于事。这是我的 webpack.config.js:

var webpack = require('webpack');
var config = require('./config');

module.exports = {
    entry: {
        CommentThreadApp: ['./client/CommentThreadApp.jsx'],
        PostsApp: ['./client/PostsApp.jsx'],
        SubpyFiller: ['./client/SubpyFiller.jsx'],
        vendors: ['react']
    },
    output: {
        path: './build',
        publicPath: 'http://localhost:9090/assets/',
        filename: '[name].bundle.js'
    },
    plugin: [
        new webpack.optimize.CommonsChunkPlugin('vendors', 'vendors.bundle.js')
    ],
    module: {
        loaders: [
            { test: /\.jsx$/, loader: 'jsx-loader' }
        ]
    },
    devServer: {
        port: config.webpackServerPort
    }
};

这是webpack 命令的输出:

Hash: 289469a6ec0215c9fad9
Version: webpack 1.8.5
Time: 1438ms
                     Asset    Size  Chunks             Chunk Names
     SubpyFiller.bundle.js  635 kB       0  [emitted]  SubpyFiller
        PostsApp.bundle.js  646 kB       1  [emitted]  PostsApp
CommentThreadApp.bundle.js  658 kB       2  [emitted]  CommentThreadApp
         vendors.bundle.js  633 kB       3  [emitted]  vendors
   [0] multi CommentThreadApp 28 bytes {2} [built]
   [0] multi PostsApp 28 bytes {1} [built]
   [0] multi vendors 28 bytes {3} [built]
   [0] multi SubpyFiller 28 bytes {0} [built]
   [5] ./config.js 214 bytes {1} [built]
   [6] ./client/helper-functions.js 1.81 kB {1} {2} [built]
    + 164 hidden modules

这些文件通常在 20kb 左右,但将其与 React.js 源代码结合起来,每个文件都会变成 620kb。理想情况下,我希望 vendors.bundle.js 与 React 和其他模块的大小为 600kb+,并且每个其他捆绑包大约为 30kb,仅包含其源代码和一些杂散的需求。我不确定我的 webpack 配置文件做错了什么。我的理想输出:

     SubpyFiller.bundle.js  28 kB       0  [emitted]  SubpyFiller
        PostsApp.bundle.js  28 kB       1  [emitted]  PostsApp
CommentThreadApp.bundle.js  28 kB       2  [emitted]  CommentThreadApp
         vendors.bundle.js  633 kB      3  [emitted]  vendors

【问题讨论】:

  • 出于好奇,如果您将应用入口点设为字符串(而不是数组),您是否也会遇到同样的问题? (vendors 应该还是一个数组)
  • 不,从入口点删除了方括号,没有任何改变,尽管它没有给我一个错误。
  • 这很奇怪......我们肯定会使用此功能来拆分我们的捆绑包。我愿意与您讨论我们的 webpack 配置,但它有点大而且有点复杂,如果您愿意,请随时 contact me,我们可以聊天。
  • 我也有这个问题。你有什么解决办法吗?

标签: javascript reactjs webpack


【解决方案1】:

我也遇到了同样的问题。据我所知,最好的方法是从 CDN 加载 react.js。从 CDN 加载文件有其自身的优势(减少服务器负载、缓存等),并在 webpack.config.js 中保持 react 作为外部 您可以做的示例更改是

在 HTML 文件中将它包含在 webpack 捆绑文件之前

    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.1/react-with-addons.min.js"></script>

在 webpack.config.js 文件中,添加另一个 key 来导出对象

module.exports = {
externals: {
        'react': 'React'
    }
}

【讨论】:

  • 这有一个缺点,即使在开发设置中,您也将始终运行非调试版本,因为您在那里对缩小版本进行了硬编码。有许多错误会在调试模式下显示,但在生产模式下会被静音...
  • @srcspider,使用 react 的备用 url for dev。环境搭建。 webpack bundle 也一样。
猜你喜欢
  • 2018-05-21
  • 2018-11-22
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-31
相关资源
最近更新 更多