我有一个项目,我正在从JS(通过babel转译(转换为Typescript。该模块由单个函数组成,并使用module.exports = myFunction
将其设置为默认值。
我遇到的问题是我想为node
用户保留require
格式:
const myModule = require('my-module')
仍然允许ES模块感知用户(打字稿/babel(import
:
import myModule from 'my-module'
我已经看到了具有单独构建过程的typescript-library-starter
,该rollup
使用发出模块的UMDized版本,该模块将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-module 样式导入?
我没有得到一个很好的答案,所以我最终使用了export =
和import = require
// index.ts
function myModule () {}
export = myModule
Node 用户可以使用常规require
,打字稿用户可以使用混合import
和需要获得类型安全:
// consumer.ts
import myModule = require('my-module')
这是我从打字稿文档中收集到的一种模式:
使用
export =
导出模块时,必须使用 TypeScript 特定的import module = require("module")
来导入模块。
你可以在我的量角器片状模块中看到这个"实时"。