node.js med ES6-moduler, Typescript och Winston: "error TS2307: Kan inte hitta modulen 'winston'"


Jag försöker få Winston att fungera i node.js (v13.11.0) med ES6-moduler aktiverade och TypeScript, men utan framgång hittills:

Min kod finns i (src/lib/logging.ts):

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

Först gjorde jag:

npm install --save winston

Vilket har lagt till det i dependencies-sektionen som förväntat:

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

Men när jag startar appen får jag följande fel:

src/lib/logging.ts:2:25 - fel TS2307: Kan inte hitta modulen 'winston'.

2 importera * som logger från 'winston';

Sedan försökte jag det som för några andra beroenden fungerade:

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

Detta lade till en äldre version till devDependencies, vilket verkar meningslöst:

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

Och när jag startar applikationen får jag samma fel som anges ovan.

Svar #1

Lösningen som nämns av @HadiMir kommer att fungera. Eftersom du dock vill att det ska fungera med ES6, här är ett exempel - Morgan-loggning med ESM.

Du behöver också ange "type" som modul i din package.json för att ange att du kommer att använda ESM-importstil. Om du inte vill detta, skulle alternativet vara att använda en fil med ".mjs"-tillägget.

"type": "module",