Webpack이 colors.js의 dynamic require 문을 처리 할 수 없다는 것이 문제입니다. 따라서 Winston이 외부 라이브러리임을 Webpack에 알려야합니다.
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 파일을 만든 다음 글로벌 로깅 서비스를 포장 : 여기
내 webpack.config.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);
내가 웹팩 자체를 대신 각-CLI를 사용하고있는 동안이 방법을 사용할 수없고 웹팩 설정에 액세스하지 않았습니다. – invisible
@invisible webpack.conf.js 파일을 생성하는 ng eject를 수행하여 webpack을 극복 할 수 있습니다. 위의 구성으로이 작업을 수행하면 logger.service.ts 파일에서 로거를 찾을 수 없어 webpack에서 컴파일 오류가 발생합니다. – patz