有没有办法完全忽略webpack中的动态需求?

时间:2016-07-24 20:51:55

标签: webpack

我正在使用动态需求的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加载器。我目前正在使用全局类和内联样式的混合,这不是理想的。

2 个答案:

答案 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()。