如何在汇总捆绑的Sapper应用中使用Winston进行日志记录?

时间:2020-05-31 14:29:56

标签: winston rollupjs sapper

我正在尝试使Winston日志库与我的Sapper应用程序一起使用。该Sapper应用程序将Rollup用作模块捆绑程序。为了实现我的应用程序,我基本上遵循以下步骤:

启动使用汇总的新Sapper项目:

npx degit "sveltejs/sapper-template#rollup" my-app

通过npm install winston安装winston并将自定义记录器工厂添加到文件src/_logging.js中:

import { createLogger, transports, format } from 'winston';

export function createLabeledLogger(label) {
  return createLogger({
    level: 'debug',
    transports: [new transports.Console()],
    format: format.combine(
      format.label({ label: label, message: true }),
      format.splat(),
      format.padLevels(),
      format.simple(),
    )
  });

}

通过工厂获取记录器,并在服务器路线src/routes/blog/_posts.js中使用记录器:

import { createLabeledLogger } from '../../_logging';
const logger = createLabeledLogger('posts-server');

const posts = [
// ...
];

posts.forEach(post => {
// ...
});

logger.debug(`Created ${posts.length} posts for client.`)

这就像一种魅力:

✔ service worker (16ms)
debug:    [posts-server] Created 5 posts for client.
> Listening on http://localhost:5001

但是,我一直在努力使记录器在浏览器中工作。

为此,我在 client 路由src/routes/blog/index.svelte中引入了记录器:

<script>
    import { onMount } from 'svelte';
    import { createLabeledLogger } from '../../_logging';
    const logger = createLabeledLogger('posts-page');

    export let posts;

    onMount(() => {
        // console.log(`Obtained ${posts.length} posts from server.`)
        logger.debug(`Obtained ${posts.length} posts from server.`)
    });

</script>

这导致了以下错误:

