为啥我的 electron-forge 和 webpack 模板会使用空的 node_module 文件夹制作可分发文件?

Posted

技术标签:

【中文标题】为啥我的 electron-forge 和 webpack 模板会使用空的 node_module 文件夹制作可分发文件?【英文标题】:Why does my electron-forge with webpack template makes distributables with empty node_module folders?为什么我的 electron-forge 和 webpack 模板会使用空的 node_module 文件夹制作可分发文件? 【发布时间】:2021-08-07 06:19:45 【问题描述】:

我最近正在尝试使用 webpack 捆绑器的 electron 12,并且最近意识到每次它使用 yarn make 构建一个可分发文件时,构建的 node_module 文件夹是空的。因此,因为我通过暴露一些模块ContextBridge 来自 preload.js,应用程序崩溃并抛出丢失的错误消息。

不管怎样,在我手动将整个 node_module 文件夹复制到其中之后,它就可以工作了。

【问题讨论】:

你的依赖是devDependencies吗? devDependencies 不包含在可分发文件中 不,我将我的预期开发依赖项分开。这是我的依赖项列表。 "dependencies": "@fortawesome/fontawesome-free": "^5.15.3", "@reduxjs/toolkit": "^1.5.1", "axios": "^0.21.1", "bootstrap": "^5.0.0", "electron-is-dev": "^2.0.0", "electron-squirrel-startup": "^1.0.0", "qrcode": "^1.4.4", "react": "^17.0.2", "react-bootstrap": "^1.5.2", "react-dom": "^17.0.2", "react-redux": "^7.2.4", "redux": "^4.1.0", "redux-thunk": "^2.3.0" 在dist中,从preload脚本中导入qrnode等依赖。 【参考方案1】:

electron-forge 和 Webpack 的默认配置会捆绑您的 main/preload/renderer 代码。

这主要是积极的影响:

更紧凑的可分发内容,没有node_modules 中存在的所有内容 如果您使用的是 nodeIntegration: false,则渲染器中没有 require,因此如果您想使用依赖项,则需要捆绑代码 启动时间更快,因为: require'ing 数百甚至数千个单独的文件可能会很慢 您的代码已最小化且更小,因此 Chrome 在启动时解析的代码更少

什么是负面的?

并非所有 node.js 模块都支持捆绑 原生模块通常与捆绑不兼容

【讨论】:

现在这就是我无法在渲染器上使用 qrcode 和其他模块的原因。谢谢。

以上是关于为啥我的 electron-forge 和 webpack 模板会使用空的 node_module 文件夹制作可分发文件?的主要内容,如果未能解决你的问题,请参考以下文章

创建 Electron JS 可执行文件(electron-builder 或 electron-forge)

nodejs/electron-forge/node-gyp:在尝试了我可以在网上找到的所有提示后,找不到任何要使用的 Visual Studio 安装

electron使用electron-forge打包后报错cannot find module ‘XXX’

为啥我的 web3 导入无法正常工作?

为啥我的代码不能在 web 中的 react-native 代码中运行

为啥我的 Web 应用在 iOS(Chrome 和 Safari)上滚动超级慢,但在所有其他平台上都可以?