Node.js 支持typescript包的节点和es模块样式导入
我有一个项目,我正在从JS(通过babel传输)转换为Typescript。该模块由单个函数组成,并使用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来生成修改版本的模块
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(“模块”)
来导入模块
你可以在我的模块中看到这个“直播”