如何让 TypeScript 生成 CommonJS 有效模块?
How to make TypeScript generate a CommonJS valid module?
假设我有一个 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`
让它工作的唯一方法是在 require()
之后使用 .default
,这不是我想要的:
// ↓↓↓↓↓↓↓↓
const myModule = require('./dist/myModule.js').default
myModule('Luiz') // Now it works.
如果没有 .default
属性,我怎样才能让 TypeScript 生成一个输出,我以后可以将其用作 Node.js 模块(因为我正在将包发布到 NPM 中)?就像这样:
const myModule = require('my-module')
提前致谢。 :)
简答
使用export =
构建一个导出函数的CommonJS模块。
TypeScript supports export =
to model the traditional CommonJS and AMD workflow... The export =
syntax specifies a single object that is exported from the module. This can be a class, interface, namespace, function, or enum.
完整设置
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!
假设我有一个 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`
让它工作的唯一方法是在 require()
之后使用 .default
,这不是我想要的:
// ↓↓↓↓↓↓↓↓
const myModule = require('./dist/myModule.js').default
myModule('Luiz') // Now it works.
如果没有 .default
属性,我怎样才能让 TypeScript 生成一个输出,我以后可以将其用作 Node.js 模块(因为我正在将包发布到 NPM 中)?就像这样:
const myModule = require('my-module')
提前致谢。 :)
简答
使用export =
构建一个导出函数的CommonJS模块。
TypeScript supports
export =
to model the traditional CommonJS and AMD workflow... Theexport =
syntax specifies a single object that is exported from the module. This can be a class, interface, namespace, function, or enum.
完整设置
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!