Import and claim with Babel in Node

I want to import a class inside a single file:

"use strict";
import models from "../model";
class Foo {
    bar() {
    }
}
export default new Foo();

It works when I use import, for example:

import Foo from "./foo";
console.log(Foo.bar); // [Function bar]

The problem is that doing this with require gives me undefined:

var Foo = require("./foo");
console.log(Foo.bar); // undefined

and the variable Foo seems to be an empty class. Why is this so? What's happening?

+4
source share
1 answer

TL DR

, import require. import X from "Y" , . , require, , . .default, require, : require("./foo").default.

, Babel :

export { x }

:

"use strict";

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

, x . :

require("module").x;

x. :

export default new Foo();

:

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = new Foo();

, exports default, x x. , require :

require("module").default;

, undefined. :

var Foo = require("./foo");

Foo default:

{
    default: //Whatever was exported as default
}

, Foo.bar undefined, bar. , default.

, , . , .default. module.exports = exports["default"] module.exports ES5 exports["default"]. 1

import require

import, Babel :

import Foo from "./foo";
Foo.bar();

:

"use strict";

var _foo = require("./foo");

var _foo2 = _interopRequireDefault(_foo);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

_foo2.default.bar();

, Babel require . _interopRequireDefault . obj && obj.__esModule, , -, ES2015/ES6. , , { default: obj }. , module.exports = x ES5 , export default x ES2015/ES6. , Babel .default .

require:

var Foo = require("./foo");
Foo.bar();

ES5, . , .default Foo, . , .


1 , module.exports exports , . . module.exports , . , module.exports = x x .default require, module.exports . module.exports , require("module") module.exports, x. module.exports 3, require("module") 3. module.exports { blah: "foo" }, require("module") { blah: "foo" }. module module.exports .

, exports.default ( , module.exports), default, . exports = x x , exports module.exports, , exports module.exports.

+7

Source: https://habr.com/ru/post/1670892/


All Articles