首页 > 解决方案 > 带有 ES6 模块、Typescript 和 Winston 的 node.js:“错误 TS2307:找不到模块‘winston’”

问题描述

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

我的代码是(在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 从'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",
    ...
}

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

标签: node.jstypescriptexpresswinston

解决方案


@HadiMir 提到的解决方案将起作用。但是,由于您希望它与 ES6 一起使用,因此这里有一个示例 - Morgan 使用 ESM 进行日志记录

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

"type": "module",


推荐阅读