繁体   English   中英

如何让Winston与Webpack合作?

[英]How do I get Winston to work with Webpack?

我有一个使用node.js的电子应用程序。 我想使用Winston登录应用程序。 我已经将winston添加到我的package.json文件中,但是当我运行webpack的build命令时,我从winston中的colors.js依赖项中得到了一些警告。

'...the request of a dependency is an expression...'

然后它引用了winston和colors.js。 忽略警告不起作用,因为电子应用程序尝试从winston加载某些文件时出现异常。

我在SO和github网站上做了一些挖掘,他们说colors.js有一些webpack遇到问题的动态需求语句。 我还看到其他示例项目似乎已经启动并运行,而项目中没有任何问题。 有谁知道如何在电子应用中正确包含带有webpack的winston日志包?

这个问题有两个方面:

1)winston直接或间接依赖于color.js,因此一旦winston存在,依赖关系就会自动包含在内。 在它的一些旧版本中,它包含一个动态需求语句,这导致:

2)依赖项具有Webpack无法处理的动态require语句; 你可以配置webpack以便它可以忽略这个特定的情况,或者也可以将winston升级到更新的版本,因此color.js将在没有动态需求的变体中被选中(参见https://github.com/winstonjs/winston/)问题/ 984 )。

要告诉Webpack与动态需求相处,您需要告诉Webpack Winston是一个外部库。

这是我的webpack.config.js中的一个例子:

 externals: {
    'electron': 'require("electron")',
    'net': 'require("net")',
    'remote': 'require("remote")',
    'shell': 'require("shell")',
    'app': 'require("app")',
    'ipc': 'require("ipc")',
    'fs': 'require("fs")',
    'buffer': 'require("buffer")',
    'winston': 'require("winston")',
    'system': '{}',
    'file': '{}'
},

要使用电子在角度2应用程序中使用记录器,请创建一个logger.js文件,然后使用全局日志记录服务TypeScript文件(即logging.service.ts)将其包装。 logger.js文件使用所需的Winston配置设置创建记录器变量。

logger.js:

    var winston = require( 'winston' ),
    fs = require( 'fs' ),
    logDir = 'log', // Or read from a configuration
    env = process.env.NODE_ENV || 'development',
    logger;
​


     winston.setLevels( winston.config.npm.levels );
    winston.addColors( winston.config.npm.colors );

    if ( !fs.existsSync( logDir ) ) {
        // Create the directory if it does not exist
        fs.mkdirSync( logDir );
    }
    logger = new( winston.Logger )( {
        transports: [
            new winston.transports.Console( {
                level: 'warn', // Only write logs of warn level or higher
                colorize: true
            } ),
            new winston.transports.File( {
                level: env === 'development' ? 'debug' : 'info',
                filename: logDir + '/logs.log',
                maxsize: 1024 * 1024 * 10 // 10MB
            } )
        ],
        exceptionHandlers: [
            new winston.transports.File( {
                filename: 'log/exceptions.log'
            } )
        ]
    } );
    ​
    module.exports = logger;

logging.service.ts:

export var LoggerService = require('./logger.js');

现在,日志服务可在整个应用程序中使用。

例:

import {LoggerService} from '<path>';
...    
LoggerService.log('info', 'Login successful for user ' + this.user.email);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM