我正在尝试使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.js
和import 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