在角度/电子应用程序中使用带有 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 脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 node.js 中以角度使用 socket.io?

在 socket.io-client 中调用 IO 时出错,角度 8

我们可以在 Node JS 应用程序中使用带有 ejs(嵌入式 javascript)的 socket.io 而不是 html 页面吗?

带有 Socket.IO 1.0 的 NodeJS - 堆外的内存泄漏

无法从带有 Socket.IO 的 cookie 中获取 Express 会话 ID

带有 socket.io 和后端 php 的 Angular