экспорт по умолчанию {foo, bar} не работает в node.js с babel - PullRequest
5 голосов
/ 24 июня 2019

Я не могу заставить работать экспорт {несколько функций} по умолчанию.

Вот мои настройки:

src/index.js:

import {foo} from './foo'

foo();

foo.js:

const foo = () => {
    console.log("Hello!");
}

export default {foo};

и мой package.json:

{
  "name": "jestjs.io",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "babel-node src/index.js",
    "test": "jest"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.4.5",
    "@babel/node": "^7.4.5",
    "@babel/preset-env": "^7.4.5",
    "babel-jest": "^24.8.0",
    "jest": "^24.8.0",
    "nodemon": "^1.19.1"
  }
}

, когда я запускаю npm start, я получаю следующее сообщение об ошибке:

/src/index.js:5
(0, _foo.foo)();
         ^

TypeError: (0 , _foo.foo) is not a function

Однако,если я export default foo и import foo без фигурных скобок {foo}, он выполняется, и на терминал выводится Hello!.

Что я делаю не так?

Ответы [ 3 ]

3 голосов
/ 24 июня 2019

Вы использовали экспорт по умолчанию и пытаетесь получить к нему доступ, используя именованный синтаксис импорта, что невозможно, поэтому сначала необходимо импортировать экспорт по умолчанию:

import fooObj from '/.foo'; // {foo: f}

, затем вы можете получить доступ к своемуfoo функция:

fooObj.foo(); // Hello

Или вы можете использовать Object destructuring, если объект содержит несколько свойств:

import fooObj from '/.foo'; // {foo: f, bar: f}

const { foo, bar } = fooObj;

foo();
bar();

Вы также можете экспортировать foowithtout {}:

const foo = () => {
    console.log("Hello!");
}

export default foo;

Затем импортируйте его так:

import foo from './foo';

foo(); // Hello

Или вы можете использовать именованный экспорт:

export const foo = () => {
    console.log("Hello!");
}

, затем:

import {foo} from './foo';

foo(); // Hello
1 голос
/ 24 июня 2019

Попробуйте экспортировать его так:

const foo = () => {
    console.log("Hello!");
}

export default foo;

Это сделает foo экспортом по умолчанию из этого файла.Если вы хотите экспортировать несколько файлов, вы можете сделать это.

export const foo = () => {
    console.log("Hello!");
}

export const bar = () => {
    console.log("Hello!");
}

Разница в том, что при импорте вы можете импортировать первый (экспорт по умолчанию) с любым именем, в то время как второй должен быть точнымимя, с которым вы экспортировали его.например, import {foo, bar} from 'path/path'

0 голосов
/ 25 июня 2019

Я наконец нашел решение, которое искал!

// foobar.js
const foo = () => {
    console.log("Hello FOO!");
}

const bar = () => {
    console.log("Hello BAR!");
}

export default {foo, bar}

//

index.js

import foobar from "./foobar"

const {foo, bar} = foobar

foo();
bar();

Спасибо за вашу помощь! Другие ответы и комментарии дали мне понять, что я делаю не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...