Il problema è che Webpack non è in grado di gestire l'istruzione require dinamico in colors.js. Quindi, devi dire a Webpack che Winston è una libreria esterna.
Ecco un esempio dal mio 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': '{}'
},
Per rendere il registratore disponibile in una angolare 2 applicazione utilizzando elettroni, creare un file logger.js e poi avvolgerlo con un servizio di registrazione globale File TypeScript (es. Logging.service.ts). Il file logger.js crea la variabile del logger con le impostazioni di configurazione di Winston desiderate.
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');
Ora il servizio di registrazione è disponibile per l'uso in tutta l'applicazione.
Esempio:
import {LoggerService} from '<path>';
...
LoggerService.log('info', 'Login successful for user ' + this.user.email);
non posso usare questo approccio mentre sto utilizzando angolare cli anziché webpack stessa e non hanno accesso a webpack config. – invisible
@invisibile è possibile superare il webpack eseguendo un espulsione ng che genererà il file webpack.conf.js. Quando ho fatto questo con la configurazione di cui sopra, webpack ha dato errori di compilazione in quanto non era in grado di trovare il logger nel file logger.service.ts. – patz