76 votes

Actifs de publication locaux avec Jekyll

Je me demandais comment les autres personnes organisent leurs ressources pour les articles individuels lorsqu'elles utilisent Jekyll. Par exemple, si un article contient une image, la déposez-vous simplement dans un dossier d'images partagé ? Je n'aime pas vraiment cette idée - cela signifie qu'une image est complètement séparée d'un article, alors que je pense qu'ils devraient être associés.

25voto

Sam Rayner Points 61

J'ai écrit un plugin pour me permettre d'organiser facilement les ressources dans des sous-répertoires :
https://github.com/samrayner/jekyll-asset-path-plugin

{% asset_path my-image.png %}

dans l'article 2013-01-01-post-title afficherait :

/assets/posts/post-title/my-image.png

dans la page my-first-page afficherait :

/assets/my-first-page/my-image.png

20voto

Alan W. Smith Points 6704

Je préfère penser aux images comme des actifs autonomes qui sont inclus dans zéro ou plusieurs pages. La plupart du temps, mes images apparaissent dans une seule page. Il y a des occasions où je veux les avoir dans plusieurs pages et dans d'autres cas je ne lie pas du tout une image. Si votre flux de travail consiste à mettre chaque image dans un répertoire avec un article, les trouver commence à nécessiter une quantité importante de recherche et vous devez trouver une solution différente pour les images qui n'appartiennent pas à un article spécifique.

