首页 > 解决方案 > ES6 导出全局符号

问题描述

我正在定义一个我拥有全局资源的文件

import winston from 'winston';

const LOGGER_KEY = Symbol.for('loggerKey');

const globalSymbols = Object.getOwnPropertySymbols(global);
const hasLogger = (globalSymbols.indexOf(LOGGER_KEY) > -1);

if (!hasLogger) {
  const formatter = winston.format.combine(
    winston.format.colorize(),
    winston.format.timestamp(),
    winston.format.align(),
    winston.format.printf(
      info => `${info.timestamp} ${info.level}: ${info.message}`,
    ),
  );

  const transportConsole = new (winston.transports.Console)({
    format: formatter,
    level: 'info',
  });

  const logger = winston.createLogger({
    transports: [
      transportConsole,
    ],
  });

  global[LOGGER_KEY] = logger;
};

export {
  global[LOGGER_KEY] as logger
}

}

在 ES5 中,我曾经像这样导出并且它有效

module.exports = {
  logger: global[LOGGER_KEY],
}

但如果这在 ES6 中是可能的,我不这样做

标签: ecmascript-6

解决方案


你不能用 ES6 那样做,但是通过首先将 object 属性分配给一个变量可以很容易地解决这个问题:

const logger = global[LOGGER_KEY];
export {logger}

推荐阅读