【问题标题】:import `prom` from `prom-client` module missing but it's installed. How can I `import prom-client` accordingly?从 `prom-client` 模块导入 `prom` 缺失但已安装。我怎样才能相应地`import prom-client`?
【发布时间】:2020-07-22 23:33:07
【问题描述】:

我正在将两个旧的 Javascript 服务重构为 Typescript。我已经相应地更新了所有 NPM 依赖项,那些已弃用的已被其他包替换或已完全删除。现在我遇到了以下问题;

当我安装包prom-client 并使用import prom from 'prom-client' 时,找不到模块。该包包含一个index.d.ts 类型文件。如果我在node_modules/@types 中手动添加文件夹prom-client,则可以使用 import 语句找到该模块。

  • 我知道我可以使用 require(),但我使用 import 语法 到处都是,所以我宁愿不使用 require()

  • 没有 @types/prom-client 包,例如 @types/express.

  • 使用 NodeJS 12.16.1 和 es2020
  • import * as prom from 'prom-client' 之类的语法不起作用。
  • 我尝试重新安装所有软件包几次都没有结果。
  • 在代码沙箱上 import prom from 'prom-client' 语句 确实有效。但我看不出有什么区别。

我该如何import prom-client 相应地?

【问题讨论】:

    标签: node.js typescript types import node-modules


    【解决方案1】:

    在你的情况下,这就足够了

    import { register } from "prom-client";
    import http from "http";
    import express from "express";
    //create a server object:
    http
      .createServer(function(req, res) {
        res.write("Hello World!"); //write a response to the client
        res.end(); //end the response
      })
      .listen(8080); //the server object listens on port 8080
    
    const app = express();
    
    app.get("/prom-test", function(req: express.Request, res: express.Response) {
      res.send(register.metrics());
    });
    

    【讨论】:

    • 您的解决方案有效。我没有考虑从包中导入constantsclasses。然而,它仍然提出了另一个问题。为什么我不能整体导入prom-client?喜欢这个例子吗?为什么不从 node_modules/prom-client/index.d.ts 获取类型文件?我在这里缺少配置吗?你能详细说明一下吗?谢谢你的回答!
    • 也可以。试试import * as prom from "prom-client";prom.collectDefaultMetrics();,在我的环境中一切正常——没有任何问题。
    • 我发现我的tsconfig.ts 文件中有一个愚蠢的错误。这就是为什么有些进口不起作用。不仅 prom-client 不起作用。配置错误是"module": "es2020",可以设置为“none”、“commonjs”、“amd”、“system”、“umd”、“es2015”、“es2020”或“ESNext”。当切换回 commonjs 时,每个导入都再次正常工作。
    猜你喜欢
    • 2022-12-26
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 2019-03-02
    • 1970-01-01
    • 2014-01-23
    相关资源
    最近更新 更多