Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webpack 有没有办法完全忽略网页中的动态需求?_Webpack - Fatal编程技术网

Webpack 有没有办法完全忽略网页中的动态需求?

Webpack 有没有办法完全忽略网页中的动态需求?,webpack,Webpack,我正在开发一个应用程序,它使用动态需求在运行时加载扩展(节点模块)。该应用程序当前获得一系列已安装的扩展循环,需要它们并保存对它们的引用: getInstalledExtensions() .then(extensions => { extensions.map(extension => require(extension.path)) }) .then(saveExtensions) 我无法让webpack完全忽略第三行的require语句:require(e

我正在开发一个应用程序,它使用动态需求在运行时加载扩展(节点模块)。该应用程序当前获得一系列已安装的扩展循环,需要它们并保存对它们的引用:

getInstalledExtensions()
  .then(extensions => {
    extensions.map(extension => require(extension.path))
  })
  .then(saveExtensions)
我无法让webpack完全忽略第三行的require语句:
require(extension.path)

已安装扩展的列表在生成时未知。当用户第一次安装应用程序时,阵列为空,随着用户安装/卸载扩展,阵列会增大/缩小

我试过:

module: {
    exprContextRegExp: /$^/,
    exprContextCritical: false,
}
但它只是将
require(extension.path)
替换为

!(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())
我为什么要在电子应用程序中使用webpack?

require
价格昂贵,而且会严重影响我的应用程序的启动时间。例如,
require('request')
大约需要800毫秒,这太荒谬了。我想捆绑尽可能多的模块,以减少我的应用程序的启动时间


我也希望有可能使用CSS加载程序。我目前混合使用全局类和内联样式,这并不理想。

我在为atom制作yeoman包时遇到了同样的问题。我的解决办法如下:

  • 在输出文件夹“originalRequire.js”中创建一个只有一行的文件:module.exports=require
  • 在webpack配置中,在externals部分提到“/originalRequire”(因此它不会处理并将originalRequire包含到构建中)
  • 使用字符串替换加载程序将require替换为require(“./originalRequire”)。在您的示例中,它将是require(“./originalRequire”)(extension.path)

  • 我在为atom制作一个约曼包时也遇到了同样的问题。我的解决办法如下:

  • 在输出文件夹“originalRequire.js”中创建一个只有一行的文件:module.exports=require
  • 在webpack配置中,在externals部分提到“/originalRequire”(因此它不会处理并将originalRequire包含到构建中)
  • 使用字符串替换加载程序将require替换为require(“./originalRequire”)。在您的示例中,它将是require(“./originalRequire”)(extension.path)

  • 您可以在electron中使用
    window.require()
    而不是
    require()

    您可以在electron中使用
    window.require()
    而不是
    require()

    webpackIgnore:true。

    require(/* webpackIgnore: true */ 'ignored-module')
    
    getInstalledExtensions()
      .then(extensions => {
        extensions.map(extension => require(/* webpackIgnore:true */ extension.path))
      })
      .then(saveExtensions)
    


    您还可以尝试另一种选择。检查网页包插件。如果它有非字符串表达式(在中为require(extension.path)),则该插件将忽略require()。

    网页包在导入和require中不支持完全动态表达式。在这种情况下,我认为网页提供的解决方案非常难看。您可以使用webpack提供的神奇评论。为此,在导入/要求方法中包含一条注释webpackIgnore:true

    require(/* webpackIgnore: true */ 'ignored-module')
    
    getInstalledExtensions()
      .then(extensions => {
        extensions.map(extension => require(/* webpackIgnore:true */ extension.path))
      })
      .then(saveExtensions)
    


    您还可以尝试另一种选择。检查webpack插件。如果require()有非字符串表达式(在您的案例中为require(extension.path)),则该插件将忽略该表达式。

    此解决方案对我很有效。谢谢编辑:我没有使用字符串替换加载程序-我只需要在外部粘贴originalrequire.js就可以了。这个解决方案对我来说很有效。谢谢编辑:我没有使用字符串替换加载程序-我只需要在外部粘贴originalrequire.js就可以了。ravi,请不要只是发布一些工具或库作为答案。拉维,请不要只是发布一些工具或库作为答案。至少要在答案本身上加以证明。