在角度/电子应用程序中使用带有 socket.io 的 nodejs 脚本
Posted
技术标签:
【中文标题】在角度/电子应用程序中使用带有 socket.io 的 nodejs 脚本【英文标题】:Using nodejs script with socket.io inside an angular/electron application 【发布时间】:2021-09-30 03:24:21 【问题描述】:我正在构建电子/角度应用程序 - 它工作正常; 我有另一个打开 socket.io 服务器的 nodejs 脚本; (我正在使用 typescript + webpack 在单个捆绑 js 文件中创建所有文件)。 我正在尝试将此脚本包含在 anguler/electron 中。但它看起来像 socket.io(或脚本中包含的其他一些库)依赖于 nodejs 内置包,并且无法在 Angular 应用程序中使用它。这对我来说很有意义,因为您不能直接在浏览器上启动套接字服务器 - 但它是一个桌面电子应用程序。
当我尝试为包构建 Angular 应用程序时出现此错误: 路径、操作系统、http、https、crypto、tty、zlib、util
Error: Module not found: Error: Can't resolve 'util' in '..\src\app'
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.
If you want to include a polyfill, you need to:
- add a fallback 'resolve.fallback: "util": require.resolve("util/") '
- install 'util'
If you don't want to include a polyfill, you can use an empty module like this:
resolve.fallback: "util": false
webpack.config nodejs 脚本
const path = require('path');
module.exports =
entry: './src/index.ts',
mode: 'production',
target: 'node',
module:
rules: [
test: /\.ts?$/,
use: 'ts-loader',
exclude: /node_modules/,
,
],
,
resolve:
extensions: ['.ts', '.js'],
,
output:
filename: 'script.min.js',
path: path.resolve(__dirname, 'dist'),
libraryTarget: 'umd',
libraryExport: 'default'
,
;
我可以不将这个脚本包含在 Angular 应用程序中,而是包含在 main.js 中,电子应用程序从哪里开始......但是这样我将无法从 Angular 内部访问脚本中的内容;
我在这个逻辑上哪里失败了? 想要的结果是一个电子/角度桌面应用程序,其中我有一个按钮,当单击它时,它会使用提供的配置启动 socket.io 服务器。
【问题讨论】:
【参考方案1】:您可以通过简单地将其添加到您的 webpack 配置来解决此问题。我不使用 Angular,但在 React 中我将其添加到 webpack.renderer.config.js
我建议阅读有关在 Electron 中创建辅助窗口并运行所有这些东西的内容。
resolve:
// all your other configs
fallback:
"util": false,
【讨论】:
以上是关于在角度/电子应用程序中使用带有 socket.io 的 nodejs 脚本的主要内容,如果未能解决你的问题,请参考以下文章
在 socket.io-client 中调用 IO 时出错,角度 8
我们可以在 Node JS 应用程序中使用带有 ejs(嵌入式 javascript)的 socket.io 而不是 html 页面吗?
带有 Socket.IO 1.0 的 NodeJS - 堆外的内存泄漏