我正在使用动态需求的electron应用程序在运行时加载扩展(节点模块)。该应用程序目前通过它们获取一系列已安装的扩展程序循环,需要它们并保存对它们的引用:
getInstalledExtensions()
.then(extensions => {
extensions.map(extension => require(extension.path))
})
.then(saveExtensions)
我在第三行完全忽略要求声明时遇到问题<{1}}。
在构建时不知道已安装扩展的列表。当用户首次安装应用程序时,阵列为空,当用户安装/卸载扩展时,它会增大/缩小。
我试过了:
require(extension.path)
但它只是用
替换module: {
exprContextRegExp: /$^/,
exprContextCritical: false,
}
require(extension.path)
为什么我要在电子应用中使用webpack?
!(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())
价格昂贵,会严重影响我应用的启动时间。例如,require
大约需要800毫秒,这很荒谬。我想尽可能多地捆绑模块,以减少应用的启动时间。
我也希望有可能使用CSS加载器。我目前正在使用全局类和内联样式的混合,这不是理想的。
答案 0 :(得分:1)
您可以在电子中使用fmod
代替window.require()
。
答案 1 :(得分:0)
Webpack 不支持 import 和 require 中的完全动态表达式。在我认为非常难看的这种情况下,webpack 提供了 hacky 解决方案。你可以使用 webpack 提供的神奇注释。为此,您可以在 import/require 方法中加入注释 webpackIgnore: true。
require(/* webpackIgnore: true */ 'ignored-module')
getInstalledExtensions()
.then(extensions => {
extensions.map(extension => require(/* webpackIgnore:true */ extension.path))
})
.then(saveExtensions)
您可以尝试另一种选择。检查 webpack 插件 webpack-ignore-dynamic-require。如果它具有非字符串表达式(在您的 情况下为 require(extension.path)),则该插件会简单地忽略 require()。