从 ES6 模块导出单例 class 的优缺点

Pros and cons of exporting a singleton class from an ES6 module

我目前正在开发一个基于 node.js 和 Babel 的项目。

我有一个 userService.js 文件,它应该是一个单例文件,可以管理我想要与用户一起使用的所有内容,并保持用户的状态。

为什么要这样写这个模块:

class UserService { //methods //properties}
export default new UserService(); //so it is a singleton

并以这种方式导入:

import userService from 'userService';

而不是这样:

export function login() {} //other functions etc
export var user={}

并像这样导入:

import * as userService from 'userService';

仅仅是风格上的区别吗?

我明白了,例如只导入没有注销方法的登录是没有意义的,所以用所有方法导出 class 听起来不错,但另一种方法的优点是不必使用 "this"一直是关键字。

您可能希望将一组方法分组到一个文件中,但不一定要始终一起导入。例如,一个实用程序 class 可能会列出许多您希望根据需要一次导入一个的函数。

导出一个default,无论是class封装还是单个函数,都清楚了那个模块的主要意图是什么。您还可以组合默认导出和命名导出:

// user.js

export default class User {}
export function getUserInfo()


// ... other file ...

import User, {getUserInfo} from 'user.js'

const user = new User();
getUserInfo(user);

最终这取决于你如何expect/want使用你的模块。