我有一个项目要从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模块样式导入的模块?
答案 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模块中看到此“直播”。