Heim Web-Frontend js-Tutorial Nobuild mit Rails und Importmap

Nobuild mit Rails und Importmap

Dec 26, 2024 am 03:53 AM

Die neuesten Versionen von Ruby on Rails haben sich auf die Einfachheit in verschiedenen Aspekten des Frameworks konzentriert, begleitet von dem Versprechen, zum „Ein-Mann-Framework“ zurückzukehren (wo ein einzelner Entwickler effektiv eine gesamte Anwendung erstellen und warten kann).

Die Importmap Rails-Bibliothek basiert auf dem Prinzip, dass moderne Webbrowser mit der ECMAScript-Spezifikation Schritt gehalten haben und ES-Module (ESM) interpretieren können. Als Webstandard können Sie mit Importmap steuern, wie JavaScript-Module im Browser aufgelöst werden, und Abhängigkeiten und Versionen verwalten, ohne den an den Browser gesendeten Code transpilieren oder bündeln zu müssen.

So funktioniert der Importmap-Webstandard

Alles beginnt mit einem Skript-Tag vom Typ importmap, das im Hauptlayout oder auf der Webseite Ihrer Anwendung definiert ist. Innerhalb dieses Tags definiert ein JSON-Objekt Aliase und die entsprechenden Pfade zum Quellcode.

<script type="importmap">
  {
    "imports": {
      "application": "/assets/application.js",
      "local-time": "https://cdn.jsdelivr.net/npm/local-time@3.0.2/app/assets/javascripts/local-time.es2017-esm.min.js",
      "utils": "/assets/utils.js"
    }
  }
</script>

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

In derselben Karte können Sie Bibliothekspfade kombinieren, die auf ein CDN verweisen oder lokale Ressourcen verwenden. Um Bibliotheken aus dieser Karte zu verwenden, verweisen Sie auf den Aliasnamen.

<!-- Below the importmap script -->
<script type="module">import "application"</script>

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Und in Ihre application.js importieren Sie die erforderlichen Abhängigkeiten:

// application.js

import LocalTime from "local-time";
LocalTime.start();

import "utils";

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Importmap-Unterstützung ist in den Browsern Chrome 89, Safari 16.4, Firefox 108 und Edge 89 vorhanden. Fügen Sie für ältere Browser eine Polyfüllung ein:

<script
  async
  src="https://ga.jspm.io/npm:es-module-shims@1.10.1/dist/es-module-shims.js"
></script>

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

So funktioniert Importmap in Ruby on Rails

Die Importmap-Funktionalität in Ruby on Rails folgt demselben oben beschriebenen Standard und bietet eine einfache Möglichkeit, Karten und Versionsdateien zu erstellen. Lassen Sie uns am Beispiel einer Webanwendung namens heroImage (Quellcode auf Github verfügbar) die Implementierung untersuchen.

Nobuild with Rails and Importmap

Wenn Sie eine neue Rails 8-Anwendung erstellen, wird das Gem importmap-rails standardmäßig hinzugefügt und installiert. Es wird eine Datei config/importmap.rb erstellt, in der Sie den in Ihrer Anwendung benötigten JavaScript-Code anheften können.

pin "application"

pin "@hotwired/turbo-rails", to: "turbo.min.js"
pin "@hotwired/stimulus", to: "stimulus.min.js"
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js"

pin_all_from "app/javascript/controllers", under: "controllers", preload: false

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Das Schlüsselwort pin benötigt bis zu drei Argumente. Der erste ist erforderlich, da es sich um den Alias ​​des JavaScript-Codes handelt. Pin „application“ ist eine Verknüpfung für die Datei application.js mit dem Alias ​​application:

pin "application", to: "application.js"

Nach dem Login kopieren
Nach dem Login kopieren

Wenn Alias- und Dateinamen unterschiedlich sind, verwenden Sie das Schlüsselwort to::

pin "@hotwired/turbo-rails", to: "turbo.min.js"

Nach dem Login kopieren

Das Schlüsselwort pin_all_from hilft dabei, auf mehrere Dateien gleichzeitig zu verweisen. Das erste Argument ist der Pfad, in dem sich die JavaScript-Dateien befinden, und das Argument „under:“ stellt den Alias ​​für jede Datei voran. Der generierte Alias ​​verwendet das Präfix under und den Dateinamen, z. B. „controllers/alert-controller“ für die Datei „alert_controller.js“.

Um die Importmap-JSON-Datei anzuzeigen, führen Sie Folgendes aus:

