typescript - "Denne syntaksen krever en importert hjelpefunksjon, men modul 'tslib' kan ikke bli funnet" med ES2015-moduler
Jeg har et demoprosjekt jeg er i ferd med å kompilere til ES5 med ES2015-moduler aktivert og tslib brukt for eksterne TS-hjelpere:
package.json
{
"name": "foo",
"scripts": {
"build": "tsc"
},
"dependencies": {
"tslib": "^1.9.3"
},
"devDependencies": {
"typescript": "^3.1.3"
}
}
tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "es2015",
"outDir": "./lib",
"rootDir": "./src",
"importHelpers": true,
"strict": true,
"experimentalDecorators": true
}
}
src/index.ts
function a(target: any) {
return target;
}
@a
export class Foo {}
Dette resulterer i en feil:
src/index.ts:5:1 - feil TS2354: Denne syntaksen krever en importert hjelpefunksjon, men modulen 'tslib' kan ikke finnes.
Mens lib/index.js er korrekt kompilert:
import * as tslib_1 from "tslib";
function a(target) {
return target;
}
var Foo = /** @class */ (function () {
function Foo() {
}
Foo = tslib_1.__decorate([
a
], Foo);
return Foo;
}());
export { Foo };
Hvordan kan dette problemet løses?
Svar #1
Problemet for meg var at redaktøren brukte en annen TypeScript-versjon enn prosjektet.
For å fikse det:
- Åpne kommandopalett (Cmd+Shift+P på Mac. Fokusert fil må være .ts eller .tsx, ellers vil ikke alternativet for å endre versjon vises)
- Velg "TypeScript: Velg TypeScript-versjon..."
Det viser VSCode sin TS-versjon og arbeidsområdets (prosjektets) versjon, velg den (Merk: dette forutsetter at du har
npm installet pakkene i arbeidsområdet)
Eller klikk på versjonsnummeret i bunnlinjen hvis det vises der:
Svar #2
Prøv noe som:
npm install tslib --save-dev
Eller, for å fikse nybegynnerfeil (som jeg nettopp gjorde):
npm i
Jeg mener, personlig før jeg logget av på fredag, kjørte jeg en git clean -fxd, men ingen npm i, så alle npm-pakkene manglet. Doh!
Svar #3
Legg til følgende linjer i tsconfig.json
"compilerOptions": {
//...rest parameters
"baseUrl": "./",
"paths": {
"tslib" : ["path/to/node_modules/tslib/tslib.d.ts"]
},
Svar #4
I mitt tilfelle løste det problemet å fjerne eller sette importHelpers-kompilatoralternativet til false.
{
"compilerOptions": {
...
"importHelpers": false, // Or remove this
...
}
}
Svar #5
I mitt tilfelle var tslib allerede installert, og jeg så denne feilen bare for én komponent mens alt annet fungerte fint - bygg og funksjonalitet. Jeg bare startet VSCode på nytt, og den forsvant. Så prøv det hvis feilen fortsatt er der etter at du har gjort det andre har foreslått.
Svar #6
Oppdaterte nettopp tslib til nyeste versjon, og problemet ble løst. Jeg hadde installert 1.9.3, og oppdaterte til 1.10.0.
Svar #7
Som referansen sier, er moduloppløsning satt til Node-modus kun for "modules": "commonjs", og er satt til klassisk modus for "modules": "es2015":
Det finnes to mulige strategier for moduloppløsning: Node og Classic. Du kan bruke --moduleResolution-flagget for å spesifisere moduloppløsningsstrategien. Hvis det ikke er spesifisert, er standard Classic for --module AMD | System | ES2015 eller Node ellers.
Siden klassisk modus ikke er klar over node_modules, kan ikke kompilatoren løse tslib-modulen.
moduleResolution bør settes eksplisitt for ES2015-moduler:
...
"module": "es2015",
"moduleResolution": "node",
...
Svar #8
Feilen min så ut til å være sporadisk, men sannsynligvis forårsaket av redigering av en fil i "node_modules"-mappen.
Jeg slettet
- "node_modules"-mappe
- «package-lock.json»-fil
Kjør ... "npm install"
Det fungerer nå.
MERK: Jeg prøvde å kjøre "npm install" før jeg slettet filene, og det løste ikke problemet.