✗ client
Unexpected token (Note that you need @rollup/plugin-json to import JSON files)
1: {
2:   "_from": "winston",
            ^
3:   "_id": "winston@3.2.1",
4:   "_inBundle": false,

所以,我通过

安装了建议的插件
npm install --save-dev @rollup/plugin-json

并修改了rollup.config.js,以导入插件(import json from '@rollup/plugin-json';)并在客户端捆绑包(json()中使用它。

虽然此问题已在“ JSON”问题上得到解决,但会引起新的麻烦:

'util' is imported by node_modules/winston/dist/winston/common.js, but could not be resolved – treating it as an external dependency
'os' is imported by node_modules/winston/dist/winston/exception-handler.js, but could not be resolved – treating it as an external dependency
'os' is imported by node_modules/winston/dist/winston/rejection-handler.js, but could not be resolved – treating it as an external dependency
'util' is imported by util?commonjs-external, but could not be resolved – treating it as an external dependency
'os' is imported by os?commonjs-external, but could not be resolved – treating it as an external dependency
'os' is imported by node_modules/winston/dist/winston/transports/file.js, but could not be resolved – treating it as an external dependency
'os' is imported by node_modules/winston/dist/winston/transports/console.js, but could not be resolved – treating it as an external dependency
'os' is imported by node_modules/winston/dist/winston/transports/stream.js, but could not be resolved – treating it as an external dependency
'util' is imported by node_modules/winston-transport/dist/index.js, but could not be resolved – treating it as an external dependency
'path' is imported by node_modules/winston/dist/winston/transports/file.js, but could not be resolved – treating it as an external dependency
'zlib' is imported by node_modules/winston/dist/winston/transports/file.js, but could not be resolved – treating it as an external dependency
'fs' is imported by node_modules/winston/dist/winston/transports/file.js, but could not be resolved – treating it as an external dependency
'https' is imported by node_modules/winston/dist/winston/transports/http.js, but could not be resolved – treating it as an external dependency
'http' is imported by node_modules/winston/dist/winston/transports/http.js, but could not be resolved – treating it as an external dependency
[...]

基于this answer,我安装了rollup-plugin-node-builtins,然后类似于JSON插件(rollup.config.jsimport builtins from 'rollup-plugin-node-builtins';)将其添加到builtins()

这再次解决了上述“无法解决”的问题-并再次引起了新的麻烦:

preferring built-in module 'string_decoder' over local alternative at '/private/tmp/mburger/my-app/node_modules/string_decoder/lib/string_decoder.js', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning
preferring built-in module 'string_decoder' over local alternative at '/private/tmp/mburger/my-app/node_modules/string_decoder/lib/string_decoder.js', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning
preferring built-in module 'string_decoder' over local alternative at '/private/tmp/mburger/my-app/node_modules/string_decoder/lib/string_decoder.js', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning
preferring built-in module 'string_decoder' over local alternative at '/private/tmp/mburger/my-app/node_modules/string_decoder/lib/string_decoder.js', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning
preferring built-in module 'string_decoder' over local alternative at '/private/tmp/mburger/my-app/node_modules/string_decoder/lib/string_decoder.js', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning

好的,所以我将preferBuiltins设置为false。出现新的麻烦:

Circular dependency: node_modules/winston-transport/node_modules/readable-stream/lib/_stream_duplex.js -> node_modules/winston-transport/node_modules/readable-stream/lib/_stream_readable.js -> node_modules/winston-transport/node_modules/readable-stream/lib/_stream_duplex.js
Circular dependency: node_modules/winston-transport/node_modules/readable-stream/lib/_stream_duplex.js -> node_modules/winston-transport/node_modules/readable-stream/lib/_stream_readable.js -> /private/tmp/mburger/my-app/node_modules/winston-transport/node_modules/readable-stream/lib/_stream_duplex.js?commonjs-proxy -> node_modules/winston-transport/node_modules/readable-stream/lib/_stream_duplex.js
Circular dependency: node_modules/winston-transport/node_modules/readable-stream/lib/_stream_writable.js -> node_modules/winston-transport/node_modules/readable-stream/lib/_stream_duplex.js -> node_modules/winston-transport/node_modules/readable-stream/lib/_stream_writable.js
Circular dependency: node_modules/winston-transport/node_modules/readable-stream/lib/_stream_writable.js -> node_modules/winston-transport/node_modules/readable-stream/lib/_stream_duplex.js -> /private/tmp/mburger/my-app/node_modules/winston-transport/node_modules/readable-stream/lib/_stream_writable.js?commonjs-proxy -> node_modules/winston-transport/node_modules/readable-stream/lib/_stream_writable.js
Circular dependency: node_modules/rollup-plugin-node-builtins/src/es6/readable-stream/duplex.js -> node_modules/rollup-plugin-node-builtins/src/es6/readable-stream/readable.js -> node_modules/rollup-plugin-node-builtins/src/es6/readable-stream/duplex.js
Circular dependency: node_modules/rollup-plugin-node-builtins/src/es6/readable-stream/duplex.js -> node_modules/rollup-plugin-node-builtins/src/es6/readable-stream/writable.js -> node_modules/rollup-plugin-node-builtins/src/es6/readable-stream/duplex.js
Circular dependency: node_modules/readable-stream/lib/_stream_readable.js -> node_modules/readable-stream/lib/_stream_duplex.js -> node_modules/readable-stream/lib/_stream_readable.js
Circular dependency: node_modules/readable-stream/lib/_stream_duplex.js -> node_modules/readable-stream/lib/_stream_writable.js -> node_modules/readable-stream/lib/_stream_duplex.js
Circular dependency: node_modules/readable-stream/lib/_stream_duplex.js -> node_modules/readable-stream/lib/_stream_writable.js -> /private/tmp/mburger/my-app/node_modules/readable-stream/lib/_stream_duplex.js?commonjs-proxy -> node_modules/readable-stream/lib/_stream_duplex.js
Circular dependency: node_modules/readable-stream/lib/_stream_readable.js -> node_modules/readable-stream/lib/_stream_duplex.js -> /private/tmp/mburger/my-app/node_modules/readable-stream/lib/_stream_readable.js?commonjs-proxy -> node_modules/readable-stream/lib/_stream_readable.js

现在,我按照this comment上的说明进行了操作,并相应地修改了rollup.config.js文件。

同样,发生新的问题:

Could not resolve './stream/duplex.js' from node_modules/rollup-plugin-node-builtins/src/es6/stream.js

好吧,按照this README上的说明,我安装了rollup-plugin-node-globals并将其添加到我的rollup.config.js文件(import globals from 'rollup-plugin-node-globals';globals())中。

这会导致类似的问题:

Could not resolve './stream/writable.js' from node_modules/rollup-plugin-node-builtins/src/es6/stream.js

我研究了各种Stack Overflow条目,GitHub问题跟踪器和Google。

是否可以在将Rollup用作捆绑程序的Sapper应用中使用Winston?

顺便说一句,要成功地将Winston与Sapper应用程序的webpack版本一起使用,使其运行所需要做的就是将node: { fs: 'empty' },添加到webpack.config.js-正如Web Developer控制台中的输出所示:

debug:    [posts-page] Obtained 5 posts from server.

6月2日更新

您可以找到complete rollup.config.js file作为GitHub Gist。

请注意,将preferBuiltins设置为true或将false设置都无效。

6月3日更新

缓慢下降到(dev)地狱的内心循环:

根据ThomasHennes的建议,我添加了以下符号链接:

❯ la node_modules/rollup-plugin-node-builtins/src/es6/stream
lrwxr-xr-x  1 mburger  wheel    15B Jun  3 12:45 node_modules/rollup-plugin-node-builtins/src/es6/stream -> readable-stream

同样,另一个问题暴露出来:

• client
'stream/writable' is imported by stream/writable?commonjs-external, but could not be resolved – treating it as an external dependency
'stream/writable' is imported by node_modules/winston-transport/dist/index.js, but could not be resolved – treating it as an external dependency
Circular dependency: node_modules/rollup-plugin-node-builtins/src/es6/readable-stream/duplex.js -> node_modules/rollup-plugin-node-builtins/src/es6/readable-stream/readable.js -> node_modules/rollup-plugin-node-builtins/src/es6/readable-stream/duplex.js
Circular dependency: node_modules/rollup-plugin-node-builtins/src/es6/readable-stream/duplex.js -> node_modules/rollup-plugin-node-builtins/src/es6/readable-stream/writable.js -> node_modules/rollup-plugin-node-builtins/src/es6/readable-stream/duplex.js

0 个答案:

没有答案