typescript - Angular endre modul fra es6 til commonJs konsekvens


Jeg prøvde å importere FileSaver for appen min. Og den eneste måten jeg fikk det til å fungere på var gjennom følgende kommando

import filesaver = require('filesaver');

Da får jeg denne feilen

Import-oppdrag kan ikke brukes når målet er ECMAScript 2015-moduler

Jeg fulgte løsningen ved å endre modulen inne i tsconfig.json fra es6 til commonjs.

Alt fungerer fint nå. Jeg er imidlertid litt bekymret for hva konsekvensene er av å gå fra es6 til commonjs. Åpenbart var det es6 av en grunn, ikke sant?

Finnes det en måte å gjøre det på slik at jeg ikke trenger å endre?

Svar #1

Ja, hvis du bruker TypeScript, bruk es6/TypeScript-modulinnlastingssyntaks:

import { type } from './module';

Når du kompilerer TypeScript til JavaScript, kan du målrette hvilken som helst modul-laster du vil:

es6
system
commonjs
AMD
UMD

Du kan målrette modulssystemet fra tsconfig.json:

"compilerOptions": {
  ...
  "module": "commonjs",
}

Nettlesere støtter ennå ikke modulinnlasting nativt. Inntil de gjør det, inkluder det nødvendige skriptet avhengig av hvilket modulsystem du bruker.

For eksempel, hvis du retter deg mot «system» eller «commonjs», må du sørge for å inkludere et kompatibelt skript for å laste modulen riktig (dvs. node_modules/systemjs/dist/system.js)

Mitt råd, hvis du skriver din ng2-app i TypeScript

Etter min mening gir es6 den reneste syntaksen for modulinnlasting. Jeg foretrekker å skrive Angular2-programmer med TypeScript og bruke es6-språkfunksjoner (inkludert den renere syntaksen for modulinnlasting). Når det gjelder å kompilere TypeScript til JavaScript, prøver jeg å målrette es5, ettersom de fleste nettlesere i dag gir nær 100% kompatibilitet uten en shim, og bruke systemjs som modul-laster (mest fleksibel hvis jeg vil endre formater senere).

I FileServer-koden, skriv det i TypeScript, og bruk es6-modullastingssyntaks. På den måten vil det bli kompilert til modullastingssyntaksen du sikter mot, som bør være konsistent med resten av ts-filene dine.

Relaterte artikler