Je veux inclure la bibliothèque CSS YAMM! 3 dans mon Drupal 8. À cette fin, j'ai écrit un module personnalisé en suivant les instructions de cette réponse . Bien que cela la réponse est en ce qui concerne une bibliothèque php, je pensais que cela fonctionnerait également pour une bibliothèque CSS.
C'est le composer.json
de mon module personnalisé:
{
"name": "drupal/my_yamm3",
"type": "drupal-module",
"require": {
"geedmo/yamm3": "*"
}
}
Dans le composer.json
à la racine de mon Drupal codebase, j'ai ceci:
"extra": {
...
"merge-plugin": {
"include": [
"core/composer.json",
"modules/custom/my_yamm3/composer.json"
],
...
J'ai mis à jour ma base de code avec ces commandes:
$ composer update
$ composer dumpauto
Et j'ai remarqué cette ligne dans la sortie du compositeur:
> Drupal\Core\Composer\Composer::vendorTestCodeCleanup
- Installing geedmo/yamm3 (1.1.0): Loading from cache
Ce qui est confirmé par un examen du système de fichiers:
$ ls vendor/geedmo/yamm3/
bower.json composer.json demo/ gulpfile.js index.html LICENSE.txt package.json README.md yamm/
J'ai activé le my_yamm3
module sur mon site, et sous admin/config/development/performance
, J'ai désactivé l'agrégation css.
Cependant, lorsque je charge la page, je ne vois pas les bibliothèques Yamm chargées dans l'onglet réseau de mon navigateur.
Suis-je en utilisant la bonne méthode pour charger une bibliothèque CSS tierce? Qu'est-ce que je fais mal?
[~ # ~] modifier [~ # ~] osman a demandé une confirmation de l'état de mon environnement. Dans ma drupal racine du projet, alors que j'ai /composer.json
et les répertoires /drush/
et /vendor/
, Je n'ai pas /scripts/
ni /web/
. Je suppose que cela signifie que je n'utilise pas le drupal-composer/drupal-project
projet.
En ce qui concerne ses ajouts recommandés à composer.json
, voici ce que j'avais:
"extra": {
"installer-paths": {
"core": ["type:drupal-core"],
"modules/contrib/{$name}": ["type:drupal-module"],
"profiles/contrib/{$name}": ["type:drupal-profile"],
"themes/contrib/{$name}": ["type:drupal-theme"],
"drush/contrib/{$name}": ["type:drupal-drush"],
"modules/custom/{$name}": ["type:drupal-custom-module"],
"themes/custom/{$name}": ["type:drupal-custom-theme"]
}
},
Encore une fois, il semble que je n'ai pas le projet composer?
Fondamentaux
Pour lier une bibliothèque CSS à votre installation Drupal, elle doit être définie et exposée via un fichier * .libraries.yaml.
Par exemple (tiré du thème chic du noyau):
book-navigation:
version: VERSION
css:
component:
css/components/book-navigation.css: {}
définit qu'il existe une bibliothèque appelée book-navigation
qui, lorsqu'il est inclus dans une page, fournira le css/components/book-navigation.css
fichier css.
Utilisation de composer avec des bibliothèques CSS tierces
Composer fonctionne facilement et de manière fiable pour les dépendances PHP, en utilisant le merge-plugin
de la façon dont vous avez commencé à travailler au PO. Mais, les bibliothèques CSS et Javascript, en particulier lorsqu'une étape de prétraitement ou de construction est requise, sont une autre histoire. Il s'agit d'un problème ouvert et non résolu (à ma connaissance et à ce jour), vous pouvez lire ce numéro pour avoir une idée des problèmes qui se posent:
Le problème principal est que lorsque vous importez la bibliothèque en tant que dépendance composer, comme vous l'avez fait, la bibliothèque est installée dans le répertoire vendor
où que se trouve . Vous ne pouvez donc pas supposer grand-chose à l'intérieur de votre fichier * library.yaml sur le chemin d'accès au (x) fichier (s) CSS/JS que vous souhaitez utiliser.
Alternative (A) sans compositeur: utilisation des définitions de bibliothèques CDN/hébergées en externe
Pour votre cas, et sous réserve que vous souhaitiez inclure ce fichier:
https://raw.githubusercontent.com/geedmo/yamm3/master/yamm/yamm.css
vous pouvez le définir dans votre fichier * bibliothèques.yaml comme une bibliothèque hébergée en externe (voir # external ):
my_module.yamm3:
remote: https://raw.githubusercontent.com/geedmo/yamm3/master/yamm/yamm.css
version: VERSION
license:
name: MIT
url: https://github.com/geedmo/yamm3/blob/master/LICENSE.txt
gpl-compatible: true
css:
theme:
https://raw.githubusercontent.com/geedmo/yamm3/master/yamm/yamm.css : { type: external }
N.B .: Cette approche doit toujours fournir les dernières yamm.css
version.
Alternative (B) sans compositeur: conserver une copie locale dans le dossier de votre propre module
Si vous placez le fichier CSS dans le dossier de votre module, par exemple css/yamm.css
, vous pourrez utiliser la définition yaml suivante dans votre fichier * .libraries.yaml afin de pouvoir l'utiliser:
my_module.yamm3:
version: VERSION
css:
theme:
css/yamm.css : {}
Attacher une bibliothèque à des pages
Enfin, après avoir défini votre bibliothèque, vous pouvez commencer à l'utiliser.
Ceci est largement documenté ici ( https://www.drupal.org/docs/8/creating-custom-modules/adding-stylesheets-css-and-javascript-js-to-a-drupal-8- module ) et je recommanderais de le lire si vous ne l'avez pas déjà fait.
Bonne chance!
Drupal 8 ne permet pas de configurer facilement des bibliothèques qui utilisent des fichiers dans le répertoire du fournisseur. Pour contourner cela, je viens de créer le module Vendor Stream Wrapper , qui crée un wrapper vendor: // stream, permettant la liaison aux fichiers dans le dossier du fournisseur, même s'il est en dehors de la racine Web.
Il est plus probable que votre répertoire vendor
soit hors de la racine Web. Pourriez-vous confirmer cela?
Si vous utilisez par hasard drupal-composer/drupal-project
projet, il aurait une structure de dossiers comme celle-ci:
/composer.json
/drush/
/scripts/
/vendor/
/web/
/web/core/
/web/libraries/
/web/modules/
/web/profiles/
/web/sites/
/web/themes/
...
Le dossier libraries
est le dossier dans lequel votre bibliothèque YAMM! 3 CSS doit être placée. Pour qu'elle soit également accessible via le Web.
Dans mon composer.json
fichier que j'ai Drupal dossiers spécifiques définis dans extra.installer-paths
:
...
"extra": {
"installer-paths": {
"web/core": ["type:drupal-core"],
"web/libraries/{$name}": ["type:drupal-library"],
"web/modules/contrib/{$name}": ["type:drupal-module"],
"web/profiles/contrib/{$name}": ["type:drupal-profile"],
"web/themes/contrib/{$name}": ["type:drupal-theme"],
"drush/contrib/{$name}": ["type:drupal-drush"]
}
}
Avec l'aide de composer/installers
package et la configuration dans extra
, chaque package requis par composer est copié dans leurs propres dossiers dédiés. Ainsi, le vôtre pourrait être copié dans le dossier libraries
.
Consultez le code et la documentation sur https://github.com/drupal-composer/drupal-project
Il devrait vous fournir tous les détails pour mettre à jour votre projet afin de prendre en charge ce dont vous avez besoin. Sinon, revenez pour plus :)