【问题标题】:How do I use a class compiled by babel in a node project?如何在节点项目中使用 babel 编译的类?
【发布时间】:2016-07-02 23:46:15
【问题描述】:

这是我正在测试用 es2015 编写的一个非常简单的类:

"use strict";

class Car {
    constructor(color) {
        this.color = color;
    }
}

export default Car;

我使用 babel-cli 转译该类,以便它可以在节点中使用...这是输出:

"use strict";

Object.defineProperty(exports, "__esModule", {
    value: true
});

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var Car = function Car(color) {
    _classCallCheck(this, Car);

    this.color = color;
};

exports.default = Car;

在我的节点项目中,我像这样包含该模块:

var Car = require("js-models/lib/Car");

但是当我执行以下操作时,我收到“Car is not a function”错误:

var blueCar = new Car('blue');

如果在这种情况下有所不同,我正在运行 node v5.8?

【问题讨论】:

  • 你试过 var Car = require("js-models/lib/Car"); 吗?没有.Car?您使用默认导出,因此 .Car 将是未定义的。
  • 这是我的问题的一个错字。实际代码最后没有 .Car ,即使没有它,它仍然无法工作:虽然很好
  • 你试过不转译而是使用 babel-node 吗?
  • 检查版本,因为最新版本的 Babel 给出了以下结尾:exports["default"] = Car; module.exports = exports["default"];
  • 这是标准问题的问题

标签: node.js ecmascript-6 babeljs transpiler


【解决方案1】:

1) 你可以 import default 从 ES 的模块中转译它们:

import Car from 'js-models/lib/Car';
let blueCar = new Car('blue');

2)可以导出Car类,transpile和require

// module js-models/lib/Car
"use strict";

export class Car {
    constructor(color) {
        this.color = color;
    }
}

// node project
var Car = require("js-models/lib/Car").Car;    
var blueCar = new Car('blue');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    相关资源
    最近更新 更多