<script type="importmap">
  {
    "imports": {
      "application": "/assets/application.js",
      "local-time": "https://cdn.jsdelivr.net/npm/local-time@3.0.2/app/assets/javascripts/local-time.es2017-esm.min.js",
      "utils": "/assets/utils.js"
    }
  }
</script>

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Rails löst das gesamte JavaScript über das Propshaft-Gem auf, das den physischen Pfad des JavaScript-Codes auflöst, dem Webpfad /assets zuordnet und den Digest zu jeder Datei hinzufügt, um besseres Caching und Ungültigmachungen zu ermöglichen.

Propshaft erkennt physische Pfade anhand der Konfiguration des Assets:

<!-- Below the importmap script -->
<script type="module">import "application"</script>

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Stellen Sie sicher, dass Ihre Dateien in einem der registrierten Pfade vorhanden sind, oder fügen Sie Ihren eigenen Pfad hinzu, der von Propshaft und Importmap erkannt werden soll.

Mit Importmap in Rails können Sie angeben, wie der Browser JavaScript-Dateien laden soll. Es gibt zwei Optionen: Vorladen (Standard) und kein Vorladen. Preload weist den Browser an, Dateien so schnell wie möglich herunterzuladen. Importmap generiert einen Link-Tag mit rel="modulepreload":

// application.js

import LocalTime from "local-time";
LocalTime.start();

import "utils";

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn Sie das Argument „preload“ auf „false“ setzen, wird das Link-Tag nicht generiert und der Browser lädt die Datei bei Bedarf herunter.

Mit der Importmap von Rails können Sie auch JavaScript-Code von einem CDN anheften, indem Sie das to:-Argument für die URL:
verwenden

<script
  async
  src="https://ga.jspm.io/npm:es-module-shims@1.10.1/dist/es-module-shims.js"
></script>

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die Importmap enthält eine CLI zum Anheften oder Anheften von JavaScript-Code in die Datei config/importmap.rb. Es enthält auch Befehle zum Aktualisieren, Überwachen und Überprüfen von Versionen:

pin "application"

pin "@hotwired/turbo-rails", to: "turbo.min.js"
pin "@hotwired/stimulus", to: "stimulus.min.js"
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js"

pin_all_from "app/javascript/controllers", under: "controllers", preload: false

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn Sie den Befehl pin für ein JavaScript-Paket verwenden, löst Importmap Paketabhängigkeiten auf und lädt das Paket und die Abhängigkeiten zu vendor/javascript herunter, anstatt das to:-Argument auf das CDN zu setzen , wodurch die Rails-Anwendung diese Dateien bereitstellen kann:

pin "application", to: "application.js"

Nach dem Login kopieren
Nach dem Login kopieren

Dieser Ansatz funktioniert gut, wenn Ihr Paket einfache Abhängigkeiten oder klar definierte Abhängigkeiten im JavaScript-Paket aufweist. Wenn dies nicht der Fall ist, wird die Verwendung schwierig, wenn Importmap den Code unter vendor/javascript anbietet. Es funktioniert möglicherweise mit der URL und dem manuellen Hinzufügen von Abhängigkeiten, oder Sie können den bereitgestellten Code optimieren, damit es funktioniert.

Wie arbeite ich mit Rails Gems, Engines und Importmap?

Es gibt zwei Ansätze zum Erstellen von Ruby on Rails-Gems, die mit Importmap kompatibel sind. Der erste Ansatz ermöglicht es Ihrem Gem, JavaScript-Code bereitzustellen, den Sie in der Importmap-Konfiguration anheften können. So werden die Juwelen Turbo-Rails und Stimulus-Rails umgesetzt.

Platzieren Sie Ihren JavaScript-Code im Ordner app/assets/javascripts Ihres Gems. Möglicherweise benötigen Sie einen zusätzlichen Prozess, der die JavaScript-Dateien minimiert und JavaScript-Kartendateien generiert. Definieren Sie dann innerhalb der Engine-Klasse einen Initialisierungs-Hook, um Ihren JavaScript-Code mit Propshaft:
zu deklarieren

<script type="importmap">
  {
    "imports": {
      "application": "/assets/application.js",
      "local-time": "https://cdn.jsdelivr.net/npm/local-time@3.0.2/app/assets/javascripts/local-time.es2017-esm.min.js",
      "utils": "/assets/utils.js"
    }
  }
