typescript - "Ova sintaksa zahtijeva uvezeni pomoćni modul, ali modul 'tslib' ne može se pronaći" s ES2015 modulima
Imam demo projekt koji ću sastaviti u ES5 s omogućenim ES2015 modulima i korištenim tslib za vanjske TS pomoćnike:
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 {}
Ovo rezultira pogreškom:
src/index.ts:5:1 - pogreška TS2354: Ova sintaksa zahtijeva uvezeni pomoćni modul, ali modul 'tslib' nije pronađen.
Dok je lib/index.js ispravno preveden:
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 };
Kako se ovaj problem može riješiti?
Odgovor #1
Problem za mene bio je što je urednik koristio drugačiju verziju TypeScripta od one u projektu.
Da biste to popravili:
- Otvorite paletu naredbi (Cmd+Shift+P na Macu. Fokusirana datoteka mora biti .ts ili .tsx, inače se opcija za promjenu verzije neće prikazati)
- Odaberite "TypeScript: Odaberite verziju TypeScripta..."
Prikazuje TS verziju VSCode-a i verziju radnog prostora (projekta), odaberite onu (Napomena: ovo podrazumijeva da ste
npm installali pakete u radnom prostoru)
Ili kliknite na broj verzije na donjoj traci ako je tamo prikazan:
Odgovor #2
Pokušaj nešto poput:
npm install tslib --save-dev
Ili, da popravim početničku pogrešku (koju sam upravo napravio):
npm i
Mislim, osobno, prije nego što sam se odjavio u petak, napravio sam git clean -fxd, ali nisam pokrenuo npm i, pa su svi npm paketi nedostajali. Uf!
Odgovor #3
Dodajte sljedeće retke u tsconfig.json
"compilerOptions": {
//...rest parameters
"baseUrl": "./",
"paths": {
"tslib" : ["path/to/node_modules/tslib/tslib.d.ts"]
},
Odgovor #4
U mom slučaju uklanjanje ili postavljanje importHelpers opcije kompajlera na false riješilo je problem.
{
"compilerOptions": {
...
"importHelpers": false, // Or remove this
...
}
}
Odgovor #5
U mom slučaju, tslib je već bio instaliran i vidio sam ovu pogrešku samo za jedan komponent dok je sve ostalo radilo u redu - gradnja i funkcionalnost. Samo sam ponovno pokrenuo svoj VSCode i pogreška je nestala. Dakle, pokušajte to ako pogreška i dalje postoji nakon što ste napravili stvari koje su drugi predložili.
Odgovor #6
Upravo sam ažurirao tslib na najnoviju verziju i problem je bio riješen. Instalirao sam 1.9.3, i ažurirao na 1.10.0.
Odgovor #7
Kao što referenca navodi, rješavanje modula postavljeno je na Node način samo za "modules": "commonjs", i postavljeno je na klasični način za "modules": "es2015":
Postoje dvije moguće strategije rješavanja modula: Node i Classic. Možete koristiti zastavicu --moduleResolution za određivanje strategije rješavanja modula. Ako nije navedeno, zadana je Classic za --module AMD | System | ES2015, ili Node u suprotnom.
Budući da klasični način rada nije svjestan node_modules, kompajler ne može razriješiti modul tslib.
moduleResolution treba biti eksplicitno postavljen za ES2015 module:
...
"module": "es2015",
"moduleResolution": "node",
...
Odgovor #8
Moja se pogreška činila povremenom, ali vjerojatno je uzrokovana uređivanjem datoteke u mapi "node_modules".
Izbrisao sam
- mapa "node_modules"
- datoteka "package-lock.json"
Pokrenuto ... "npm install"
Sada radi.
NAPOMENA: Pokušao sam pokrenuti "npm install" prije brisanja datoteka i to nije riješilo problem.

