Node.js 支持typescript包的节点和es模块样式导入

Node.js 支持typescript包的节点和es模块样式导入,node.js,typescript,Node.js,Typescript,我有一个项目,我正在从JS(通过babel传输)转换为Typescript。该模块由单个函数组成,并使用module.exports=myFunction将其设置为默认值 我遇到的问题是,我想为节点用户保留要求格式: const myModule = require('my-module') 仍然允许es模块感知用户(typescript/babel)导入: import myModule from 'my-module' 我见过,它有一个单独的构建过程,使用rollup来生成修改版本的模块

我有一个项目,我正在从JS(通过babel传输)转换为Typescript。该模块由单个函数组成,并使用
module.exports=myFunction
将其设置为默认值

我遇到的问题是,我想为
节点
用户保留
要求
格式:

const myModule = require('my-module')
仍然允许es模块感知用户(typescript/babel)导入:

import myModule from 'my-module'
我见过,它有一个单独的构建过程,使用
rollup
来生成修改版本的模块,该模块将
module.exports.default=myModule
转换为节点样式
module.exports=myModule
,但我不希望为服务器端代码包含一个完全独立的构建系统(这只是服务器,所以不需要rollup提供的树震动/压缩)

目前,我可以做如下事情

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

import * as myModule from 'my-module'
或者返回到一个简单的
const myModule=require('my-module')
(它消除了typescript的优点)


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

我没有得到很好的答案,因此我最终使用了
export=
import=require

// index.ts
function myModule () {}

export = myModule
节点用户可以使用常规的
require
,typescript用户可以混合使用
import
和require来获得类型安全性:

// consumer.ts
import myModule = require('my-module')
这是我从以下资料中收集到的模式:

使用
export=
导出模块时,必须使用特定于类型脚本的
import module=require(“模块”)
来导入模块

你可以在我的模块中看到这个“直播”