</script>

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die zweite Option verwendet eine Importmap-Konfigurationsdatei. Wenn Ihre Engine über eine Layoutvorlage verfügt und die Ansichten von der Hostanwendung isoliert sind und die Engine den JavaScript-Code nicht mit der Hostanwendung teilen muss, können Sie unter config/importmap.rb eine Importmap-Konfigurationsdatei erstellen , legen Sie Ihre Pins fest, platzieren Sie Ihren JavaScript-Code unter app/javascript und konfigurieren Sie die Engine mit einem Initialisierer.

Öffnen Sie Ihre Ruby-Datei engine.rb und fügen Sie die Importmap-Konfigurationsdatei und einen Sweeper hinzu:

<!-- Below the importmap script -->
<script type="module">import "application"</script>

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Geben Sie die Importmap an, die in der Layoutvorlage Ihrer Engine verwendet werden soll:

// application.js

import LocalTime from "local-time";
LocalTime.start();

import "utils";

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Um JavaScript-Code mit der Hostanwendung, wie z. B. Stimulus-Controllern, zu teilen, erstellen Sie eine teilweise Importmap-Konfigurationsdatei und stellen Sie die Engine so ein, dass sie sie mit der Hauptdatei in der Hostanwendung zusammenführt.

Erstellen Sie eine Importmap-Konfigurationsdatei unter config/importmap.rb und fügen Sie die JavaScript-Pins hinzu, um sie mit der Hostanwendung zu teilen. Wenn Sie Abhängigkeiten für externe Pakete haben, fügen Sie diese über einen Generator oder Installer zur Hostanwendung hinzu:

<script
  async
  src="https://ga.jspm.io/npm:es-module-shims@1.10.1/dist/es-module-shims.js"
></script>

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Öffnen Sie Ihre engine.rb-Datei und fügen Sie einen Initialisierer hinzu:

pin "application"

pin "@hotwired/turbo-rails", to: "turbo.min.js"
pin "@hotwired/stimulus", to: "stimulus.min.js"
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js"

pin_all_from "app/javascript/controllers", under: "controllers", preload: false

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Welche Vorteile bietet die Verwendung von Importmap?

Aus der Sicht eines Ruby on Rails-Entwicklers besteht der Hauptvorteil der Verwendung von Importmap darin, dass kein JavaScript-Laufzeitknoten erforderlich ist und keine Abhängigkeit von node_modules besteht.

Außerdem benötigen Sie im Entwicklungsmodus keinen zusätzlichen Prozess, um den JavaScript-Code zu transpilieren und zu minimieren. Sie verlassen sich auf Webstandards, um dem Browser den Code bereitzustellen. Die Bereitstellung Ihrer Rails-Anwendung hinter einem Reverse-Proxy bietet mehrere Vorteile. Erstens: Wenn Sie das HTTP/2-Protokoll aktivieren, kann Ihr Browser mehrere Dateien mit einer einzigen HTTP-Verbindung abrufen, und das Herunterladen vieler kleiner JavaScript-Dateien hat keine Auswirkungen auf die Leistung.

Nobuild with Rails and Importmap

Wenn Sie Ihren Proxy für die Verwendung der GZIP- oder Brotli-Komprimierung aktivieren, stellen Sie sicher, dass Sie sehr kleine Dateien senden und gleichzeitig die Lesbarkeit bei der Verwendung von Browser-Entwicklertools gewährleisten. Wenn Sie eine Datei ändern, müssen Sie nur diese bestimmte Datei ungültig machen, die der Browser herunterlädt. Der Browser weiß aufgrund des Fingerabdrucks, den Propshaft allen Dateien hinzufügt, dass eine Datei geändert wurde.

Durch die Verwendung eines Reverse-Proxys wie Thruster zusammen mit Puma werden die von der Rails-Anwendung bereitgestellten Assets ausgelagert. Thruster kann Assets zwischenspeichern und bereitstellen, wenn ein Client eine Datei anfordert.

Wann Sie Importmap nicht verwenden sollten

Es gibt Fälle, in denen Sie die Verwendung von Importmap in einer Rails-Anwendung vermeiden sollten. Wenn Sie eine SPA-Anwendung mit React, Vue oder einem anderen ähnlichen Tool erstellen, ist die Wahrscheinlichkeit hoch, dass Sie Ihren Code mit TypeScript schreiben. In diesem Fall sollten Sie bei der Bündelungsstrategie bleiben.

Wenn Sie außerdem ältere Browser unterstützen müssen, ist die Bündelung mit Code-Transpilation eine bessere Option.

