【问题标题】:node.js with ES6 modules, Typescript and Winston: "error TS2307: Cannot find module 'winston'"带有 ES6 模块、Typescript 和 Winston 的 node.js:“错误 TS2307:找不到模块‘winston’”
【发布时间】:2020-04-07 06:01:35
【问题描述】:

我试图让 Winston 在 node.js (v13.11.0) 中工作,启用 ES6 模块和打字稿,但到目前为止没有成功:

我的代码是(src/lib/logging.ts):

import * as logger from 'winston';
// ...

首先我做到了:

$ npm install --save winston

已按预期将其添加到dependencies 部分:

"dependencies": {
    ...
    "winston": "^3.2.1",
    ...
}

但是当我启动应用程序时,我收到以下错误

src/lib/logging.ts:2:25 - 错误 TS2307:找不到模块“winston”。

2 import * as logger from 'winston';

然后我尝试了其他一些依赖项的工作:

$ npm install --save-dev @types/winston
npm WARN deprecated @types/winston@2.4.4: This is a stub types definition. 
winston provides its own type definitions, so you do not need this installed.

这为devDependencies添加了一个版本,看起来没什么用:

"devDependencies": {
    ...
    "@types/winston": "^2.4.4",
    ...
}

当我启动应用程序时,我得到了上面列出的同样的错误

【问题讨论】:

  • 因为您正在运行节点,请尝试按如下方式进行导入 const winston = require('winston');
  • 谢谢,这行得通,但考虑到我正在使用 ES6 模块,这似乎是一个 hack。
  • 太好了,我会把它添加到下面的答案中,以防其他人需要它,他/她可以正确看到它

标签: node.js typescript express winston


【解决方案1】:

@HadiMir 提到的解决方案将起作用。但是,由于您希望它与 ES6 一起使用,这里有一个示例 - Morgan logging with ESM

您还需要在 package.json 中将“类型”作为模块提及,以提及您将使用 ESM 导入样式。如果您不希望这样做,替代方法是使用扩展名为“.mjs”的文件。

"type": "module",

【讨论】:

    【解决方案2】:

    由于您在 Node 中工作,因此要导入任何模块/包,您必须使用以下语法

    const winston = require('winston');

    之后,您可以调用任何方法或使用 Winston 或您导入的任何其他模块提供的任何属性

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-10
      • 2016-12-31
      • 1970-01-01
      • 2017-03-18
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      相关资源
      最近更新 更多