it-swarm.com.de

Wie debugge ich das Laden der D8-Bibliothek?

Ich habe Probleme beim Anhängen einer Bibliothek mit dem neuen Mechanismus #attached in Drupal 8. Gibt es eine einfache Möglichkeit, zu debuggen und festzustellen, welche Bibliotheken Drupal versucht es) zu laden, und möglicherweise, was geht schief?

Motivation

In einer Formularklasse gebe ich ein großes Render-Array zurück. Eines der Elemente hat ein #attached Eigentum:

$form['contact'] = array(
    '#type' => 'fieldset',
    '#title' => t('Contact'),
);
$form['contact']['#attached']['library'][] = 'my_module/contact';

In der Datei my_module.libraries.yml:

contact:
  version: 1.x
  css:
    theme:
      css/contact.css: {}

Ich vermute, dass contact.css entweder nicht gefunden, nicht geladen oder ganz ignoriert wird. Daher möchte ich den Prozess verfolgen, in dem Drupal die Bibliothek lädt und in die Seite integriert).

6
Hendrik

Wie debugge ich das Laden der D8-Bibliothek?
... Daher möchte ich den Prozess verfolgen, in dem Drupal die Bibliothek lädt und in die Seite integriert).

Es gibt einige Möglichkeiten, eine Bibliothek anzuhängen (siehe hier , um sie zu sehen). Dies erschwert die Aufgabe, nach jedem Prozess einen Debug-Workflow zu erstellen.

... welche Bibliotheken Drupal versucht zu laden, und möglicherweise, was geht schief?
... Kann jemand eine allgemeine Methode zum Debuggen des Ladens der D8-Bibliothek hinzufügen?

Nun, es gibt einige Möglichkeiten, um zu sehen, was angehängt ist. Ich kenne zwei Optionen zum "Debuggen".

Option 1 (Bibliotheken prüfen)

Verwenden Sie eine Funktion, um zu überprüfen, welche Bibliothek auf Ihrer Seite angehängt wurde.

function module_page_attachments_alter(&$page) {
  $array_libraries = $page['#attached']['library']; //Use a breakpoint at this line to see libraries.
}

Achtung: Es ist nicht sicher, alle Bibliotheken zu sehen. Denken Sie daran, dass auch jedes andere Modul oder Thema diese Funktion verwenden kann (und Sie wissen nicht, welches es ist zuletzt aufgerufen), sagte, dass Sie diese Option nur verwenden, um Bibliotheken Ihres eigenen Moduls/Themas zu überprüfen, wenn sie enthalten sind. Wenn nicht, haben Sie es vermasselt (Rechtschreibfehler, Anhängen an falscher Stelle), müssen Sie Ihren 'Anhängen'-Code überprüfen .

Option 2 (nach Dateien suchen, die in einer Bibliothek angehängt sind)

Wie von @cilefen angegeben, müssen Sie zunächst die CSS- und js-Aggregation auf der Registerkarte "Leistungskonfiguration" deaktivieren.

(css_js_aggregation

Anschließend können Sie alle CSS- und JS-Dateien in Ihrem Browser überprüfen.

CSS ist einfacher, sie sind im Tag <head> Organisiert:

(css_group

Alle CSS-Dateien sind für jeden Medientyp in einem <style> - Tag zusammengefasst. In diesem Bildschirm gibt es drei <style> Gruppen mit Medien 'all', die erste ist das Basisthema, die zweite ist der Kern (Admin-Bar-Zeug) und die letzte ist mein Thema. Wenn Sie erweitern, werden alle Dateien angezeigt:

(CSS_expanded

Für js gibt es zwei Stellen, wenn Sie angegeben haben, die Sie am Tag <head> Finden, wenn nicht, befinden sie sich alle am Ende Ihres Tags <body>.

(js_files

Jetzt,
- Wenn Sie eine Datei verpassen, überprüfen Sie Ihre Bibliothek, ob Ihre Datei wirklich definiert ist.
- Wenn nicht geladen (4xx, 5xx, Antworten auf eine Datei), überprüfen Sie Ihren Dateispeicherort.
- und stellen Sie sicher, dass Sie den Cache geleert haben.


Um den Überblick über meine Bibliotheken zu behalten, befolge ich nur einige Regeln.

  • Beim Theming vermeide ich normalerweise das Hinzufügen von Dingen in preprocess oder einer anderen Funktion und hänge alle Bibliotheken in der Vorlage twig template) an.

Verwenden dieses Codes:

{{ attach_library('theme/library') }}  
  • Beim Erstellen eines Moduls füge ich nur wichtigen Code hinzu und immer am Ende der Build-Funktion und in einer obersten Ebene von $build Var (habe gerade einen Standard für mich erstellt und folge immer dieser Regel).

Auf diese Weise ist es einfacher zu finden, wo etwas falsch ist.

Sehr wichtig: In Anbetracht der Tatsache, dass Sie alle Regeln einer .yml-Datei befolgen und einem Schema für eine Bibliotheksdefinition folgen, bestehen manchmal nur Registerkarten, auf denen Ihre Textbearbeitung besteht zu verwenden, ist Ihre Einrückung falsch oder Sie schreiben etwas falsch.

5
Vagner

Ich denke du willst:

$form['#attached']['library'][] = 'my_module/contact';

1
cilefen