如何在 Rollup 捆绑的 Sapper 应用程序中使用 Winston 进行日志记录?

Mar*_*tin 6 winston rollupjs sapper

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

\n\n

启动使用 Rollup 的新 Sapper 项目:

\n\n
npx degit "sveltejs/sapper-template#rollup" my-app\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
npx degit "sveltejs/sapper-template#rollup" my-app\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
import { createLogger, transports, format } from \'winston\';\n\nexport function createLabeledLogger(label) {\n  return createLogger({\n    level: \'debug\',\n    transports: [new transports.Console()],\n    format: format.combine(\n      format.label({ label: label, message: true }),\n      format.splat(),\n      format.padLevels(),\n      format.simple(),\n    )\n  });\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这就像一个魅力:

\n\n
\xe2\x9c\x94 service worker (16ms)\ndebug:    [posts-server] Created 5 posts for client.\n> Listening on http://localhost:5001\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,我一直在努力让该记录器在浏览器中工作。

\n\n

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

\n\n
import { createLabeledLogger } from \'../../_logging\';\nconst logger = createLabeledLogger(\'posts-server\');\n\nconst posts = [\n// ...\n];\n\nposts.forEach(post => {\n// ...\n});\n\nlogger.debug(`Created ${posts.length} posts for client.`)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这导致了以下错误:

\n\n
\xe2\x9c\x97 client\nUnexpected token (Note that you need @rollup/plugin-json to import JSON files)\n1: {\n2:   "_from": "winston",\n            ^\n3:   "_id": "winston@3.2.1",\n4:   "_inBundle": false,\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以,我通过安装了建议的插件

\n\n
npm install --save-dev @rollup/plugin-json\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

虽然这解决了上述“JSON”问题,但它会带来新的麻烦:

\n\n
\'util\' is imported by node_modules/winston/dist/winston/common.js, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n\'os\' is imported by node_modules/winston/dist/winston/exception-handler.js, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n\'os\' is imported by node_modules/winston/dist/winston/rejection-handler.js, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n\'util\' is imported by util?commonjs-external, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n\'os\' is imported by os?commonjs-external, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n\'os\' is imported by node_modules/winston/dist/winston/transports/file.js, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n\'os\' is imported by node_modules/winston/dist/winston/transports/console.js, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n\'os\' is imported by node_modules/winston/dist/winston/transports/stream.js, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n\'util\' is imported by node_modules/winston-transport/dist/index.js, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n\'path\' is imported by node_modules/winston/dist/winston/transports/file.js, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n\'zlib\' is imported by node_modules/winston/dist/winston/transports/file.js, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n\'fs\' is imported by node_modules/winston/dist/winston/transports/file.js, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n\'https\' is imported by node_modules/winston/dist/winston/transports/http.js, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n\'http\' is imported by node_modules/winston/dist/winston/transports/http.js, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n[...]\n
Run Code Online (Sandbox Code Playgroud)\n\n

基于这个答案,我安装了它rollup-plugin-node-builtins,并将其添加到rollup.config.js类似于 JSON 插件(import builtins from \'rollup-plugin-node-builtins\';builtins())。

\n\n

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

\n\n
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\npreferring 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\npreferring 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\npreferring 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\npreferring 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\n
Run Code Online (Sandbox Code Playgroud)\n\n

好的,所以我设置preferBuiltinsfalse. 新的麻烦又出现了:

\n\n
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\nCircular 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\nCircular 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\nCircular 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\nCircular 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\nCircular 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\nCircular 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\nCircular 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\nCircular 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\nCircular 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\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,我按照此评论中的说明进行操作,并rollup.config.js相应地调整了我的文件。

\n\n

又出现了一个新问题:

\n\n
Could not resolve \'./stream/duplex.js\' from node_modules/rollup-plugin-node-builtins/src/es6/stream.js\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

这会导致类似的问题:

\n\n
Could not resolve \'./stream/writable.js\' from node_modules/rollup-plugin-node-builtins/src/es6/stream.js\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n

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

\n\n
debug:    [posts-page] Obtained 5 posts from server.\n
Run Code Online (Sandbox Code Playgroud)\n\n

6月2日更新

\n\n

您可以在 GitHub Gist 中找到完整的 rollup.config.js 文件

\n\n

请注意,它既不能与preferBuiltinsset to一起使用true,也不能与 set to 一起使用false

\n\n

6月3日更新

\n\n

缓慢下降到(开发)地狱的内部圈子仍在继续:

\n\n

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

\n\n
\xe2\x9d\xaf la node_modules/rollup-plugin-node-builtins/src/es6/stream\nlrwxr-xr-x  1 mburger  wheel    15B Jun  3 12:45 node_modules/rollup-plugin-node-builtins/src/es6/stream -> readable-stream\n
Run Code Online (Sandbox Code Playgroud)\n\n

再次,一个不同的问题浮出水面:

\n\n
\xe2\x80\xa2 client\n\'stream/writable\' is imported by stream/writable?commonjs-external, but could not be resolved \xe2\x80\x93 treating it as an external dependency\n\'stream/writable\' is imported by node_modules/winston-transport/dist/index.js, but could not be resolved \xe2\x80\x93 treating it as an external dependency\nCircular 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\nCircular 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\n
Run Code Online (Sandbox Code Playgroud)\n