在 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
我正在使用 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