支持打字稿包的节点和 es-module 样式导入



我有一个项目,我正在从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")来导入模块。

你可以在我的量角器片状模块中看到这个"实时"。

相关内容

  • 没有找到相关文章

最新更新