Node.js模块中导出函数的语法是什么?

8
在Node.js中,从模块导出函数的语法是什么?
module.exports = functionName;
function foo() {}
function bar() {}

export foo; // I don't think this is valid?
export default bar;

1
可能是JavaScript中的“export default”是什么?的重复问题。 - Erazihel
5
绝对不是重复的。这是关于当前Node版本中特性支持的问题。为什么会有人投反对票? - salezica
4个回答

18
在Node中,你可以使用特殊对象module.exports来导出内容。例如:
这将导出两个函数:
module.exports = { foo, bar };

它们可以用作:

const { foo, bar } = require('./module/path');

要将这些函数之一导出为顶层对象,你可以使用:

module.exports = foo;
module.exports.bar = bar;

可以用作:

const foo = require('./module/path');

而且:

const { bar } = require('./module/path');
或者:
const foo = require('./module/path');
const { bar } = foo;
或者:
const foo = require('./module/path');
const bar = foo.bar;

这是Node.js模块中导出函数的语法,正如问题所问 - 也就是原生支持Node的语法。Node不支持import/export语法(请参见此处了解原因)。如下面slezica在评论中提到的,您可以使用转换器(例如Babel)将import/export关键字转换为Node可理解的语法。

请参阅以下答案以获取更多信息:


啊,谢谢。那么同样的东西在ES2015模块语法中是什么? - Ben Aston
1
这是目前唯一的方法,直到Node开始支持import/export ES6语法,但它目前还不支持。您也可以使用Babel,安装babel-clibabel-preset-latest作为开发依赖项,然后预编译您的JavaScript或运行babel-node。我在所有项目中都这样做。 - salezica

3
export function foo(){...};

或者,如果函数之前已经声明过:
export {foo};

Reference: MDN export


3
为了同时暴露foo和bar函数:
module.exports = {
   foo: function() {},
   bar: function() {}
}

2
您也可以使用更简短的形式来完成这个操作。
// people.js
function Foo() {
  // ...
}

function Bar() {
  // ...
}

module.exports = { Foo, Bar}

导入:

// index.js
const { Foo, Bar } = require('./people.js');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接