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:

  1. 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)
  2. Odaberite "TypeScript: Odaberite verziju TypeScripta..."
  3. Prikazuje TS verziju VSCode-a i verziju radnog prostora (projekta), odaberite onu (Napomena: ovo podrazumijeva da ste npm installali pakete u radnom prostoru)

  4. 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.

Povezani članci