Node.js 我是否可以在不更改其导出方式的情况下向module.exports添加第二个函数导出';这叫什么?

Node.js 我是否可以在不更改其导出方式的情况下向module.exports添加第二个函数导出';这叫什么?,node.js,Node.js,我有一个日志模块,我在我的许多项目中使用它,它通常导出一个Winston logger,所以我所做的就是定义一个logger及其传输,然后导出它: module.exports = logger; 使用const logger=require('mylogger.js')导入时,我会使用内置的各种级别(logger.info logger.debug等) 我现在决定创建第二个日志函数,将日志写入另一个文件,因此我需要创建并导出一个新的传输。问题是,如果我切换到module.exports={l

我有一个日志模块,我在我的许多项目中使用它,它通常导出一个Winston logger,所以我所做的就是定义一个logger及其传输,然后导出它:

module.exports = logger;
使用
const logger=require('mylogger.js')
导入时,我会使用内置的各种级别(
logger.info logger.debug
等)

我现在决定创建第二个日志函数,将日志写入另一个文件,因此我需要创建并导出一个新的传输。问题是,如果我切换到
module.exports={logger,mynewlogger}
,这将改变我导入和调用函数的方式,我在很多地方都有这样的功能


除了创建第二个文件并同时导入这两个文件外,是否还有其他方法可以添加第二个导出,而无需在其他地方更改代码?

这是一个新模块,可以同时重新导出这两个文件:

logger-and-mynewlogger.js

或单独的模块:

mynewlogger.js

或使用现有函数作为模块对象:

logger.mynewlogger = ...

module.exports = logger;

前两个选项更可取,因为它们产生了设计合理的模块,而最后一个选项是快速而肮脏的修复。

是的,您可以为单个导出的记录器定义多个传输。创建Winston日志时,“transports”属性是一个数组,允许您定义多个输出

这里有一个例子,我有两个传输。第一台是控制台,第二台是每日旋转日志

const winston = require('winston');
const Rotate = require('winston-daily-rotate-file');    
const tsFormat = () => (new Date()).toLocaleTimeString();

const logger = new (winston.Logger)({
    transports: [
        // colorize the output to the console
        new (winston.transports.Console)({
            timestamp: tsFormat,
            colorize: true,
            level: 'info',
        }),
        new (Rotate)({
            filename: `${logDir}/${logName}-app.log`,
            timestamp: tsFormat,
            datePattern: 'YYYY-MM-DD',
            prepend: true,
            level: env === 'development' ? 'verbose' : 'info',
        }),
    ],
});

module.exports = logger;

谢谢正如我所想的,我将把它分开,因为我多次调用记录器,而上述内容完全有效,您可以将Winston配置为具有多个传输,那么,你不能在Winston设置中创建额外的传输,而不必在其他地方更改任何代码吗?@ChrisAdams我可以生成第二个传输并从同一个导出函数调用它吗?
logger.mynewlogger = ...

module.exports = logger;
const winston = require('winston');
const Rotate = require('winston-daily-rotate-file');    
const tsFormat = () => (new Date()).toLocaleTimeString();

const logger = new (winston.Logger)({
    transports: [
        // colorize the output to the console
        new (winston.transports.Console)({
            timestamp: tsFormat,
            colorize: true,
            level: 'info',
        }),
        new (Rotate)({
            filename: `${logDir}/${logName}-app.log`,
            timestamp: tsFormat,
            datePattern: 'YYYY-MM-DD',
            prepend: true,
            level: env === 'development' ? 'verbose' : 'info',
        }),
    ],
});

module.exports = logger;