før ES6 havde Javascript modulstyringssystemer såsom re .uirejs, CommonJS og Angular ‘ s afhængighedsindsprøjtningssystem. Andre værktøjer som bro .serify og itselfebpack selv har løst mange problemer i denne sammenhæng.
i 2015 havde vi en første implementering af modulsystemet i Vanilla Javascript til Node.js ved hjælp af require
vi ved alle. Men dette er endnu ikke ankommet til bro .sere.
streng tilstand
før noget, vi har brug for at tale lidt om streng tilstand., Uden det kan vi ikke tale absolut ingenting om moduler.
streng tilstand er aktiveret som standard, når vi arbejder med ES6-moduler, hvis du stadig ikke ved, hvad streng tilstand er, vil jeg give en grundlæggende introduktion.,ad6″>, i påberåbelse af metoder er ikke længere tvunget til at lave en Object
fn.caller
og fn.arguments
for at få adgang til stakken, JavaScriptprotected
static
interface
), ikke lider af en bind
Hvis du ikke fik en anelse om, du er formodes for at bruge i 'use strict'
, i alle de rigtige steder, er det ved at blive standard i ES6, er det stadig en god ide at bruge det hver gang.,
Export
No modelo CommonJS podemos exportar valores atribuindo eles ao module.exports
como no snippet abaixo:
No ES6, os módulos são arquivos que dão export
uma API (basicamente igual ao CommonJS)., De erklæringer, variabler, funktioner og alt fra, at modulet findes kun i anvendelsesområdet for dette modul, hvilket betyder, at enhver variabel, der er erklæret inden for et modul, er ikke tilgængelige for andre moduler (medmindre de udtrykkeligt er eksporteret som en del af API, og senere importeret ind i det modul, der bruger dem).,
Eksport standard
du Kan simulere opførslen af en CommonJS dybest set, at erstatte module.exports
af export default
:
på Den anden side af moduler i CommonJS de erklæringer, der er i export
, kan kun placeres på øverste niveau i din kode, og ikke i nogen del af det., Vi antager, at denne begrænsning eksisterer for at gøre livet lettere for tolke, når de skal identificere moduler, men når man ser på det, er det en meget gyldig begrænsning, fordi der ikke er mange gode grunde til, at vi definerer dynamisk eksport inden for vores API-funktioner.
en anden grund til dette kan findes i snak om vores kære ven Williamilliam Grasel under Intercon 2017, på performanceeb app ydeevne (som kan findes her).,
han siger, at en af måderne til at udvide dens ydeevne er ved at bruge moduler, det skyldes, at modulerne er kompileret statisk, og før din kode endda overgår til bro .serfortolkeren (som f.eks. På denne måde er det kun muligt at udtrække de dele af koden, der faktisk bruges i applikationen i stedet for at importere hele modulet, og dette ville kun være muligt, hvis modulerne blev erklæret på øverste niveau, fordi alt inde i en funktion ville blive noget dynamisk, ikke statisk.,