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步骤,重新构建镜像。
- 本地运行Directus时,进入api目录执行
检查导入语句的兼容性
ssh2是CommonJS模块,可能存在ES模块导入的兼容性问题。尝试改用CommonJS的导入方式:const ssh2 = require('ssh2');或者在扩展的package.json中添加
"type": "commonjs"(如果之前是ES模块的话),再重新构建。
内容的提问来源于stack exchange,提问作者Joy Dimitris
相关产品推荐
相关产品推荐

