Heim >Web-Frontend >js-Tutorial >Entwicklung von Chrome-Erweiterungen – Entwickeln Sie eine minimale App mit TypeScript, React, Tailwind CSS und Webpack
In diesem Blog erfahren Sie, wie Sie eine Chrome-Erweiterung mit TypeScript, React, Tailwind CSS und Webpack einrichten und entwickeln. Wir werden eine minimale Erweiterung namens „NoteMe“ ✍️ erstellen, um unser Verständnis auf die Probe zu stellen. Unsere Erweiterung wird die folgenden Funktionen umfassen:
In diesem Blog erfahren Sie, wie Sie mithilfe moderner Technologien eine Chrome-Erweiterung erstellen. In diesem Leitfaden wird davon ausgegangen, dass Sie bereits mit dem Erstellen und Hochladen einer Erweiterung in Chrome während der lokalen Entwicklung vertraut sind. Wenn Sie neu in diesem Bereich sind oder eine detaillierte Anleitung zu den Grundlagen benötigen, empfehle ich Ihnen, einen Blick auf meinen vorherigen Blog zu werfen: Link
Die Erweiterung umfasst die folgenden Komponenten:
Unten finden Sie Screenshots, die zeigen, wie die Erweiterung nach Fertigstellung aussehen wird:
Bevor Sie mit diesem Tutorial beginnen, stellen Sie sicher, dass die folgenden Tools auf Ihrem System installiert sind:
Die obige Abbildung bietet einen allgemeinen Überblick über die interne Funktionsweise dieser Erweiterung. Hier sind einige wichtige Punkte, die wir aus dem Diagramm ableiten können:
Chrome-Erweiterungsprojekte erfordern zwar keine bestimmte Projektstruktur, erfordern jedoch eine manifest.json-Datei im Stammverzeichnis des Build-Verzeichnisses. Wir nutzen diese Flexibilität und definieren eine benutzerdefinierte Projektstruktur, die dabei hilft, verschiedene Skripte effektiv zu organisieren. Diese Struktur ermöglicht eine bessere Wiederverwendung von Code über Skripte hinweg und minimiert Duplikate, wodurch unser Entwicklungsprozess rationalisiert wird.
Zu Beginn richten wir eine grundlegende Verzeichnisstruktur für das Projekt ein. Sie können das folgende Bash-Skript verwenden, um die Grundstruktur zusammen mit der Datei manifest.json zu erstellen:
#!/bin/bash bash_script_absolute_path=$(pwd) declare public_paths=("public" "public/assets" "public/assets/images") declare source_paths=("src" "src/lib" "src/scripts" "src/scripts/background" "src/scripts/content" "src/scripts/injected" "src/scripts/popup" "src/styles") declare public_directory_path="public" declare manifest_file="manifest.json" declare project_name="note-me" create_directory () { if [ ! -d "" ]; then mkdir fi } create_file () { if [ ! -e "/" ]; then touch / fi } create_public_directories () { for public_path in "${public_paths[@]}"; do create_directory $public_path done } create_source_directories () { for source_path in "${source_paths[@]}"; do create_directory $source_path done } execute () { echo "creating project struture at "${bash_script_absolute_path} create_directory $project_name cd $bash_script_absolute_path"/"$project_name create_public_directories create_source_directories create_file $manifest_file $public_directory_path echo "done creating project struture at "${bash_script_absolute_path}" with project name "$project_name } execute
Stellen Sie sicher, dass Ihre Verzeichnisstruktur der im Screenshot unten gezeigten ähnelt.
{ "manifest_version": 3, "name": "NoteMe", "version": "1.0", "description": "A Chrome extension built with React and TypeScript using Webpack.", "action": { "default_popup": "popup.html", "default_icon": "app-icon.png" }, "background": { "service_worker": "background.js", "type": "module" }, "content_scripts": [ { "matches": ["<all_urls>"], "js": ["content.js"], "run_at": "document_end" } ], "permissions": [ "storage", "activeTab", "scripting", "webNavigation" ], "host_permissions": ["<all_urls>"], "web_accessible_resources": [ { "resources": ["styles.css", "sidebar-open.png", "sidebar-close.png"], "matches": ["<all_urls>"] } ] }
Zu beachtende Punkte:
Erstellen Sie folgende Dateien, auf die in manifest.json verwiesen wird: backgroun.ts, content.ts und popup.html.
Fügen Sie den folgenden Code zur Datei popup.html im öffentlichen Verzeichnis hinzu:
#!/bin/bash bash_script_absolute_path=$(pwd) declare public_paths=("public" "public/assets" "public/assets/images") declare source_paths=("src" "src/lib" "src/scripts" "src/scripts/background" "src/scripts/content" "src/scripts/injected" "src/scripts/popup" "src/styles") declare public_directory_path="public" declare manifest_file="manifest.json" declare project_name="note-me" create_directory () { if [ ! -d "" ]; then mkdir fi } create_file () { if [ ! -e "/" ]; then touch / fi } create_public_directories () { for public_path in "${public_paths[@]}"; do create_directory $public_path done } create_source_directories () { for source_path in "${source_paths[@]}"; do create_directory $source_path done } execute () { echo "creating project struture at "${bash_script_absolute_path} create_directory $project_name cd $bash_script_absolute_path"/"$project_name create_public_directories create_source_directories create_file $manifest_file $public_directory_path echo "done creating project struture at "${bash_script_absolute_path}" with project name "$project_name } execute
Hinweis:
Der obige Code installiert zwei Listener:
Zusätzlich bringt die Importanweisung Listener aus dem Verzeichnis src/lib ein. Die Kernlogik der App ist in src/lib integriert und ermöglicht die Wiederverwendung in verschiedenen Kontexten (z. B. Inhalt und Hintergrundskripts).
Das Verzeichnis src/lib beherbergt die Kernlogik der Erweiterung. Nachfolgend finden Sie eine Übersicht über die Struktur und die wichtigsten Komponenten:
Eine detaillierte Implementierung finden Sie im tatsächlichen Code im Repository.
In diesem Schritt mounten wir die React-Komponenten zum Rendern. Diese Komponenten werden in zwei verschiedenen Skripten bereitgestellt: src/scripts/content/content.ts und src/scripts/popup/popup.ts.
Popup-Skript: Gefunden in src/scripts/popup/popup.ts.
#!/bin/bash bash_script_absolute_path=$(pwd) declare public_paths=("public" "public/assets" "public/assets/images") declare source_paths=("src" "src/lib" "src/scripts" "src/scripts/background" "src/scripts/content" "src/scripts/injected" "src/scripts/popup" "src/styles") declare public_directory_path="public" declare manifest_file="manifest.json" declare project_name="note-me" create_directory () { if [ ! -d "" ]; then mkdir fi } create_file () { if [ ! -e "/" ]; then touch / fi } create_public_directories () { for public_path in "${public_paths[@]}"; do create_directory $public_path done } create_source_directories () { for source_path in "${source_paths[@]}"; do create_directory $source_path done } execute () { echo "creating project struture at "${bash_script_absolute_path} create_directory $project_name cd $bash_script_absolute_path"/"$project_name create_public_directories create_source_directories create_file $manifest_file $public_directory_path echo "done creating project struture at "${bash_script_absolute_path}" with project name "$project_name } execute
Inhaltsskript: Gefunden in src/scripts/content/content.ts.
{ "manifest_version": 3, "name": "NoteMe", "version": "1.0", "description": "A Chrome extension built with React and TypeScript using Webpack.", "action": { "default_popup": "popup.html", "default_icon": "app-icon.png" }, "background": { "service_worker": "background.js", "type": "module" }, "content_scripts": [ { "matches": ["<all_urls>"], "js": ["content.js"], "run_at": "document_end" } ], "permissions": [ "storage", "activeTab", "scripting", "webNavigation" ], "host_permissions": ["<all_urls>"], "web_accessible_resources": [ { "resources": ["styles.css", "sidebar-open.png", "sidebar-close.png"], "matches": ["<all_urls>"] } ] }
Hinzufügen der für das Kompilieren und Erstellen der Erweiterung erforderlichen Konfigurationen
Um die Erweiterung erfolgreich zu kompilieren und zu erstellen, müssen wir die folgenden Dateien konfigurieren:
Diese Konfigurationen übernehmen die TypeScript-Kompilierung, die Tailwind-CSS-Integration und den gesamten Webpack-Erstellungsprozess für die Erweiterung.
Hier sind einige Screenshots, die während des Tests der Erweiterung aufgenommen wurden.
Hier sind ein paar wichtige Erkenntnisse aus diesem Blog
In Zukunft plane ich, an einem weiteren Blog zu arbeiten, in dem wir uns mit dem Prozess der Veröffentlichung einer voll funktionsfähigen Chrome-Erweiterung im Chrome Web Store befassen. Das Ziel dieses Blogs wird sein:
Vielen Dank, dass Sie sich die Zeit genommen haben, diesen Blog zu lesen! Ihr Interesse und Ihre Unterstützung bedeuten mir sehr viel. Ich freue mich darauf, im weiteren Verlauf dieser Reise weitere Erkenntnisse zu teilen.
Viel Spaß beim Codieren!
Github-Link: https://github.com/gauravnadkarni/chrome-extension-starter-app
Dieser Artikel wurde ursprünglich auf Medium veröffentlicht.
Das obige ist der detaillierte Inhalt vonEntwicklung von Chrome-Erweiterungen – Entwickeln Sie eine minimale App mit TypeScript, React, Tailwind CSS und Webpack. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!