网站搜索

javascript - 我无法导入我的一个节点模块,而其他模块可以正常工作


我的 TypeScript 文件夹结构是这样的

src
|aws folder
|    |__s3-controller.ts
|events-service folder
|    |__events-service-request.ts
|__index.ts

我的 index.ts 定义了以下导出内容:

export * from './aws/s3-controller.js';
export * from './aws/sns-controller.js';
export * from './events-service/events-service-request.js';

文件 events-service-request.ts 包含以下内容

import axios from 'axios';

/**
 *
 */
export default class EventsService {
  baseUrl: string;

  constructor(baseUrl: string) {
    this.baseUrl = baseUrl;
  }

  /**
   *
   */
  async sendRequest(body: {}): Promise<void> {
    axios.post(
      `${this.baseUrl}/twirp/events.domain.Domain/FireDomainEvent`,
      body,
    );
  }
}

我的 package.json 内容如下:

"exports": {
    ".": "./dist/esm/actions/index.js",
    "./utils": "./dist/esm/utils/index.js"
  },

我正在尝试使用 import EventsService from 'qa-data-tool/utils'; 将我的 events-service-request.js 中的函数导入到我的普通 Node 项目中,但我一直收到以下错误信息:

import EventsService from 'qa-data-tool/utils';
       ^^^^^^^^^^^^^
SyntaxError: The requested module 'qa-data-tool/utils' does not provide an export named 'default'

但出于某种原因,我可以正确地从我的 aws 文件夹导出模块。

我似乎无法弄清楚我缺少了什么。我已经仔细检查过,认为一切都设置正确,但我很确定我遗漏了一些微小的东西,正在困扰着我。

答案#1

星号导出不会重新导出模块的默认导出,否则你就会有三个 default 相互竞争。

你应该使用

  • 命名导出之一

    export class EventsService {
      …
    }
    

    带有初始再出口

    export * from './events-service/events-service-request.js';
    
  • 或默认导出

    export default class EventsService {
      …
    }
    

    使用别名的重新导出

    export { default as EventsService } from './events-service/events-service-request.js';