0

我有多个入口点的应用程序,捆绑webpack 1.13.2。我也使用ES2015模块和bab-es-2015预设。Webpack。是否有可能使依赖于入口点的导入?

entry: { 
     entry1: "app/somechunk/entry1.js", 
     entry2: "app/somechunk2/entry2.js" 
} 

而且我希望对特定模块进行条件导入。导入应取决于入口点。类似这样的:

if(entry1){ 
    import locale from 'app/somechunk/localeDictionary1.js' 
} else { 
    import locale from 'app/somechunk2/localeDictionary2.js' 
} 

我该如何实现它?

+0

也许我不明白你的问题,但入境文件已经被隔离,毕竟他们是单独的文件。在每个单独的条目中,只需导入所需的特定文件,就不需要if条件。 –

+0

@MarcGreenstock。我已经说了translator.js和多个本地化字典。我需要每个入口点的translator.js。我想根据入口点有条件地导入本地化词典。 –

+0

翻译器没有字典也没用,所以我可以在每一个我想用翻译器的文件中用我的翻译器导入字典。 (每个模块2个进口)。有很多模块,这将是痛苦的。 –

回答

2

嗯,这是一个经常出现的问题。您不能在JavaScript中进行条件导入,依赖项是模块的静态属性。您有两种基本选择:使用dependency inversion

使用通用模块,并为它提供一个配置功能

面向对象的解决方案。例如:

// locale.js 
export var dictionary = {}; 
export function setDictionary(dict) { 
    dictionary = dict; 
} 

// locale-en.js 
import { setDictionary } from "./locale"; 
setDictionary({ yes: "yes" }); 

// locale-hu.js 
import { setDictionary } from "./locale"; 
setDictionary({ yes: "igen" }); 

// entries/entry-hu.js 
import "../locales/locale-hu"; 
import "../application"; 

// entries/entry-en.js 
import "../locales/locale-en"; 
import "../application"; 

// application.js 
import { dictionary } from "./locales/locale"; 
console.log(dictionary); 

静态配置使用aliases

配置独立的编译任务的条目,并与它们进行配置:

{ 
    entry: "entry.js", 
    resolve: { 
     alias: { 
      "locale": "/locale/locale-en.js" 
     } 
    } 
    ... 
} 
+0

谢谢。正是我想要的。 –