为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

aluckdog 2022-06-16 10:44:29
我有一个用 JavaScript 编写的现有包,我正在尝试将其转换为 TypeScript。我的问题是,module.exportsES6 模块的等价物是什么?例如,如果我有以下代码:module.exports = function () {    console.log("Hello World");};我发现在 ES 模块中执行此操作的唯一方法是执行以下操作。const myFunc = function () {    console.log("Hello World");};export default myFunc;// ORexport { 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 进行重大更改?
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

这里的解决方案是使用 TypeScriptexport =命令。这允许您使用require或import与模块一起使用。


export = function () {

    console.log("Hello World");

};

import myModule from "./lib/myModule";


// OR


const myModule = require("./lib/myModule");

有关更多信息,TypeScript 文档有一个关于从 JavaScript 迁移的指南,特别是一个名为从模块导出的部分。


查看完整回答
反对 回复 2022-06-16
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

打字稿中最准确的替换module.exports是export default


export default {

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

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

}

然后你可以像下面这样使用它们


import myThings from '.....'


查看完整回答
反对 回复 2022-06-16
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

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


查看完整回答
反对 回复 2022-06-16
  • 3 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信