在 Electron 和 Webpack 中使用 node require

Using node require with Electron and Webpack

我正在使用 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" 处理。

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

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

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

我看到了 this 文章,出于其他原因,作者需要 node 模块,而这些模块不会被 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