[{"data":1,"prerenderedAt":825},["ShallowReactive",2],{"projets-all-all":3,"posts":344},[4,21,32,43,53,64,78,88,99,111,121,131,146,155,164,173,183,192,202,212,223,236,246,255,265,277,288,297,308,318,327,335],{"id":5,"title":6,"description":7,"extension":8,"meta":9,"order":10,"stem":11,"tags":12,"url":19,"__hash__":20},"projets\u002Fprojets\u002Flibeo\u002Fsentinelle-nord.yml","Rapports d’activités 2021-2022","Sentinelle Nord cherche à mettre en valeur le résultat de ses recherches. Grâce à ce nouveau micro-site, les données n'auront jamais été si bien mises en valeur !","yml",{},21,"projets\u002Flibeo\u002Fsentinelle-nord",[13,14,15,16,17,18],"SSG","Vue.js 2","Nuxt.js 2","Foundation","GSAP","i18n",null,"Ewc1JWKjDYoYParit8W4qe_EVqv_s56h6SprV9O11bI",{"id":22,"title":23,"description":24,"extension":8,"meta":25,"order":26,"stem":27,"tags":28,"url":30,"__hash__":31},"projets\u002Fprojets\u002Flibeo\u002Faseq.yml","Section contact ASEQ","L'ASEQ cherche à simplifier la vie de ses membres en leur offrant un formulaire multi-étapes afin que ceux-ci puissent s'informer et profiter des avantages de sa couverture santé et dentaire.",{},20,"projets\u002Flibeo\u002Faseq",[29,18],"Laravel","https:\u002F\u002Fcontact.aseq.ca\u002F","vkVCXhTKxmd3-ppyKwhChlwmTMaudPvD32WYzOFdQfE",{"id":33,"title":34,"description":35,"extension":8,"meta":36,"order":37,"stem":38,"tags":39,"url":41,"__hash__":42},"projets\u002Fprojets\u002Flibeo\u002Feeq.yml","École des entrepreneurs du Québec","L'École des entrepreneurs du Québec (ÉEQ) ouvre son Campus Virtuel afin d'aider les jeunes entrepreneurs à développer leurs compétences entrepreneuriales grâce à ses nombreuses formations en ligne.",{},19,"projets\u002Flibeo\u002Feeq",[14,15,16,40,18],"Auth","https:\u002F\u002Fapp.eequebec.com\u002F","dGC348E4bvsonQA-Cd0ZH07K89IQKCmJEbThxbJg30o",{"id":44,"title":45,"description":46,"extension":8,"meta":47,"order":48,"stem":49,"tags":50,"url":51,"__hash__":52},"projets\u002Fprojets\u002Flibeo\u002Fmcel.yml","Mon commerce en ligne","L'Association Québécoise des Technologies (AQT) s'allie avec l'École des entrepreneurs du Québec (ÉEQ) afin d'offrir une plateforme de formation en ligne à tous les commerçants du Québec cherchant à améliorer leurs compétences numériques.",{},18,"projets\u002Flibeo\u002Fmcel",[14,15,16,40,18],"https:\u002F\u002Fapp.moncommerceenligne.org\u002F","ELPubN58NRh1yF9CEr3pUNz_WVN2Z509Rxec0NGPk0A",{"id":54,"title":55,"description":56,"extension":8,"meta":57,"order":58,"stem":59,"tags":60,"url":62,"__hash__":63},"projets\u002Fprojets\u002Flibeo\u002Faeq.yml","Accès Entreprise Québec","Accès Entreprise Québec (AEQ) s'allie avec l'École des entrepreneurs du Québec (ÉEQ) afin d'offrir un service d'accompagnement offert par les municipalités régionales de comté (MRC) aux entrepreneurs dans les régions du Québec.",{},17,"projets\u002Flibeo\u002Faeq",[14,15,16,61,29,40,18],"Headless","https:\u002F\u002Fapp.aeq.eequebec.com\u002F","wUX3dkPZpX_64AVlehsyD-JrNEFHEwt1EPAv25WMT5A",{"id":65,"title":66,"description":67,"extension":8,"meta":68,"order":69,"stem":70,"tags":71,"url":76,"__hash__":77},"projets\u002Fprojets\u002Flibeo\u002Fcira.yml","CIRA Bouclier Canadien","Le registraire du domaine .CA cherche à créer une extension Chrome et Firefox tirant parti de sa large liste de sites frauduleux afin de protéger gratuitement les Canadiens tout en respectant les nouvelles règles du Manifest V3 de Google.",{},16,"projets\u002Flibeo\u002Fcira",[72,73,74,75],"Chrome","Firefox","WebExtension","Manifest v3","https:\u002F\u002Fchrome.google.com\u002Fwebstore\u002Fdetail\u002Fcira-canadian-shield\u002Fooeeeeagdccjhajmnpjenpkmphbkppnp","vLh0OTsQgAsrHzbAcUuqz4Ns6rUfB0jruI96vCGRGK0",{"id":79,"title":80,"description":81,"extension":8,"meta":82,"order":83,"stem":84,"tags":85,"url":86,"__hash__":87},"projets\u002Fprojets\u002Flibeo\u002Fmasw-ai.yml","masw.ai","La réalisation de cette plateforme a permis à GPR d'être la première et seule plateforme de traitement MASW assistée par sa solution novatrice d'apprentissage automatique sur le Cloud.",{},15,"projets\u002Flibeo\u002Fmasw-ai",[14,15,40,18],"https:\u002F\u002Fmasw.ai\u002F","VTBh-X5BOozWU_6PWPuHSEolX2WaIQITHTOIWFEpn10",{"id":89,"title":90,"description":91,"extension":8,"meta":92,"order":93,"stem":94,"tags":95,"url":97,"__hash__":98},"projets\u002Fprojets\u002Flibeo\u002Ftslsj.yml","Tourisme Saguenay-Lac-Saint-Jean","Grâce au nouveau site web de Tourisme Saguenay–Lac-Saint-Jean, vous trouverez facilement l'endroit idéal pour vos escapades estivales, que ce soit pour s'amuser, manger ou dormir.",{},14,"projets\u002Flibeo\u002Ftslsj",[96],"Typo3","https:\u002F\u002Fsaguenaylacsaintjean.ca\u002F","B9cXgPrGbyrdONB7nWBgrY4WIKpfVoWm9fwJUqM5s18",{"id":100,"title":101,"description":102,"extension":8,"meta":103,"order":104,"stem":105,"tags":106,"url":109,"__hash__":110},"projets\u002Fprojets\u002Flibeo\u002Fcsm.yml","Centre des sciences de Montréal","Le Centre des Sciences de Montréal s'offre une refonte visuelle afin de mettre en valeur ses différentes activités.",{},13,"projets\u002Flibeo\u002Fcsm",[107,108],"Drupal","a11y","https:\u002F\u002Fwww.centredessciencesdemontreal.com\u002F","sBO4CFGZbOW6cRFwpKEiyhPHW5V0qoesk4E9984MeGM",{"id":112,"title":113,"description":114,"extension":8,"meta":115,"order":116,"stem":117,"tags":118,"url":119,"__hash__":120},"projets\u002Fprojets\u002Flibeo\u002Fvpmo.yml","Vieux Port de Montréal","La Société du Vieux-Port de Montréal s'offre une refonte visuelle afin de mettre en valeur ses différentes activités.",{},12,"projets\u002Flibeo\u002Fvpmo",[107,108],"https:\u002F\u002Fwww.vieuxportdemontreal.com\u002F","mXNouEq8CnDNTvStV_B03l3KACW8JJTElwU5frU3BSc",{"id":122,"title":123,"description":124,"extension":8,"meta":125,"order":126,"stem":127,"tags":128,"url":129,"__hash__":130},"projets\u002Fprojets\u002Flibeo\u002Fmon-passage-au-secondaire.yml","Mon passage au secondaire","Le produit numérique de la CSSDPS « mon passage au secondaire » a comme objectif d’aider les jeunes dans leur transition au secondaire.",{},11,"projets\u002Flibeo\u002Fmon-passage-au-secondaire",[96],"https:\u002F\u002Fmonpassageausecondaire.csdps.qc.ca\u002Faccueil\u002F","CNTw16JB6RbRxtQnKsBGbUooMHG7Qj2Qn1Mluufx0dQ",{"id":132,"title":133,"description":134,"extension":8,"meta":135,"order":136,"stem":137,"tags":138,"url":144,"__hash__":145},"projets\u002Fprojets\u002Flibeo\u002Fboukili.yml","Boukili","Boukili a pour but de promouvoir la langue de Molière par la lecture, des jeux et des questionnaires en français, via une application ludique pour les enfants et le monde de la pédagogie francophone.",{},10,"projets\u002Flibeo\u002Fboukili",[139,140,141,142,143],"App","iOS","Android","Quasar Framework","Cordova","https:\u002F\u002Fapp.boukili.ca\u002F","a4w8WM_C-rdHZmST6SinolxejVWWvY2T39bXHxWAQ6k",{"id":147,"title":148,"description":149,"extension":8,"meta":150,"order":136,"stem":151,"tags":152,"url":19,"__hash__":154},"projets\u002Fprojets\u002Flibeo\u002Fvisezeau.yml","VisezEau à l'école","La plateforme VisezEau permet aux parents et enfants de la 3e à la 6e année du primaire de fournir les renseignements nécessaires au bon déroulement du programme qui a pour but de mettre en valeur l’eau potable non embouteillée comme alternative aux boissons sucrées.",{},"projets\u002Flibeo\u002Fvisezeau",[14,15,16,61,153,40],"Django","ifh8lLB7M05wFFbal50wQvbTJ1de-V7DJfRdQ540P3A",{"id":156,"title":157,"description":158,"extension":8,"meta":159,"order":160,"stem":161,"tags":19,"url":162,"__hash__":163},"projets\u002Fprojets\u002Flibeo\u002Ftafisa.yml","Tafisa","[object Object]",{},9,"projets\u002Flibeo\u002Ftafisa","https:\u002F\u002Ftafisa.ca\u002F","tTCtLuyHvUNAKxD9zdssJ8atD1-YEUj4Kzky0GAK5AA",{"id":165,"title":166,"description":167,"extension":8,"meta":168,"order":169,"stem":170,"tags":171,"url":19,"__hash__":172},"projets\u002Fprojets\u002Flibeo\u002Fbell-ot-tool.yml","Bell OT Tool","Dans le but de simplifier sa gestion des heures supplémentaires, Bell Canada se dote d'une plateforme d'approbation des demandes ainsi que de la gestion de la consommation des heures accumulées.",{},8,"projets\u002Flibeo\u002Fbell-ot-tool",[153,16],"JgqH3TIcc4dm7X2Ndzkv7m4FeRpcC-82mMfTWBDJb54",{"id":174,"title":175,"description":176,"extension":8,"meta":177,"order":178,"stem":179,"tags":180,"url":181,"__hash__":182},"projets\u002Fprojets\u002Flibeo\u002Fcpnsss.yml","Comité patronal de négociation du secteur de la santé et des services sociaux","Le Comité patronal de négociation du secteur de la santé et des services sociaux (CPNSSS) s'offre un nouveau site moderne et responsive qui permettra aux membres de consulter leurs documents de manière sécurisée afin de répondre à leurs questions sur les conditions de travail liées au domaine.",{},7,"projets\u002Flibeo\u002Fcpnsss",[96,40],"https:\u002F\u002Fcpnsss.gouv.qc.ca\u002F","J_fWrEbTgfDoLFzgYW9mXWO_bK8H7Nm6SVruQEAz9XE",{"id":184,"title":185,"description":186,"extension":8,"meta":187,"order":178,"stem":188,"tags":189,"url":19,"__hash__":191},"projets\u002Fprojets\u002Flibeo\u002Fitis.yml","Institut Technologies de l'information et Sociétés (ITIS)","Ce nouveau site de l'Université Laval est une vitrine sur les programmes, formations, événements et ressources offertes par l'Institut Technologies de l’information et Sociétés (ITIS).",{},"projets\u002Flibeo\u002Fitis",[190],"Wordpress","a8At9aIe2XtWNzsZFsL5aMyQMh3GyAWnXxB14fjvHSg",{"id":193,"title":194,"description":195,"extension":8,"meta":196,"order":197,"stem":198,"tags":199,"url":200,"__hash__":201},"projets\u002Fprojets\u002Flibeo\u002Flarochelle.yml","Larochelle Groupe Conseil","Larochelle Groupe Conseil s'offre un nouveau site web afin de mettre en avant son offre de services-conseils spécialisés en technologies de l'information et en solutions d'affaires. Avec une nouvelle section carrière, Larochelle se donne les moyens d'agrandir son équipe de plus d'une centaine de conseillers.",{},6,"projets\u002Flibeo\u002Flarochelle",[190],"https:\u002F\u002Fwww.larochellegc.com\u002F","qDUTaKEHaZ4V4Of8AiWx2os5EagFaiNwquR0DVgHNOo",{"id":203,"title":204,"description":205,"extension":8,"meta":206,"order":207,"stem":208,"tags":209,"url":210,"__hash__":211},"projets\u002Fprojets\u002Flibeo\u002Flibeo-com.yml","Libeo.com","Après l'annonce d'ouverture de nouveaux bureaux à Montréal, Libéo se dote d'une nouvelle image de marque et d'un nouveau site web afin d'informer les clients sur ses caractéristiques uniques comme la co-conception et le Design Sprint.",{},5,"projets\u002Flibeo\u002Flibeo-com",[190],"https:\u002F\u002Flibeo.com\u002F","UR4QzDL5--OPAKHYv7TWQ6tl6Fh9ni8tA27-85Y618s",{"id":213,"title":214,"description":215,"extension":8,"meta":216,"order":217,"stem":218,"tags":219,"url":221,"__hash__":222},"projets\u002Fprojets\u002Flibeo\u002Fcpn.yml","Comités patronaux de négociation","La nouvelle plateforme des Comités patronaux de négociation des secteurs de l'éducation et de l'enseignement supérieur (CPN) est un multi-site qui leur permet de regrouper toutes les informations des cinq comités (CPNCF, CPNC, CPNCA, CPNCSC, CPNCSK) en un seul endroit.",{},4,"projets\u002Flibeo\u002Fcpn",[190,220,40],"Multisite","https:\u002F\u002Fcpn.gouv.qc.ca\u002F","_GpGRH9lELmIV1oS5nhRiFcEU0mXQUXaDId5RYxYW84",{"id":224,"title":225,"description":226,"extension":8,"meta":227,"order":217,"stem":228,"tags":229,"url":234,"__hash__":235},"projets\u002Fprojets\u002Fpersonnels\u002Fmrleblanc101-github-io.yml","mrleblanc101.github.io","En 2023, il était temps de remettre à jour mon site personnel. J'ai donc exploré l'utilisation de Nuxt 3 et Nuxt Content pour créer un blog généré statiquement qui serait hébergé gratuitement sur GitHub Pages.",{},"projets\u002Fpersonnels\u002Fmrleblanc101-github-io",[13,230,231,232,233],"Nuxt.js 3","Vue.js 3","Tailwindcss","Nuxt Content","https:\u002F\u002Fmrleblanc101.github.io\u002F","fFb2uuQ8eFwGziPi1yqSL3CDMR31S9VgleLkr0Ncuqo",{"id":237,"title":238,"description":239,"extension":8,"meta":240,"order":241,"stem":242,"tags":243,"url":244,"__hash__":245},"projets\u002Fprojets\u002Flibeo\u002Fbmr.yml","L'atelier","L'espace marchand du Groupe BMR permet aux différents quincailliers indépendants d'avoir accès à une foule d'informations telles que les changements de prix à venir, les errata des circulaires, une estimation du prix du bois d'oeuvre à venir, ainsi qu'une foule d'informations pertinentes.",{},3,"projets\u002Flibeo\u002Fbmr",[14,16,61,153,40],"https:\u002F\u002Fatelier.bmr.co\u002F","ZzaB7tsXA7xrlOsSIHrAumiVzbAYdzQEM_WCQemlD7I",{"id":247,"title":248,"description":249,"extension":8,"meta":250,"order":241,"stem":251,"tags":252,"url":253,"__hash__":254},"projets\u002Fprojets\u002Flibeo\u002Frtcquebec.yml","Réseau de transport de la Capitale","Au terme d'un processus d'appel d'offres rigoureux, Libéo a fièrement été sélectionnée pour remplacer le système de gestion de contenu du RTC. Ce projet apportera le RTC dans le monde moderne avec un site web responsive !",{},"projets\u002Flibeo\u002Frtcquebec",[14,15,16,61,107,40,18,108],"https:\u002F\u002Fwww.rtcquebec.ca\u002F","amjfvGmX_vThz1tjQZbzM9SgFvKfEDu__pZipa7DVVg",{"id":256,"title":257,"description":258,"extension":8,"meta":259,"order":241,"stem":260,"tags":261,"url":263,"__hash__":264},"projets\u002Fprojets\u002Fpersonnels\u002Fneobigben.yml","NeoBigben","Afin d'explorer les nouveautés de Nuxt 3, j'ai développé une petite application de Time Tracking pendant le temps des fêtes 2022-2023. Cela m'a permis de faire mes premiers pas avec Vue 3 et TypeScript.",{},"projets\u002Fpersonnels\u002Fneobigben",[13,230,231,232,18,262],"TypeScript","https:\u002F\u002Fmrleblanc101.github.io\u002Fneobigben\u002F","qUYuu4B6hNcZ4BUYnJPjXaae2yw-K08t95bjIoLpuO0",{"id":266,"title":267,"description":268,"extension":8,"meta":269,"order":270,"stem":271,"tags":272,"url":275,"__hash__":276},"projets\u002Fprojets\u002Flibeo\u002Fshowbizz-net.yml","Showbizz.net","Showbizz.net, le site québécois d'actualité artistique le plus fréquenté au Québec se refait une beauté. Avec une nouvelle plateforme moderne et une image de marque actualisée, Showbizz.net est prêt pour la prochaine saison télé.",{},2,"projets\u002Flibeo\u002Fshowbizz-net",[14,16,61,273,274],"Directus","Graph QL","https:\u002F\u002Fshowbizz.net\u002F","MezoxkxpF3Fr1Zmj86EKqSTz4-zkYST0wp08jeAsuak",{"id":278,"title":279,"description":280,"extension":8,"meta":281,"order":270,"stem":282,"tags":283,"url":286,"__hash__":287},"projets\u002Fprojets\u002Flibeo\u002Ftca.yml","Tourisme Chaudière-Appalaches","En invitant les visiteurs à rencontrer des gens de passion et « À vivre pour vrai » la région de la Chaudière-Appalaches, l’organisme souhaite se doter d’une forte présence Web.",{},"projets\u002Flibeo\u002Ftca",[284,285],"Django Template","Django CMS","https:\u002F\u002Fchaudiereappalaches.com\u002F","obgU0g8fYQhRbqmIWxHC3GAKSapmtAPS4MIMo7Gtpp4",{"id":289,"title":290,"description":291,"extension":8,"meta":292,"order":270,"stem":293,"tags":294,"url":295,"__hash__":296},"projets\u002Fprojets\u002Fpersonnels\u002Fagence-helium.yml","Agence Hélium","En tant que nouvelle agence, Hélium était à la recherche d'un développeur Front-End freelance afin de réaliser l'intégration des maquettes de leur site web vitrine que j'ai eu le plaisir de développer.",{},"projets\u002Fpersonnels\u002Fagence-helium",[13,15,14,233],"https:\u002F\u002Fagencehelium.com\u002F","tzzSm4bqG52sBxnqFZ26nf3x0QzpMgNHeqAEAdHvUIY",{"id":298,"title":299,"description":300,"extension":8,"meta":301,"order":302,"stem":303,"tags":304,"url":306,"__hash__":307},"projets\u002Fprojets\u002Flibeo\u002Fmilliplein.yml","Milliplein","Le programme de récompenses Milliplein a fait peau neuve en 2018 et permet d'accumuler plus de récompenses et ce, encore plus vite.",{},1.5,"projets\u002Flibeo\u002Fmilliplein",[305],"Statamic","https:\u002F\u002Fmilliplein.com\u002F","JhcfwDm3InmP7F6neBNyBC8ZgLEcZvLF3wrKGq5VjG0",{"id":309,"title":310,"description":311,"extension":8,"meta":312,"order":313,"stem":314,"tags":315,"url":316,"__hash__":317},"projets\u002Fprojets\u002Flibeo\u002Fcsq-sitebuilder.yml","CSQ Sitebuilder","Pour servir tous ses membres, la CSQ a besoin d'une plateforme Web qui permet à ses différents syndicats et fédérations de créer et administrer leurs sites web dans une image de marque unifiée.",{},1,"projets\u002Flibeo\u002Fcsq-sitebuilder",[190,220],"https:\u002F\u002Ffpep.lacsq.org\u002F","VkOZEpV-Twr5B_fjKXhpat71vWtnAsGbBxSSYdVpyKs",{"id":319,"title":320,"description":321,"extension":8,"meta":322,"order":313,"stem":323,"tags":324,"url":325,"__hash__":326},"projets\u002Fprojets\u002Flibeo\u002Fla-csq.yml","La CSQ","Le nouveau site de la CSQ a pour but d'être facile d'utilisation, centré sur les utilisateurs et qui centralise une panoplie d'actifs numériques au même endroit.",{},"projets\u002Flibeo\u002Fla-csq",[190],"http:\u002F\u002Fwww.lacsq.org\u002F","kbaTwfYbhy1W5qC7v64a__XRmi25v2473tq-t86BUhY",{"id":328,"title":329,"description":330,"extension":8,"meta":331,"order":313,"stem":332,"tags":333,"url":19,"__hash__":334},"projets\u002Fprojets\u002Flibeo\u002Fpreverco.yml","Préverco","Au coeur du projet Web de Préverco : la simplification du choix d’un plancher en coupant dans le jargon. Voyez comment leur nouveau site met réellement le client au centre de l’expérience produit.",{},"projets\u002Flibeo\u002Fpreverco",[107],"1qM0H0q1ruYCiOnFwjVH5iGyfZfB0f7YD_ZmKx017Ec",{"id":336,"title":337,"description":338,"extension":8,"meta":339,"order":313,"stem":340,"tags":341,"url":342,"__hash__":343},"projets\u002Fprojets\u002Fopen-source\u002Fwaq.yml","Web à Québec (Éditions 2019 et 2020)","En 2019, le Web à Québec est à la recherche de bénévoles afin de renforcer son équipe web à l'approche de la prochaine édition. Pendant ma participation, j'ai eu le plaisir de travailler sur l'édition 2019 et 2020 du site web.",{},"projets\u002Fopen-source\u002Fwaq",[14,61,190,40,18],"https:\u002F\u002Fwebaquebec.org\u002F","H59msu3ZzK3-4hp3IzKR4lAVONNfrFkeYracUw5LFGs",[345,787],{"id":346,"title":347,"body":348,"createdAt":773,"description":774,"extension":775,"meta":776,"navigation":480,"path":777,"pinned":778,"readingTime":779,"seo":784,"stem":785,"__hash__":786},"blog\u002Fblog\u002F2023-01-17-momentjs-avec-nuxt3.md","Utiliser moment.js avec Nuxt 3",{"type":349,"value":350,"toc":771},"minimark",[351,363,372,379,389,398,407,692,695,701,710,713,734,737,740,753,767],[352,353,354,355,362],"p",{},"Vous avez peut-être remarqué que le module ",[356,357,361],"a",{"href":358,"rel":359},"https:\u002F\u002Fgithub.com\u002Fnuxt-community\u002Fmoment-module",[360],"nofollow","@nuxtjs\u002Fmoment"," n'est pas compatible avec Nuxt 3.",[352,364,365,366,371],{},"Vous vous demandez sans doute pourquoi a-t-on besoin d'un module pour utiliser ",[356,367,370],{"href":368,"rel":369},"https:\u002F\u002Fmomentjs.com\u002F",[360],"moment.js"," dans Nuxt ?",[352,373,374,375,378],{},"Dans Nuxt 2, lorsque vous utilisez ",[376,377,370],"code",{},", Webpack importe toutes les locales par défaut. Cela équivaut à plus d'une centaine de locales qui sont importées alors que vous n'avez probablement besoin que d'une ou deux d'entre elles.",[352,380,381,382,384,385,388],{},"Voilà où entre en jeu ",[376,383,361],{},"; celui-ci se charge de supprimer les locales inutiles en utilisant ",[376,386,387],{},"moment-locales-webpack-plugin"," afin de réduire la taille du bundle de votre application.",[352,390,391,392,397],{},"Si vous avez suivi l'actualité, vous savez peut-être que Nuxt 3 utilise maintenant ",[356,393,396],{"href":394,"rel":395},"https:\u002F\u002Fvitejs.dev\u002F",[360],"Vite.js"," au lieu de Webpack afin de bundler votre application. Il n'est donc plus nécessaire de supprimer les locales inutilisées du bundle puisque Vite.js s'en charge déjà grâce à son meilleur support du tree-shaking.",[352,399,400,401,406],{},"Voici comment créer votre propre plugin pour utiliser moment.js directement dans une application multilingue utilisant ",[356,402,405],{"href":403,"rel":404},"https:\u002F\u002Fv8.i18n.nuxtjs.org\u002F",[360],"@nuxtjs\u002Fi18n"," et TypeScript dans Nuxt 3.",[408,409,416],"pre",{"className":410,"code":411,"filename":412,"highlights":413,"language":414,"meta":415,"style":415},"language-js shiki shiki-themes solarized-light solarized-dark","import moment from 'moment';\nimport 'moment\u002Flocale\u002Ffr-ca';\nimport type { NuxtApp } from '#app';\n\nexport default defineNuxtPlugin((nuxtApp) => {\n    const locale = nuxtApp.$i18n.locale.value;\n    moment.locale(locale);\n\n    nuxtApp.$i18n.onBeforeLanguageSwitch = (\n        oldLocale: string,\n        newLocale: string,\n        isInitialSetup: boolean,\n        nuxtApp: NuxtApp\n    ) => {\n        moment.locale(newLocale);\n    };\n\n    return {\n        provide: {\n            moment,\n        },\n    };\n});\n","plugins\u002Fmoment.ts",[270],"js","",[376,417,418,441,452,476,482,503,535,552,556,575,589,600,612,623,632,648,653,657,664,669,676,681,686],{"__ignoreMap":415},[419,420,422,426,430,433,437],"span",{"class":421,"line":313},"line",[419,423,425],{"class":424},"sxPyI","import",[419,427,429],{"class":428},"sCW-z"," moment",[419,431,432],{"class":424}," from",[419,434,436],{"class":435},"sNx9Q"," 'moment'",[419,438,440],{"class":439},"skhcD",";\n",[419,442,445,447,450],{"class":443,"line":270},[421,444],"highlight",[419,446,425],{"class":424},[419,448,449],{"class":435}," 'moment\u002Flocale\u002Ffr-ca'",[419,451,440],{"class":439},[419,453,454,456,459,462,465,468,471,474],{"class":421,"line":241},[419,455,425],{"class":424},[419,457,458],{"class":424}," type",[419,460,461],{"class":439}," { ",[419,463,464],{"class":428},"NuxtApp",[419,466,467],{"class":439}," } ",[419,469,470],{"class":424},"from",[419,472,473],{"class":435}," '#app'",[419,475,440],{"class":439},[419,477,478],{"class":421,"line":217},[419,479,481],{"emptyLinePlaceholder":480},true,"\n",[419,483,484,487,490,493,496,500],{"class":421,"line":207},[419,485,486],{"class":424},"export",[419,488,489],{"class":424}," default",[419,491,492],{"class":428}," defineNuxtPlugin",[419,494,495],{"class":439},"((nuxtApp) ",[419,497,499],{"class":498},"sNKNx","=>",[419,501,502],{"class":439}," {\n",[419,504,505,508,511,514,517,520,523,525,528,530,533],{"class":421,"line":197},[419,506,507],{"class":498},"    const",[419,509,510],{"class":428}," locale",[419,512,513],{"class":424}," =",[419,515,516],{"class":428}," nuxtApp",[419,518,519],{"class":439},".",[419,521,522],{"class":428},"$i18n",[419,524,519],{"class":439},[419,526,527],{"class":428},"locale",[419,529,519],{"class":439},[419,531,532],{"class":428},"value",[419,534,440],{"class":439},[419,536,537,540,542,544,547,549],{"class":421,"line":178},[419,538,539],{"class":428},"    moment",[419,541,519],{"class":439},[419,543,527],{"class":428},[419,545,546],{"class":439},"(",[419,548,527],{"class":428},[419,550,551],{"class":439},");\n",[419,553,554],{"class":421,"line":169},[419,555,481],{"emptyLinePlaceholder":480},[419,557,558,561,563,565,567,570,572],{"class":421,"line":160},[419,559,560],{"class":428},"    nuxtApp",[419,562,519],{"class":439},[419,564,522],{"class":428},[419,566,519],{"class":439},[419,568,569],{"class":428},"onBeforeLanguageSwitch",[419,571,513],{"class":424},[419,573,574],{"class":439}," (\n",[419,576,577,580,583,586],{"class":421,"line":136},[419,578,579],{"class":439},"        oldLocale",[419,581,582],{"class":424},":",[419,584,585],{"class":424}," string",[419,587,588],{"class":439},",\n",[419,590,591,594,596,598],{"class":421,"line":126},[419,592,593],{"class":439},"        newLocale",[419,595,582],{"class":424},[419,597,585],{"class":424},[419,599,588],{"class":439},[419,601,602,605,607,610],{"class":421,"line":116},[419,603,604],{"class":439},"        isInitialSetup",[419,606,582],{"class":424},[419,608,609],{"class":424}," boolean",[419,611,588],{"class":439},[419,613,614,617,619],{"class":421,"line":104},[419,615,616],{"class":439},"        nuxtApp",[419,618,582],{"class":424},[419,620,622],{"class":621},"s7NzM"," NuxtApp\n",[419,624,625,628,630],{"class":421,"line":93},[419,626,627],{"class":439},"    ) ",[419,629,499],{"class":498},[419,631,502],{"class":439},[419,633,634,637,639,641,643,646],{"class":421,"line":83},[419,635,636],{"class":428},"        moment",[419,638,519],{"class":439},[419,640,527],{"class":428},[419,642,546],{"class":439},[419,644,645],{"class":428},"newLocale",[419,647,551],{"class":439},[419,649,650],{"class":421,"line":69},[419,651,652],{"class":439},"    };\n",[419,654,655],{"class":421,"line":58},[419,656,481],{"emptyLinePlaceholder":480},[419,658,659,662],{"class":421,"line":48},[419,660,661],{"class":424},"    return",[419,663,502],{"class":439},[419,665,666],{"class":421,"line":37},[419,667,668],{"class":439},"        provide: {\n",[419,670,671,674],{"class":421,"line":26},[419,672,673],{"class":428},"            moment",[419,675,588],{"class":439},[419,677,678],{"class":421,"line":10},[419,679,680],{"class":439},"        },\n",[419,682,684],{"class":421,"line":683},22,[419,685,652],{"class":439},[419,687,689],{"class":421,"line":688},23,[419,690,691],{"class":439},"});\n",[352,693,694],{},"À première vue, ce code d'importation (ligne 1 et 2) qui provient de la documentation officielle de moment.js devrait fonctionner.\nPar contre, si vous avez utilisé ce code directement, vous aurez remarqué cette erreur lors de la compilation:",[696,697,698],"blockquote",{},[352,699,700],{},"Uncaught TypeError: Cannot read properties of undefined (reading 'defineLocale')",[352,702,703,704,709],{},"Il s'agit d'une erreur déroutante que j'ai pris bien du temps à corriger, mais grâce à cette ",[356,705,708],{"href":706,"rel":707},"https:\u002F\u002Fgithub.com\u002Fmoment\u002Fmoment\u002Fissues\u002F5926#issuecomment-1056785251",[360],"issue"," GitHub, j'ai finalement réussi à régler le problème et à compléter la migration vers Nuxt 3 de mon application.",[352,711,712],{},"Avec Vite.js, il faut simplement changer l'import des locales comme ceci:",[408,714,718],{"className":715,"code":716,"language":717,"meta":415,"style":415},"language-diff shiki shiki-themes solarized-light solarized-dark","- import 'moment\u002Flocale\u002Ffr-ca';\n\n+ import 'moment\u002Fdist\u002Flocale\u002Ffr-ca';\n","diff",[376,719,720,725,729],{"__ignoreMap":415},[419,721,722],{"class":421,"line":313},[419,723,724],{},"- import 'moment\u002Flocale\u002Ffr-ca';\n",[419,726,727],{"class":421,"line":270},[419,728,481],{"emptyLinePlaceholder":480},[419,730,731],{"class":421,"line":241},[419,732,733],{},"+ import 'moment\u002Fdist\u002Flocale\u002Ffr-ca';\n",[352,735,736],{},"Malheureusement, ne vous attendez pas à une correction de la part de moment.js puisque le projet est en mode maintenance et ne recevra de mises à jour que si une faille de sécurité majeure est découverte.",[352,738,739],{},"Vous pouvez migrer vers une alternative plus moderne à moment.js, mais dans mon cas, je devais migrer une code base utilisant largement moment.js en Nuxt 3.",[352,741,742,743,748,749,752],{},"J'ai bien tenté de migrer vers ",[356,744,747],{"href":745,"rel":746},"https:\u002F\u002Fday.js.org\u002F",[360],"Day.js",", qui a une API rétrocompatible et l'avantage d'une approche modulaire et un code plus moderne lui permettant d'avoir un poids réduit (7kb vs 61kb) en prenant avantage des dernières fonctionnalités d'internationalisation d'ECMAScript, mais j'ai fait face à une fonctionnalité manquante en lien avec le parsing des heures (Ex. ",[376,750,751],{},"10:00:00",") sans date associée.",[352,754,755,756,761,762,766],{},"Heureusement, je pourrai peut-être faire la migration éventuellement puisqu'une ",[356,757,760],{"href":758,"rel":759},"https:\u002F\u002Fgithub.com\u002Fiamkun\u002Fdayjs\u002Fpull\u002F2197",[360],"pull request"," afin d'apporter cette fonctionnalité à Day.js a été ouverte après que j'ai ouvert l'",[356,763,708],{"href":764,"rel":765},"https:\u002F\u002Fgithub.com\u002Fiamkun\u002Fdayjs\u002Fissues\u002F2179",[360]," sur GitHub afin de signaler ce manquement par rapport à moment.js.",[768,769,770],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sxPyI, html code.shiki .sxPyI{--shiki-default:#859900;--shiki-dark:#859900}html pre.shiki code .sCW-z, html code.shiki .sCW-z{--shiki-default:#268BD2;--shiki-dark:#268BD2}html pre.shiki code .sNx9Q, html code.shiki .sNx9Q{--shiki-default:#2AA198;--shiki-dark:#2AA198}html pre.shiki code .skhcD, html code.shiki .skhcD{--shiki-default:#657B83;--shiki-dark:#839496}html pre.shiki code .sNKNx, html code.shiki .sNKNx{--shiki-default:#586E75;--shiki-default-font-weight:bold;--shiki-dark:#93A1A1;--shiki-dark-font-weight:bold}html pre.shiki code .s7NzM, html code.shiki .s7NzM{--shiki-default:#CB4B16;--shiki-dark:#CB4B16}",{"title":415,"searchDepth":270,"depth":270,"links":772},[],"2023-01-17","Vous avez peut-être remarqué que le module @nuxtjs\u002Fmoment n'est pas compatible avec Nuxt 3.","md",{},"\u002Fblog\u002F2023-01-17-momentjs-avec-nuxt3",false,{"text":780,"minutes":781,"time":782,"words":783},"3 min read",2.41,144600,482,{"title":347,"description":774},"blog\u002F2023-01-17-momentjs-avec-nuxt3","z4arodDcJR90wMFnP7ShQNZ-K5dRnilpasnQqCraa34",{"id":788,"title":789,"body":790,"createdAt":814,"description":794,"extension":775,"meta":815,"navigation":480,"path":816,"pinned":778,"readingTime":817,"seo":822,"stem":823,"__hash__":824},"blog\u002Fblog\u002F2023-01-01-mots-de-bienvenue.md","Bienvenue sur mon nouveau site web !",{"type":349,"value":791,"toc":812},[792,795,806,809],[352,793,794],{},"Bonjour, et bienvenue sur mon nouveau site web. J'ai décidé qu'il était enfin temps de refaire mon site personnel de zéro.",[352,796,797,798,801,802,805],{},"J'ai profité de l'occasion pour tester le nouveau ",[376,799,800],{},"nuxt@^3.0.0"," qui vient tout juste d'être lancé en version stable ainsi que ",[376,803,804],{},"nuxt\u002Fcontent@^2.0.0"," pour générer mon site de manière statique afin de l'héberger gratuitement sur GitHub Pages.",[352,807,808],{},"Sur ce blog, vous découvrirez mes expérimentations ainsi que des trucs et astuces sur l'écosystème Vue.js et Laravel.",[352,810,811],{},"J'espère que ces articles vous seront utiles ! N'hésitez pas à poser des questions dans les commentaires.",{"title":415,"searchDepth":270,"depth":270,"links":813},[],"2023-01-01",{},"\u002Fblog\u002F2023-01-01-mots-de-bienvenue",{"text":818,"minutes":819,"time":820,"words":821},"1 min read",0.515,30900,103,{"title":789,"description":794},"blog\u002F2023-01-01-mots-de-bienvenue","ccx-dy6NU_h1G6vKO_lnbIk-L4v-NQhNOmm_skXXMEc",1791611297664]