支持TypeScript软件包的节点和es模块样式导入

时间:2018-07-04 18:54:03

标签: node.js typescript

我有一个项目要从JS(通过babel编译)转换为Typescript。该模块由单个功能组成,并使用module.exports = myFunction将其设置为默认功能。

我遇到的问题是我想为require个用户保留node格式:

const myModule = require('my-module')

仍然允许具有模块意识的用户(打字稿/ babel)访问import

import myModule from 'my-module'

我已经看到typescript-library-starter拥有一个单独的构建过程,该过程使用rollup发出模块的UMDified版本,该模块将module.exports.default = myModule转换为节点样式module.exports = myModule,但是我希望不必为服务器端代码包括一个完全独立的构建系统(这仅是服务器,因此不需要汇总提供的树状摇动/压缩)。

目前,我可以执行以下操作

export = myFunction

将支持const myModule = require('my-module')用例,但意味着TS / es模块用户将需要执行以下操作:

import * as myModule from 'my-module'

或退回到简单的const myModule = require('my-module')(这消除了打字稿的好处)。

是否有一种模式可以分发适用于节点样式要求和es模块样式导入的模块?

1 个答案:

答案 0 :(得分:0)

对此我没有很好的答案,所以我最终使用了export =import = require

// index.ts
function myModule () {}

export = myModule

节点用户可以使用常规的require,而打字稿用户可以使用import的混合,并要求获得类型安全性:

// consumer.ts
import myModule = require('my-module')

我从Typescript docs收集的模式是什么:

  

使用export =导出模块时,必须使用TypeScript专用的import module = require("module")导入模块。

您可以在我的protractor-flake模块中看到此“直播”。