# EcmaScript Ενώτητες

Οι EcmaScript Ενώτητες είναι η επίσημη μοργή ενωτήτων για την JavaScript. Το ESM υποστηρίζεται από το ES4X χρησιμοποιώντας μια από τις επόμενες 2 επιλογές:

  • Το αρχικό αρχείο έχει επέκταση .mjs
  • Το αρχικό αρχείο έχει πρόθεμα with: mjs:

# Αρχικό αρχείο

Στο γυμνό μάτι, το αρχικό αρχείο δεν είναι τόσο διαφορετικό από το commonjs αρχείο, για παράδειγμα index.mjs:

import { Router } from '@vertx/web';
import { someRoute } from './routes';

const app = Router.router(vertx);

app.route('/').handler(someRoute);

vertx.createHttpServer()
  .requestHandler(app)
  .listen(8080);

Σε αυτήν την περίπτωση το someRoute εισάγεται από το routes.mjs αρχείο:

export function someRoute(ctx) {
  ctx.response()
    .end('Hello from ES4X!');
}

# Συμβατότητα

Για λόγους Συμβατότητα, μπορεί να το έχετε παρατηρήσει οτι το import στο αρχικό αρχείο, δεν περιλαμβάνει επέκταση:


 



import { Router } from '@vertx/web';
import { someRoute } from './routes';

// ...

Αυτή είναι μια μικρή απόκλιση από την επίσημη προδιαγραφή όπου ο ES4X φορτωτής θα ψάξει ενώτητες ως εξής:

  1. Αναζήτηση το ακριβές όνομα αρχείου: ./routes
  2. Αναζήτηση με .mjs κατάληξη: ./routes.mjs
  3. Αναζήτηση με .js κατάληξη: ./routes.js

WARNING

Όταν δουλεύετε με ESM το require() δεν είναι διαθέσιμο!

# Λήψη ενοτήτων

Η λήψη ενοτήτων στο χρόνο εκτέλεσης είναι επίσης δυνατή. Αυτή η δυνατότητα δεν είναι συγκεκριμένη στο ES4X. Στην πραγματικότητα βασίζεται στον επίσημο φορτωτής μονάδας απο το GraalJS. Εισαγωγή τέτοιου είδους ενωτήτων είναι τόσο απλό όσο:

import { VertxOptions } from 'https://unpkg.io/@vertx/[email protected]/mod.mjs';

Υπάρχουν μερικοί κανόνες που πρέπει να γνωρίζετε:

  1. HTTP Ενώτητες δεν θα ληφθούν εάν δεν υπάρχει ΥΠΕΥΘΥΝΟΣ ΑΣΦΑΛΕΙΑΣ.
  2. Εάν μια τέτοια ενότητα έχει ένα maven υπομονάδα ενότητα, αυτό δεν θα κατέβει.
  3. Η λήψη εκτελέσιμου κώδικα κατά το χρόνο εκτέλεσης μπορεί να είναι ζήτημα ασφάλειας.

Μπορεί να υπάρχουν περιπτώσεις όπου αυτό θα μπορούσε να είναι χρήσιμο, για παράδειγμα, για να αποφευχθεί η εξάρτηση από το npm όταν ο κωδικός δεν είναι δημόσιος.

WARNING

Ληφθείσες ενότητες δεν θα επεξεργαστούν καμία εξάρτηση ή maven ομόλογα.