【发布时间】:2018-05-05 14:26:38
【问题描述】:
我的桌面应用程序使用 Electron+React 作为接口,Edge.js 将 Node 与我的 C# 应用程序连接起来。
我的问题是:Webpack 无法捆绑我的应用程序,因为 Edge.js 依赖项抛出以下 error:
严重依赖:依赖的请求是一个表达式
问题是 Edge.js 有以下动态需求:
var compilerName = 'edge-' + language.toLowerCase();
var compiler = require(compilerName);
大多数时候,compilerName 会被翻译成“edge-cs”,但 Webpack 无法确定这一点。
我该如何解决这个问题?人们建议设置require context 或ContextReplacementPlugin,但它们通常都适用于你有require('./directory/' + variable) 的情况,而我不知道如何在我有require(variable) 的情况下使用它们。
注意:我需要一个不需要修改我的第三方库代码的解决方案。
【问题讨论】:
-
使用条件语句有用吗?例如。
if language = x then require x而不是将变量名传递给 require? -
这行不通,因为 webpack 需要将所有可能的需求捆绑到包中,并且当您以编程方式确定需要什么时,它无法在打包时告诉您需要什么。但是,您可以使用 csilk 或 nilesh 建议的内容,因为这会向 webpack 显示所有可能需要的静态字符串。它会使代码更冗长,但这是 webpack 的限制。
-
@jfriend00,但这需要我更改第三方库代码,对吧?
-
@user8983325 - 是的,如果你想将 webpack 与不是按照 webpack 指南设计的代码一起使用。
-
不确定这是否会有所帮助,但这可能相关吗? github.com/sindresorhus/require-fool-webpack