Life with ESM

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

ESM, steht für ES Modules, steht für JavaScript-Module. Also, import und Freunde.

Browser unterstützen es heutzutage. Es gibt viel Nuancierung, aber solange du IE fallen gelassen hast, steht die Tür ziemlich offen.

Vor ESM war die Situation für JavaScript-Projekte

  1. Wir haben Pakete, die wir von npm verwenden müssen.
  2. Wir werden sie im Voraus mit unserer package.json, npm install und was auch immer von npm installieren.
  3. Wir werden import-Anweisungen schreiben, die aus irgendeinem Grund *ungültige* ESM sind (Bequemlichkeit des Entwicklers, nehme ich an) und davon ausgehen, dass wir Pakete aus einem lokalen node_modules-Ordner importieren.
  4. Unser Bundler wird wissen, was er mit diesen ungültigen Imports machen soll.
  5. Das ist alles in Ordnung, denn man sagt, dass Bundling immer noch für die Leistung erforderlich ist, und es macht andere Dinge, die wir sowieso wollen, wie die Ausführung von Babel und Co.

Jetzt, wo wir uns mehr auf ESM verlassen können, verschiebt sich die Geschichte etwas, und all diese Dinge werden hinterfragt.

  • Was wäre, wenn wir nicht npm install machen müssten?
  • Was wäre, wenn wir keinen Bundler brauchen?
  • Was wäre, wenn die Leistung in Ordnung ist, zwischen HTTP/2+, globalen CDNs, Browsern, die schicke Dinge tun, usw.?
  • Was wäre, wenn wir vielleicht Code nicht so sehr *kompilieren sollten*, weil wir zu viel heruntermkompilieren?

Wir sehen Werkzeuge der nächsten Generation, die all das nutzen. Snowpack 3 wurde gerade veröffentlicht und schau dir das an

Dieses React (mit JSX), das ganz normal geschrieben ist, und es gab kein npm install, kein node_modules-Verzeichnis und keinen Build-Schritt. Aber immer noch ein Dev-Server und Reload. So leicht. Sehr erfrischend.

Ich habe gerade eine neue Folge von Toolsday gehört, bei der Una und Chris mit Jason Miller über WMR sprachen, von dem ich bis dahin nichts gehört hatte. Es fühlt sich Snowpack/Skypack sehr ähnlich an. Mit WMR kann man npm-Pakete verwenden, ohne sie installieren zu müssen, oder mit Dingen wie JSX, TypeScript oder CSS Modules schreiben und erhält eine Menge Entwicklungskomfort, wie einen Server, Hot Reloading usw.

Hier ist eindeutig etwas in der Luft, und ich glaube, das ist eine Hinwendung zu ESM.

Selbst auf der Node.js-Seite *passiert* ESM. Hier ist Sindre Sorhus, der über 1.000 npm-Pakete hat (!)

Ende April 2021 ist Node.js 10 End-of-Life, was bedeutet, dass Paket-Maintainer Node.js 12 anvisieren können. Diese Node.js-Version hat volle Unterstützung für JavaScript Modules, auch bekannt als ESM.

Er plant, fast alle dieser 1.000 Pakete im Jahr 2021 auf ESM umzustellen. Keine "Dual"-Konfiguration, bei der man verschiedene Formate ausgibt... *nur* ESM, und er ermutigt alle, dasselbe zu tun. Ich denke, diese Dynamik hin zur direkten ESM-Nutzung im Browser spielt eine große Rolle, wenn das npm-Ökosystem genau dasselbe tut.

Und wenn man doch bündeln muss, weil zum Beispiel etwas auf npm noch nicht ESM-ready ist, dann werden die Bundler der nächsten Generation rauchend schnell.