javascript - export default { foo, bar } 在带有 babel 的 node.js 中不起作用

标签 javascript node.js ecmascript-6 babeljs

我无法让 export default { multiple, functions } 工作。

这是我的设置:

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 fooimport foo 没有花括号 {foo},它会执行并且我得到 你好!打印到终端。

我做错了什么?

最佳答案

您使用了默认导出并尝试使用命名导入语法访问它,这是不可能的,因此您需要首先导入默认导出:

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();

您还可以在不使用 {} 的情况下导出 foo:

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

关于javascript - export default { foo, bar } 在带有 babel 的 node.js 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56738057/

相关文章:

node.js - 如何为房间中的所有客户端更新套接字对象? (socket.io)

mysql - 使用 NodeJS 插入 MySQL 日期

Node.js 和 socket.on 数据

javascript - 当函数在构造函数中绑定(bind)时如何在 ES6 React 中向事件处理程序添加参数

javascript - ES6 React 类构造函数之外的箭头函数的行为

javascript - AngularJS:使用 $http.get 检索数据并使其可用

javascript - UI 路由器从子节点访问父状态

javascript - 你如何做出部分 react

javascript - GraphQL 无法解析嵌套对象属性

javascript - 使用映射使用属性值作为属性键