L'approche que j'utilise est à l'opposé du spectre. J'ai un seul répertoire d'images (servi depuis "/images") et 100% de mes images y sont stockées. Les avantages de cela sont:

  1. Lorsque j'ajoute une image à un article, il est facile de savoir quel chemin utiliser. C'est toujours :

    /images/{nom-de-l'image}

    Par exemple: http://alanwsmith.com/i/aws-20111017--0906-02. Cela permet d'écrire un plug-in pour que tout ce que vous avez à faire est d'entrer le nom de l'image et le reste du chemin connu est rempli automatiquement.

  2. Avec une application comme Photo Mechanic, il est incroyablement facile de parcourir le seul répertoire localement et de voir chaque image. Si je veux inclure une image sur une autre page, cela réduit considérablement le temps nécessaire pour la trouver.

  3. Il n'y a pas d'emplacement/processus séparé si je veux envoyer une image à quelqu'un sans l'inclure réellement dans une page (c.-à-d. leur envoyer un lien direct vers le fichier image). je place simplement l'image dans le répertoire standard et j'envoie le lien direct.

Si vous voulez aller un peu plus loin, garder toutes vos images dans un seul répertoire rend possible quelques belles modifications également. Par exemple, même si les URL de mes images commencent par "/images", les images sont en réalité stockées dans un répertoire en dehors de ceux utilisés par jekyll. Dans mon cas, le sommet de mon arborescence source ressemble à ceci :

./html
./source-files
./image-files

Toutes mes images sont stockées dans le répertoire "./image-files". Dans ma configuration Apache, j'ai configuré un alias de sorte que l'URL "/images" pointe vers le répertoire "./image-files". Par exemple:

Alias /images /webroot/image-files

Lorsque j'exécute jekyll, il traite tout dans "./source-files" et le dépose dans "./html". Puisque toutes les images sont en dehors de ces deux répertoires, jekyll ne les voit/touche jamais. À mesure que votre bibliothèque d'images grandit, cela aidera à accélérer les choses et évitera une quantité énorme de copie de fichiers inutile.

Une autre modification que j'aime dans Apache est d'activer:

Options +MultiViews

Cela vous permet d'appeler vos images sans avoir à utiliser l'extension de fichier (par exemple pas de '.jpg', '.png', etc...). Vous pouvez voir cela dans le lien exemple que j'ai fourni ci-dessus. Cela n'a pas vraiment d'importance pour la performance. J'aime juste le rendu visuel et cela m'épargne de devoir taper l'extension à chaque fois que j'appelle une image.

MultiViews permet également de remplacer une image d'un format par une autre sans avoir à recoder autre chose. Par exemple, si vous supprimez "some-image.gif" et le remplacez par "some-image.png", vous n'auriez pas besoin de modifier le HTML. Ce dernier serait toujours servi depuis "/images/some-image". Il est probable que vous ayez rarement besoin de faire des changements de ce genre. Je trouve juste intéressant de pouvoir le faire.

Enfin, vous pouvez prendre une décision unique concernant autoriser ou interdire la navigation dans votre répertoire d'images. Personnellement, je veux que mes images apparaissent là où je les ai placées. Ainsi, j'ai réglé le fichier .htaccess dans mon répertoire d'images sur :

Options -Indexes

Si vous allez travailler sur un site avec des milliers ou dizaines de milliers de pages et d'images, cela pourrait ne pas être scalable. Pour un site personnel de taille normale, je trouve que cette approche facilite la maintenance des images.

7 votes

Pourquoi est-ce la réponse acceptée? Cela n'offre pas de conseils techniques sur comment co-localiser. Je suis d'accord avec le cas d'utilisation pour cette réponse, mais il y a aussi des images que je n'ai pas l'intention de partager de manière générique en dehors d'un article de blog - et dans ces cas, je ne veux pas encombrer mon dossier d'images avec elles.

1 votes

@ianstarz - Je répondais simplement à la première partie de la question demandant comment les gens gèrent les images. Alors que la personne posant la question a initialement déclaré qu'elle n'aimait pas l'idée de mettre les images dans un seul dossier, elle a apparemment changé d'avis. J'ai trouvé que la séparation des préoccupations offerte par le maintien des images dans leur propre arborescence de répertoires (par exemple, vous pouvez également avoir des sous-répertoires) et le fait de savoir qu'il n'y a qu'un seul endroit où les images sont stockées sont utiles. Mais c'est juste une question de préférence personnelle et des options comme la réponse de SamRayner sur stackoverflow.com/a/19635916/102401 sont parfaitement légitimes.

12voto

Nicolas Hoizey Points 87

J'ai maintenant réussi à développer un plugin Jekyll qui aide à conserver les actifs des publications aux côtés du fichier Markdown : https://nhoizey.github.io/jekyll-postfiles/

9voto

Nicolas Hoizey Points 87

Tout comme vous, je déteste vraiment avoir toutes les images dans un seul dossier partagé.

La plupart, sinon toutes, de mes images sont utiles dans un seul post, et les garder aux côtés du fichier Markdown est vraiment mieux pour la gestion des posts :

  • Je peux déposer un nouveau post comme un seul sous-dossier de /_posts/ en une seule étape, sans avoir à mettre le Markdown à un endroit et l'image(s) à un autre
  • Quand je veux modifier l'image(s) d'un post existant, je n'ai pas besoin de chercher la bonne image dans un énorme dossier /assets/, elle se trouve juste à côté du fichier Markdown
  • Dans mon Markdown, je peux utiliser le nom du fichier image directement, sans aucun chemin
  • Si je veux utiliser un éditeur Markdown avec prévisualisation en direct, cela fonctionne, pas besoin d'une configuration spécifique du dossier assets

J'ai essayé d'avoir cela pour mon blog (exemple de post ici).

Pour les images responsives, j'ai utilisé le plugin Jekyll Picture Tag, mais j'ai dû le forker, car la Pull Request pour gérer de tels chemins n'a pas été acceptée.

Maintenant que Jekyll 3 est là, j'aimerais qu'il nous permette d'utiliser les images à la fois dans un dossier de post ET dans le dossier /assets/, cherchant une image marquée avec ![alt](image-file-without-path.jpg) dans les deux, dans cet ordre.

0voto

Full Decent Points 4453

Cette réponse:

  • Ne pas utiliser de plugins (fonctionne avec GitHub Pages)
  • Vous permet de garder les images directement à côté de leurs messages pertinents
  • Vous permet de modifier en utilisant Typora localement et de voir les images WYSIWYG

Il suffit de nommer vos dossiers comme _posts/2020-10-10-My-Title/ et inclure des fichiers comme index.md et hero.svg ou d'autres images.

Ensuite, définissez votre clé permalink: dans _config.yaml à :path.

Astuce :

  • Les noms de vos dossiers doivent être en version slug
  • Toutes vos images doivent être en format SVG

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X