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",