将 node require 与 Electron 和 Webpack 一起使用
Posted
技术标签:
【中文标题】将 node require 与 Electron 和 Webpack 一起使用【英文标题】:Using node require with Electron and 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 是的,这就行了!谢谢。
【参考方案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
【讨论】:
以上是关于将 node require 与 Electron 和 Webpack 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Electron 中使用 node_modules?
如何在 Electron 中使用 node_modules?
如何在 Electron 上使用带有 TypeScript 类型支持的 require 内部函数或条件?
有没有办法取消 node.js 对 require 模块的缓存