webpack:多个入口点

时间:2016-10-03 12:50:51

标签: webpack

我正在查看this webpack配置文件,我不太明白如果给出了多个入口点会发生什么(如下例所示)。

是否将入口点作为依赖项搜索的起点,然后生成的依赖项的并集最终会出现在bundle中?

'use strict';

var webpack = require('webpack');

module.exports = {

    entry: [
        'webpack/hot/only-dev-server',
        './index.js'
    ],
    output: {
        path: __dirname + '/build',
        publicPath: __dirname  + "/build/",
        filename: 'bundle.js'
    },
    plugins: [
        new webpack.HotModuleReplacementPlugin(),
        new webpack.NoErrorsPlugin()
    ]


};

我看了doc,但没有解释上面配置的内容。

此外, here写道:

  

如果传递数组:启动时加载所有模块。最后   一个出口。

entry: ["./entry1", "./entry2"]

加载模块和导出模块有什么区别?

2 个答案:

答案 0 :(得分:13)

完全!!

正如您在this示例中所看到的,使用多个入口点,您可以从选择的入口点开始创建2个或更多个束。但是,您可能会在捆绑包中重复(或更多)您的依赖项代码。此配置目前无需任何优化即可执行此任务。

在链接的示例中,它使用公共块插件创建另一个包含公共条目代码的包(在其他包之前包含),对于多页webapp非常有用。

如果要添加公共块插件,只需将此代码添加到配置中:

plugins: [
    new CommonsChunkPlugin({
        filename: "commons.js",
        name: "commons"
    })
]

this页面上可以找到更多示例(如多个公共块)

关于输入参数:

  • 如果你传递一个字符串(entry: 'entry.js'),webpack会从它开始创建一个包。
  • 如果传递数组(entry: ['entry1.js', 'entry2.js']),它会创建一个从entry2开始的包,名为entry2,并加载(和解析)entry1。
  • 如果你传递一个对象(entry: {entry1: 'entry1.js', entry2: 'entry2.js'}),它会从条目开始创建两个不同的包,并命名为对象的入口密钥。
  • 如果你使用像这样的entry: {entry1: 'entry1.js', entry2: ['entry2_1.js', 'entry2_2.js'] }这样的混合模式,webpack会从entry1.js开始创建一个名为entry1的包,而另一个名为entry2的包来自entry2_2.js,但加载firt entry2_1.js。

请注意,传递一个条目数组,只导出last,其他js只被加载。

答案 1 :(得分:0)

嗯,它确实处理每个入口点。它将包含它需要的所有依赖项,这意味着如果两个入口点都使用jquery。两者都会把它变成自己的捆绑。但如前所述,您可以使用commonchunks插件。它将在某一时刻(因为你可以决定所需的数量)将多个使用的模块移动到某个公共模块

相关问题