【发布时间】:2017-12-30 12:17:53
【问题描述】:
我对 Web 前端开发非常陌生,在加载 kafka 客户端库时,我有点迷失在 JS/Node/Angular 世界中。我考虑了两个访问我的 kafka 集群的选项:node-rdkafka 和 kafka-node。但是,我不认为我的问题出在他们身上,这似乎是缺乏对 JS 和/或 Node 或其他什么的知识。我将解释实际问题并在最后回到那个概念。
这是我第一次涉足 JS/Node/Angular 世界,所以我对它的了解仍然非常有限,请多多包涵。我开始使用 angular cli (1.2.3) 来构建我的组件、服务等。在我尝试加载 node-rdkafka 之前一切都很好:自述文件指示我使用“require”而不是“import”,但事实并非如此找到了。
通过一些研究,我设法通过将 typings.d.ts 文件更改为如下方式来使“require”正常工作(我认为):
declare var module: NodeModule;
interface NodeModule {
id: string;
}
declare var require: NodeRequire;
还有 tsconfig.app.json 包括这个:
"types": [
"node"
]
在 compilerOptions 中。
应用程序编译并且“const kafka = require('node-rdkafka')”开始加载库。但是,它的依赖项之一节点绑定存在一个错误。我发现已经有一个修复,所以我将它的版本更改为最新的提交,只是为了遇到一个已经报告但从未回答的新错误:
https://github.com/TooTallNate/node-bindings/issues/34
我还收到以下警告:
WARNING in ./~/bindings/bindings.js
81:22-40 Critical dependency: the request of a dependency is an expression
WARNING in ./~/bindings/bindings.js
81:43-53 Critical dependency: the request of a dependency is an expression
我尝试查看节点绑定代码,发现它需要“fs”和“路径”,而在我的情况下,这些需要返回“未定义”。由于现在有人使用 node-rdkafka 没有问题,我认为问题可能出在我的环境上,但我在这方面浪费了数小时而没有成功。
然后我尝试使用 kafka-node 代替,但也遇到了问题。首先,它是依赖于“应该”的“BufferMaker”依赖项,它不是由 npm 安装的,我不知道为什么。我使用 --save-dev 手动安装了 npm 所需的版本,然后编译了我自己的代码,但出现了以下警告:
WARNING in ./~/optional/optional.js
6:11-26 Critical dependency: the request of a dependency is an expression
WARNING in ./~/node-zookeeper-client/lib/jute/index.js
771:20-47 Critical dependency: the request of a dependency is an expression
现在我在运行时收到这个错误,互联网上似乎没有其他人有:
Uncaught Error: Cannot find module "."
at webpackMissingModule (index.js:771)
at Object.<anonymous> (index.js:771)
at Object.../../../../node-zookeeper-client/lib/jute/index.js (index.js:781)
at __webpack_require__ (bootstrap 8ee5092…:54)
at Object.<anonymous> (index.js:24)
at Object.../../../../node-zookeeper-client/index.js (index.js:917)
at __webpack_require__ (bootstrap 8ee5092…:54)
at Object.<anonymous> (zookeeper.js:3)
at Object.../../../../kafka-node/lib/zookeeper.js (zookeeper.js:474)
at __webpack_require__ (bootstrap 8ee5092…:54)
在我看来不可能每个人都有这些问题,因为只有少数人抱怨 node-rdkafka 问题,而我找不到其他人遇到 kafka-node 问题。
所以,除了需要使用 JS 访问 kafka 集群的解决方案之外,我真正的问题是:Angular 4 或 Angular CLI 与使用 require 的代码之间是否存在不兼容?我是否将遗留代码与当前代码或类似的东西混合在一起?
任何指向解决方案的指针都将受到欢迎。提前致谢。
【问题讨论】:
-
嘿,卡洛斯,你运气好吗?使用 kafka-node 与您完全相同。有什么好的线索吗?干杯!
-
嗨!我刚刚用我的最新发现回答了这个问题。我很快就会尝试 kafka-rest 路线,我找不到更好(而且仍然便宜)的替代方案。让我知道你的决定!
标签: javascript node.js angular apache-kafka angular-cli