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

webpack打包ssh2遇.node模块解析失败错误,该如何解决?

解决Webpack打包ssh2时.node二进制文件解析错误的方案

核心原因

.node是Node.js原生扩展的二进制文件,Webpack默认无法解析这类文件,且ssh2依赖的原生模块依赖Node.js运行环境,不能直接打包进浏览器端bundle。

解决方法

方法1:Webpack 5 原生资源配置 + 外部依赖标记(推荐)

直接修改webpack.config.js,添加对.node文件的资源处理规则,并通过externals跳过原生模块的打包:

module.exports = {
  // 原有配置...
  module: {
    rules: [
      // 其他loader规则(如babel、css等)...
      {
        test: /\.node$/,
        type: 'asset/resource',
        generator: {
          filename: 'native-modules/[name].[ext]'
        }
      }
    ]
  },
  externals: {
    // 告诉Webpack这两个模块是外部commonjs依赖,运行时直接从node_modules加载
    'cpu-features': 'commonjs cpu-features',
    'ssh2/lib/protocol/crypto': 'commonjs ssh2/lib/protocol/crypto'
  }
};

方法2:使用node-loader(适用于Electron等需要打包原生模块的场景)

如果是Electron渲染进程这类需要打包原生模块的场景,先安装node-loader:

npm install node-loader --save-dev

再修改webpack.config.js:

module.exports = {
  // 原有配置...
  module: {
    rules: [
      // 其他规则...
      {
        test: /\.node$/,
        use: 'node-loader'
      }
    ]
  },
  // 针对Node.js/Electron环境设置target
  target: 'node',
};

额外注意

  • 若为浏览器端项目:ssh2依赖Node.js核心API(如net、crypto),浏览器环境不支持,建议替换为浏览器兼容的SSH库,比如libssh2-wasm。
  • 版本兼容问题:尝试升级ssh2到最新稳定版,避免旧版本原生扩展的编译问题:
npm update ssh2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:27:51