You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于angular-electron集成ssh2模块打包时child_process/dns找不到求助

解决Angular-Electron项目中ssh2打包时Node.js核心模块找不到的问题

看起来你遇到的是Webpack打包Electron渲染进程时,无法识别Node.js核心模块的典型问题,我来帮你一步步解决:

1. 先修正配置里的拼写错误

你提到的"target": "eletron-render"有个拼写错误,应该是electron-renderer——这个错误会直接导致你的target配置不生效,Webpack还是按照普通浏览器环境打包,自然找不到child_process、dns这些Node.js专属模块。

2. 完善Externals配置

只添加fs和child_process是不够的,需要把ssh2依赖的所有Node.js核心模块都加进去,而且建议用函数式的externals配置,比对象方式更灵活可靠:

在你的自定义Webpack配置文件(比如angular-electron项目常用的extra-webpack.config.js)里修改:

module.exports = {
  target: 'electron-renderer',
  externals: [
    (context, request, callback) => {
      // 列出ssh2依赖的所有Node.js核心模块
      const nodeCoreModules = ['child_process', 'dns', 'fs', 'net', 'tls', 'stream'];
      if (nodeCoreModules.includes(request)) {
        // 告诉Webpack用commonjs方式引入这些模块,不要打包进去
        return callback(null, `commonjs ${request}`);
      }
      callback();
    }
  ]
};

3. 进阶方案:把ssh2逻辑移到主进程(更推荐)

如果上面的配置还是没解决问题,大概率是因为你在Electron的渲染进程中直接使用了ssh2。Electron的渲染进程默认开启沙箱模式,会限制Node.js核心模块的直接调用,而且从安全角度来说,也不建议在渲染进程中处理敏感的SFTP连接逻辑。

推荐的做法是把SFTP相关代码放到主进程里,渲染进程通过IPC通信调用:

主进程代码示例(比如main.ts)

const { ipcMain } = require('electron');
const { Client } = require('ssh2');

// 监听渲染进程的SFTP连接请求
ipcMain.handle('sftp-connect', async (event, connectConfig) => {
  return new Promise((resolve, reject) => {
    const conn = new Client();
    conn.on('ready', () => {
      conn.sftp((err, sftp) => {
        if (err) return reject(err);
        // 这里可以保存sftp实例,后续处理文件操作
        resolve('SFTP连接成功');
      });
    }).on('error', reject)
      .connect(connectConfig);
  });
});

渲染进程代码示例(Angular组件里)

import { ipcRenderer } from 'electron';

async function connectToSFTP() {
  try {
    const result = await ipcRenderer.invoke('sftp-connect', {
      host: '你的SFTP服务器地址',
      port: 22,
      username: '用户名',
      password: '密码'
    });
    console.log(result);
  } catch (err) {
    console.error('SFTP连接失败:', err);
  }
}

这样既规避了Webpack打包的问题,也符合Electron的安全最佳实践。

内容的提问来源于stack exchange,提问作者JBRandri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:26:15