【问题标题】:Using node require with Electron and Webpack将 node require 与 Electron 和 Webpack 一起使用
【发布时间】:2016-09-17 07:35:24
【问题描述】:

我正在使用 Electron 构建一个项目,并使用 Webpack 构建(Angular 2)渲染过程应用程序。

在这个应用程序中,我需要在运行时动态地require 一些在构建时不存在的文件。代码如下所示:

require("fs").readdirSync(this.path).forEach(file => {
  let myModule = require(path.join(this.path, file));
  // do stuff with myModule
});

问题在于 Webpack 编译器会将 require() 调用转换为自己的 __webpack_require__() 并且在运行时,它会在自己的内部模块注册表中查找动态“myModule”文件,当然会没找到。

我尝试使用“externals”配置选项,但由于这是一个动态要求,它似乎没有被“externals”处理。

还有其他人成功解决了这个问题吗?

【问题讨论】:

  • 不是 100% 确定 - 你试过 global.require 吗?
  • @jantimon 是的,这就行了!谢谢。

标签: node.js webpack electron


【解决方案1】:

正如@jantimon 对我的问题的评论中所建议的那样,解决方案是使用global.require

require("fs").readdirSync(this.path).forEach(file => {
  let myModule = global.require(path.join(this.path, file));
  // do stuff with myModule
});

【讨论】:

  • 我尝试在电子 vue 应用程序中使用它。但它说global.require 不是函数。知道这里可能出了什么问题吗?
  • global.require 是 Electron 提供的东西。当您使用 Node.js 本身时,它不起作用。
【解决方案2】:

我遇到了this 文章,由于某些其他原因,作者需要不被 webpack 转译的节点模块。他建议使用

new webpack.IgnorePlugin(new RegExp("^(fs|ipc)$"))

在 webpack.config.js 文件中。这应该可以防止转换模块 fs 和 ipc 以便可以在代码中使用(必需)。

我不确定这是否也会影响您的问题,但它可能会有所帮助。

更多上下文的原始文章可以在这里找到:https://medium.com/@Agro/developing-desktop-applications-with-electron-and-react-40d117d97564#.927tyjq0y

【讨论】:

    猜你喜欢
    • 2011-06-02
    • 2019-09-27
    • 2017-07-31
    • 2016-09-11
    • 1970-01-01
    • 2017-02-13
    • 2018-06-12
    • 2020-09-11
    • 2014-04-13
    相关资源
    最近更新 更多