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

Directus扩展调用ssh2报错:找不到包的解决求助

解决Directus扩展中ssh2包找不到的问题

以下是针对性的排查和解决步骤:

  • 确认ssh2的依赖类型
    确保你在扩展目录中是将ssh2安装为生产依赖,而非开发依赖。执行命令:

    npm install ssh2 --save
    

    不要使用--save-dev,因为扩展构建时不会将devDependencies中的包打包到dist目录。安装完成后重新执行npm run build构建扩展。

  • 调整扩展的构建配置
    Directus扩展默认会把多数第三方依赖标记为外部依赖,不会打包进最终的dist文件。如果ssh2未被正确打包,需修改扩展的构建配置(比如vite.config.js或rollup.config.js):

    export default defineConfig({
      build: {
        rollupOptions: {
          // 移除ssh2的外部依赖标记,让它被打包进dist
          external: (id) => !id.startsWith('ssh2') && 默认的external逻辑,
          // 处理ssh2这类CommonJS模块
          commonjsOptions: {
            include: ['node_modules/**'],
          },
        },
      },
    });
    

    修改后重新构建扩展,再重启Directus服务。

  • 确保Directus运行环境中安装了ssh2
    Directus运行时会优先从自身的node_modules加载依赖,而非扩展目录的:

    • 本地运行Directus时,进入api目录执行npm install ssh2,确保和扩展中安装的版本一致。
    • Docker部署时,要么进入容器执行npm install ssh2,要么在Dockerfile中添加RUN npm install ssh2步骤,重新构建镜像。
  • 检查导入语句的兼容性
    ssh2是CommonJS模块,可能存在ES模块导入的兼容性问题。尝试改用CommonJS的导入方式:

    const ssh2 = require('ssh2');
    

    或者在扩展的package.json中添加"type": "commonjs"(如果之前是ES模块的话),再重新构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:23:13