Can't import the named export 'inject' from non EcmaScript module (only default export is available)

发布时间 2023-07-09 07:50:21作者: hdxg

最近在开发一个electron应用,需要用到ssh功能。

经过挑选,最终使用的是node-ssh这个包。

然而,使用的过程并不顺利,执行npm run electron:serve运行出错,报错信息如下(仅截取部分):

 error  in ./node_modules/node-ssh/lib/esm/index.mjs

Can't import the named export 'AssertionError' from non EcmaScript module (only default export is available)

 error  in ./node_modules/node-ssh/lib/esm/index.mjs

Can't import the named export 'PromiseQueue' from non EcmaScript module (only default export is available)

 

找到具体文件./node_modules/node-ssh/lib/esm/index.mjs,发现是这么写的:

import { PromiseQueue } from 'sb-promise-queue';
import invariant, { AssertionError } from 'assert';

 

再定位到sb-promise-queue的入口文件,它是这样导出模块的:

...
exports.PromiseQueue = PromiseQueue;

结合上面报错信息,说明是不能使用类似 import { xx } from 'yyy'这样的导入方式。

嗯...,那node-ssh这个包的作者是怎么通过编译的。

 

试过网上修改webpack配置的方法,但没有奏效。

这个问题也不大,并且是个人小项目,没必要深究,索性直接修改node-ssh的源文件吧。

改成如下所示,成功通过编译:

const { PromiseQueue } = require('sb-promise-queue');
import invariant from 'assert';
const { AssertionError } = require('assert');