Das obige ist der detaillierte Inhalt vonNobuild mit Rails und Importmap. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
<🎜> obscur: Expedition 33 - So erhalten Sie perfekte Chroma -Katalysatoren
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1677
14
PHP-Tutorial
1278
29
C#-Tutorial
1257
24
Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Apr 16, 2025 am 12:12 AM

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

JavaScript und das Web: Kernfunktionalität und Anwendungsfälle JavaScript und das Web: Kernfunktionalität und Anwendungsfälle Apr 18, 2025 am 12:19 AM

Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.

JavaScript in Aktion: Beispiele und Projekte in realer Welt JavaScript in Aktion: Beispiele und Projekte in realer Welt Apr 19, 2025 am 12:13 AM

Die Anwendung von JavaScript in der realen Welt umfasst Front-End- und Back-End-Entwicklung. 1) Zeigen Sie Front-End-Anwendungen an, indem Sie eine TODO-Listanwendung erstellen, die DOM-Operationen und Ereignisverarbeitung umfasst. 2) Erstellen Sie RESTFUFFUPI über Node.js und express, um Back-End-Anwendungen zu demonstrieren.

Verständnis der JavaScript -Engine: Implementierungsdetails Verständnis der JavaScript -Engine: Implementierungsdetails Apr 17, 2025 am 12:05 AM

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

Python vs. JavaScript: Entwicklungsumgebungen und Tools Python vs. JavaScript: Entwicklungsumgebungen und Tools Apr 26, 2025 am 12:09 AM

Sowohl Python als auch JavaScripts Entscheidungen in Entwicklungsumgebungen sind wichtig. 1) Die Entwicklungsumgebung von Python umfasst Pycharm, Jupyternotebook und Anaconda, die für Datenwissenschaft und schnelles Prototyping geeignet sind. 2) Die Entwicklungsumgebung von JavaScript umfasst Node.JS, VSCODE und WebPack, die für die Entwicklung von Front-End- und Back-End-Entwicklung geeignet sind. Durch die Auswahl der richtigen Tools nach den Projektbedürfnissen kann die Entwicklung der Entwicklung und die Erfolgsquote der Projekte verbessert werden.

Die Rolle von C/C bei JavaScript -Dolmetschern und Compilern Die Rolle von C/C bei JavaScript -Dolmetschern und Compilern Apr 20, 2025 am 12:01 AM

C und C spielen eine wichtige Rolle in der JavaScript -Engine, die hauptsächlich zur Implementierung von Dolmetschern und JIT -Compilern verwendet wird. 1) C wird verwendet, um JavaScript -Quellcode zu analysieren und einen abstrakten Syntaxbaum zu generieren. 2) C ist für die Generierung und Ausführung von Bytecode verantwortlich. 3) C implementiert den JIT-Compiler, optimiert und kompiliert Hot-Spot-Code zur Laufzeit und verbessert die Ausführungseffizienz von JavaScript erheblich.

Python gegen JavaScript: Anwendungsfälle und Anwendungen verglichen Python gegen JavaScript: Anwendungsfälle und Anwendungen verglichen Apr 21, 2025 am 12:01 AM

Python eignet sich besser für Datenwissenschaft und Automatisierung, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python funktioniert in Datenwissenschaft und maschinellem Lernen gut und unter Verwendung von Bibliotheken wie Numpy und Pandas für die Datenverarbeitung und -modellierung. 2. Python ist prägnant und effizient in der Automatisierung und Skripten. 3. JavaScript ist in der Front-End-Entwicklung unverzichtbar und wird verwendet, um dynamische Webseiten und einseitige Anwendungen zu erstellen. 4. JavaScript spielt eine Rolle bei der Back-End-Entwicklung durch Node.js und unterstützt die Entwicklung der Vollstapel.

Von Websites zu Apps: Die verschiedenen Anwendungen von JavaScript Von Websites zu Apps: Die verschiedenen Anwendungen von JavaScript Apr 22, 2025 am 12:02 AM

JavaScript wird in Websites, mobilen Anwendungen, Desktop-Anwendungen und serverseitigen Programmierungen häufig verwendet. 1) In der Website -Entwicklung betreibt JavaScript DOM zusammen mit HTML und CSS, um dynamische Effekte zu erzielen und Frameworks wie JQuery und React zu unterstützen. 2) Durch reaktnatives und ionisches JavaScript wird ein plattformübergreifendes mobile Anwendungen entwickelt. 3) Mit dem Elektronenframework können JavaScript Desktop -Anwendungen erstellen. 4) Node.js ermöglicht es JavaScript, auf der Serverseite auszuführen und unterstützt hohe gleichzeitige Anforderungen.

See all articles