2016-10-03 59 views
3

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

会这样的入口点的依赖搜索作为起点,然后将得到的依赖关系的联合是什么在包结束了?

'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"] 

是什么加载模块和出口之间的区别?

回答

9

确切地说!!

正如你可以在this例如见,具有多个入口点创建2分或更多束选自入口点开始。然而你可能会在你的包中重复(或更多)你的依赖代码。目前,您的配置无需任何优化即可执行此任务。

在链接的例子,它使用与创建条目的公共代码另一束所述公共块插件(别人之前包括),对于多页的web应用是有用的。

如果你想添加公共块插件,你可以简单地将此代码添加到您的配置:

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

this页面可以找到更多的例子(如多发性公共块)

关于入境参数:

  • 如果你传递一个字符串(entry: 'entry.js')的WebPack从它创建开始一个包。
  • 如果您传递一个数组(entry: ['entry1.js', 'entry2.js']),它会创建一个从entry2开始,名为entry2,并且load(和parse)entry1的bundle。
  • 如果您传递一个对象(entry: {entry1: 'entry1.js', entry2: 'entry2.js'}),它将从条目开始创建两个不同的包,并将其命名为对象的条目关键字。
  • 如果使用混合模式这样entry: {entry1: 'entry1.js', entry2: ['entry2_1.js', 'entry2_2.js'] },的WebPack创建一个名为取值范从entry1.js开始捆绑,并从entry2_2.js另一束名为ENTRY2 strating,但加载firt entry2_1.js。

请注意,传递一个entry数组,只导出最后一个,其他js只加载。

+0

非常感谢! 'loading'和'exporting'有什么区别?在“注意,传递一个入口数组,只有最后一个被导出,其他js只被加载。” ? – jhegedus

+1

导出意味着这些JavaScript组合包在加载时只被解析。在这个问题中解释(以类似的方式)http://stackoverflow.com/questions/32511853/webpack-export-classes-from-multiple-entry-files – TeoMatthew

0

那么,它确实处理每个入口点分开。它将包含它所需的所有依赖项,这意味着如果两个入口点都使用jquery。两者都会将其纳入自己的捆绑包中。但正如之前所说,你可以使用commonchunks插件。它会在某个时刻(因为您可以决定需要的数量)将多个使用的模块移动到某个通用模块