2015-10-17 67 views
1

我有两个应用程序,都使用webpack。每个应用程序需要不同的JavaScript模块例如,app1不使用反应,app2确实使用反应。我试图将app2中的webpack模块包含到app1中。我正在使用CommonsChunkPlugin从app1和app2s主文件中提取webpack运行时。因此,从app1开始,我有一个页面,其中包含init.js脚本,app1.js脚本,然后我通过url包含app2.js文件(即通过代理服务器http://proxy/app2/js/app2.js,因此没有跨站点问题)。如何从外部URL包含一个webpack模块?

加载了来自app2的javascript,但似乎并未看到webpack模块实际上正在加载。当它加载到app1的页面上时,找不到app2(即react)所需的模块。

有没有办法做到这一点?我基本上想要它延迟加载app2包,但webpack似乎并不想从网址获取文件(也不希望它在构建时得到它)。我注意到init.js脚本是不同的,因为每个应用程序都有它自己的入口点。这就像我需要指定一个懒惰加载的入口点或什么。请帮忙!

回答

0

我刚刚发现webpack可以在其他应用中使用output Libraries。所以,我已经改变了app2来输出一个库,然后我将它包含在app1中,它就像一个魅力。如果需要,所有必需的依赖关系也可以同时出现,或者您可以将它们指定为外部依赖关系。这里是我的WebPack配置的一个例子app2

var webpack = require('webpack'); 

module.exports.getConfig = function (type) { 

    var isDev = type === 'development'; 

    var config = { 
     entry: { 
      one: "./src/main/javascript/one.js", 
      two: "./src/main/javascript/two.js" 
     }, 
     output: { 
      path: __dirname + "/src/main/webapp/static/js", 
      filename: "[name].js", 
      library: ["MyLibrary", "[name]"], 
      libraryTarget: "umd" 
     }, 
     ... 

然后在app1,我只是包括脚本标记脚本one.js,它加载了就好了。需要注意的是,我必须从app2中删除CommonsChunkPlugin,因为运行时会获得您的库名称的前缀。因此,您需要将其全部包含在库中才能正确加载。