【问题标题】:Export node.js class to be used with require()导出与 require() 一起使用的 node.js 类
【发布时间】:2020-06-13 09:01:31
【问题描述】:

我正在导出以下类:

export default class Tester {
}

问题是当我转译并导入它时:

const Tester = require('./dist/Tester');

问题是要使用 Tester 类,我需要像这样使用它:

const example = new Tester.Tester();

我怎样才能导出它,所以我这样做:

const example = new Tester();

【问题讨论】:

  • 您使用的是什么版本的节点?你是在 node 端使用 babel 进行转译,还是在 node 中使用原生 EJS 支持?

标签: javascript node.js webpack ecmascript-6 babeljs


【解决方案1】:

您可以尝试修改导入块以使用对象解构:

const { Tester } = require('./dist/Tester');

【讨论】:

    【解决方案2】:

    奇怪的语法实际上是由您使用 2 种不同的导入/导出方言 es6 和 commonjs 引起的。 Babel transpilation 使您可以在同一个系统中使用两者。

    在 es6 中

    • 导出用export
    • 导入是用import写的

    例子:

    // -- es6
    
    // tester.js
    
    export default class Tester {}  // default export
    export const SomeConsts = {}    // named export
    
    // main.js
    
    import Tester, { SomeConsts } from "./tester";
    

    在nodejs中commonjs的实现

    • 导出是用module.exports写的
    • 导入是用require()写的

    例子:

    // -- commonjs
    
    // tester.js
    
    class Tester {}
    const SomeConsts = {}
    
    module.exports = { Tester, SomeConsts }  // arbitrary export
    
    // main.js
    
    const TesterModule = require("./tester.js");
    const Tester = TesterModule.Tester;
    const SomeConsts = TesterModule.SomeConsts;
    
    // --or--
    
    const { Tester, SomeConsts } = require("./tester.js");
    

    编辑

    如果您希望Tester 类成为导出的根,并且仍想导出SomeConsts,则必须将SomeConsts 设为Tester 类的一部分。

    // -- commonjs
    
    // tester.js
    class Tester {
      static SomeConsts = {}
    }
    
    module.exports = {}
    
    // main.js
    
    const Tester = require("./tester.js")
    const TesterInstance = new Tester():
    

    【讨论】:

    • 我明白了,但假设我有一个导出 Tester 和 SomeConsts 的 index.js 文件。有没有办法让 Tester 成为“默认”导出,所以当我需要它时,我可以做 const TesterModule = require("./tester.js"); const x = new TesterModule();
    • @johnnyshrewd 您只能在 module.exports 中导出 1 个根对象。如果你想保留 SomeConsts,你必须让它成为 Tester 的一部分。 ``` // tester.js class Tester{ static SomeConsts = {} } module.exports = Tester // main.js const Tester = require("./tester.js") const TesterInstance = new Tester() ```
    猜你喜欢
    • 1970-01-01
    • 2013-03-04
    • 2011-06-02
    • 2012-02-15
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    相关资源
    最近更新 更多