ES6 模块的 module.exports 等价物是什么?

我有一个用 JavaScript 编写的现有包,我正在尝试将其转换为 TypeScript。我的问题是,module.exportsES6 模块的等价物是什么?


例如,如果我有以下代码:


module.exports = function () {

    console.log("Hello World");

};

我发现在 ES 模块中执行此操作的唯一方法是执行以下操作。


const myFunc = function () {

    console.log("Hello World");

};

export default myFunc;

// OR

export { myFunc };

当然,这与module.exports = //....


这导致了这个问题。当我通过 TypeScript 运行它并获得输出的代码时,包的用户要么需要使用一个import defaultExport from "module-name";语句(这还不错),要么require("module-name")他们必须使用而不是能够访问它require("module-name").default(如果他们正在使用标准 JS,而不是 TypeScript)。对于标准 JavaScript 用户来说,这显然是一个重大的 API 更改。


显然,这里的目标是没有破坏性的 API 更改(并且不需要更改客户代码)。


任何解决方案的另一个要求。在包中的其他地方,我需要能够将许多不同的文件导出为一个对象。所以过去我一直在做:


module.exports = {

    "thing1": require("./a.js"),

    "thing2": require("./b.js")

};

所以我需要能够正常导出它而不需要用户这样做thing1.default。到目前为止,这似乎是一个更简单的要求,因为我正在导出一个 ES Modules 似乎处理得很好的对象。当您导出一个单数(未命名)表达式时,它会变得非常棘手。


有没有办法做到这一点而不必对 API 进行重大更改?


aluckdog
浏览 139回答 3
3回答

牧羊人nacy

这里的解决方案是使用 TypeScriptexport =命令。这允许您使用require或import与模块一起使用。export = function () {    console.log("Hello World");};import myModule from "./lib/myModule";// ORconst myModule = require("./lib/myModule");有关更多信息,TypeScript 文档有一个关于从 JavaScript 迁移的指南,特别是一个名为从模块导出的部分。

凤凰求蛊

打字稿中最准确的替换module.exports是export defaultexport default {    "thing1": require("./a.js"),    "thing2": require("./b.js")}然后你可以像下面这样使用它们import myThings from '.....'

眼眸繁星

Typescript 建议不要重写代码,而是将其配置为允许 js 模块。当我们将一个非常大的应用程序从 js 转换为 TS 时,我们采取了在 TS 中编写新代码的立场,并慢慢地将 js 转换为 ts(但不会花费大量时间来转换)。我们需要在 tsconfig.json 中启用几个选项,例如:{  ...,  "compilerOptions" : {    ...     "moduleResolution": "node",    "allowJs": true,    ...  },  "include" [    "path/to/my/js",  ]}您还需要更新您的webpack.config.js:module.exports = {   // ... my settings   resolve: {        // Add '.ts' and '.tsx' as resolvable extensions.        extensions: ["", ".webpack.js", ".web.js", ".ts", ".tsx", ".js"]    },}您可能还必须将其声明require为函数(如果您遇到诸如 之类的错误require is undefined):declare function require(path: string): any;更多信息可在此处获得: https ://www.typescriptlang.org/docs/handbook/migrating-from-javascript.html
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript