如何使TypeScript生成CommonJS有效模块?

时间:2019-05-31 21:50:17

标签: typescript module commonjs

假设我在TypeScript中有一个模块:

export default function myModule(name: string): void {
  alert(`Hello, ${name}!`)
}

当我运行tsc来构建以上代码时,尝试通过Node.js(纯JavaScript)导入生成的代码:

const myModule = require('./dist/myModule.js')
myModule('Luiz') // ERROR! `myModule` is `undefined`

使其生效的唯一方法是在.default之后使用require(),这不是我想要的:

//                                            ↓↓↓↓↓↓↓↓
const myModule = require('./dist/myModule.js').default
myModule('Luiz') // Now it works.

如何使TypeScript生成一个输出,稍后将该输出用作Node.js模块(因为我将包发布到NPM中)而没有该.default属性?就是这样:

const myModule = require('my-module')

先谢谢了。 :)

1 个答案:

答案 0 :(得分:1)

简短回答

使用export =构建可导出函数的CommonJS模块。

TypeScript docs say

  

TypeScript支持export =来建模传统的CommonJS和AMD工作流程... export =语法指定从模块导出的单个对象。这可以是类,接口,名称空间,函数或枚举。

完整设置

myModule.ts

export = function myModule(name: string): void {
  console.log(`Hello, ${name}!`)
}

tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs"
  }
}

myModule.js(输出)

"use strict";
module.exports = function myModule(name) {
    console.log("Hello, " + name + "!");
};

demo.js(用法)

const myModule = require('./my-module');

myModule('Luiz'); // Hello, Luiz!