我猜测你这里 npm 包源码是 esm 格式的 ts 文件,是否还会通过 tsc 编译成 CommonJS 的 js 文件呢?如果是这样的话,应该会编译成
// index.js
module.exports.apiBase = ...
而编辑器的 build tool 只会处理 npm 包实际导出的 js 文件,即 index.js
这个 index.js 会被编辑器的 build tool 做多一次包装,包装成类似这样的模块
export const __cjsMetaURL = 'pack:///chunks/...';
export const default = {
apiBase: ...,
}; // 注意:这个 default 对象的所有属性是运行时动态赋值的,因为 CommonJS 并不能被很好地支持静态解析
// 所以目前也没有办法解析生成 `export const apiBase = ...` 这样的导出语句。
所以后面的一系列输出应该就可以理解了,
import api from "api"; // 其实就是 `import { default as api } from 'api'`, api 就是 default 对象
import * as api from "api"; // 输出就是 index.js 导出的所有对象,包括 __cjsMetaURL 和 default
import { apiBase } from "api"; // 就有问题了,因为 index.js 没有导出 apiBase 对象, 就报错了
// 这里可能报错信息有一些误导性,应该不是循环引用导致的,这个后续我们优化一下
import { default as _default } from "api"; // 同上 `import api from "api";`