[{"data":1,"prerenderedAt":462},["Reactive",2],{"navigation":3,"/posts/pnpm-dlx":204,"/posts/pnpm-dlx-surround":437},[4,192,200],{"title":5,"_path":6,"children":7,"icon":191},"Blog","/posts",[8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101,104,107,110,113,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,176,179,182,185,188],{"title":9,"_path":10},"Testing your API with REST Client","/posts/testing-your-api-with-rest-client",{"title":12,"_path":13},"HTML templating in Xamarin","/posts/html-templating-in-xamarin",{"title":15,"_path":16},"Goodbye Azure Portal, Welcome Azure CLI","/posts/welcome-azure-cli",{"title":18,"_path":19},"Coming across Gitpod","/posts/gitpod",{"title":21,"_path":22},"Handle token retrieval while querying an API","/posts/delegating-handler",{"title":24,"_path":25},"Clean up your local git branches.","/posts/cleaning-git-branches",{"title":27,"_path":28},"Automate configuration of Teams Tab SSO with PowerShell.","/posts/teams-sso-powershell",{"title":30,"_path":31},"How to do a technology watch? - Part 1","/posts/technology-watch-part1",{"title":33,"_path":34},"How to do a technology watch? - Part 2","/posts/technology-watch-part2",{"title":36,"_path":37},"You almost no longer need Key Vault references for Azure Functions.","/posts/azure-functions-custom-configuration",{"title":39,"_path":40},"How to do a technology watch? - Part 3","/posts/technology-watch-part3",{"title":42,"_path":43},"Forget DevOps, the future is already here!","/posts/devops-future",{"title":45,"_path":46},"Week 9, 2021 - Tips I learned this week","/posts/w09-2021-tips-learned-this-week",{"title":48,"_path":49},"Week 12, 2021 - Tips I learned this week","/posts/w12-2021-tips-learned-this-week",{"title":51,"_path":52},"Week 14, 2021 - Tips I learned this week","/posts/w14-2021-tips-learned-this-week",{"title":54,"_path":55},"Once upon a time in .NET","/posts/once-upon-a-time-in-dotnet",{"title":57,"_path":58},"Install your applications with winget","/posts/winget-import",{"title":60,"_path":61},"Customize your applications when installing them with winget","/posts/winget-override",{"title":63,"_path":64},"Week 22, 2021 - Tips I learned this week","/posts/w22-2021-tips-learned-this-week",{"title":66,"_path":67},"How to connect to an Azure SQL Database from C# using Azure AD","/posts/sqlclient-active-directory-authent",{"title":69,"_path":70},"Producing packages for Windows Package Manager","/posts/wingetcreate",{"title":72,"_path":73},"4 tips about GitHub Actions environment variables and contexts","/posts/github-actions-var-and-context",{"title":75,"_path":76},"AzureWebJobsStorage, the secret you don't need in your Function App.","/posts/azure-functions-without-azurewebjobsstorage",{"title":78,"_path":79},"ASP.NET Core - Lost in configuration","/posts/lost-in-configuration",{"title":81,"_path":82},"Week 39, 2021 - Tips I learned this week","/posts/w39-2021-tips-learned-this-week",{"title":84,"_path":85},"Week 41, 2021 - Tips I learned this week","/posts/w41-2021-tips-learned-this-week",{"title":87,"_path":88},"Migrating and open-sourcing my blog","/posts/migrating-blog",{"title":90,"_path":91},"Week 45, 2021 - Tips I learned this week","/posts/w45-2021-tips-learned-this-week",{"title":93,"_path":94},"Organize your GitHub stars with Astral","/posts/astral",{"title":96,"_path":97},"Pulumi with an Azure Blob Storage backend","/posts/pulumi-azure-backend",{"title":99,"_path":100},"IaC Hot Reload with Pulumi Watch","/posts/pulumi-watch",{"title":102,"_path":103},"Week 2, 2022 - Tips I learned this week","/posts/w02-2022-tips-learned-this-week",{"title":105,"_path":106},"Week 3, 2022 - Tips I learned this week","/posts/w03-2022-tips-learned-this-week",{"title":108,"_path":109},"Week 5, 2022 - Tips I learned this week","/posts/w05-2022-tips-learned-this-week",{"title":111,"_path":112},"How to provision an Azure SQL Database with Active Directory authentication","/posts/sqldatabase-active-directory-authent",{"title":114,"_path":115},"Why will I choose Pulumi over Terraform for my next project?","/posts/pulumi-vs-terraform",{"title":117,"_path":118},"Week 19, 2022 - Tips I learned this week","/posts/w19-2022-tips-learned-this-week",{"title":120,"_path":121},"Week 20, 2022 - Tips I learned this week","/posts/w20-2022-tips-learned-this-week",{"title":123,"_path":124},"Keeping secrets secure when using API Clients","/posts/http-clients-secrets",{"title":126,"_path":127},"What made me want to be a developer?","/posts/be-a-developer",{"title":129,"_path":130},"What can we do when stuck with a programming problem?","/posts/get-unstuck",{"title":132,"_path":133},"How did I automate the setup of my developer Windows laptop?","/posts/automate-developer-machine",{"title":135,"_path":136},"Discussion about API clients","/posts/http-clients",{"title":138,"_path":139},"Week 46, 2022 - Tips I learned this week","/posts/w46-2022-tips-learned-this-week",{"title":141,"_path":142},"When Pulumi met Nuke: a .NET love story","/posts/when-pulumi-met-nuke",{"title":144,"_path":145},"A year of learning and sharing - Dev Retro 2022","/posts/2022-retro",{"title":147,"_path":148},"Perform Dynamic Execution of an npm Package","/posts/pnpm-dlx",{"title":150,"_path":151},"Manage multiple Node.js versions","/posts/pnpm-env",{"title":153,"_path":154},"Introducing the Vue.js CI/CD series","/posts/vuecicd-introduction",{"title":156,"_path":157},"Execute commands using your project dependencies","/posts/pnpm-exec",{"title":159,"_path":160},"Vue.js CI/CD: Continuous Integration","/posts/vuecicd-ci",{"title":162,"_path":163},"Who is using pnpm?","/posts/pnpm-who-is-using",{"title":165,"_path":166},"Create an Azure-Ready GitHub Repository using Pulumi","/posts/azure-ready-github-repository",{"title":168,"_path":169},"Deploying to Azure from Azure DevOps without secrets","/posts/ado-workload-identity-federation",{"title":171,"_path":172},"Effortlessly Configure GitHub Repositories for Azure Deployment via OIDC","/posts/scripting-azure-ready-github-repository",{"title":174,"_path":175},"Playing with the .NET 8 Web API template","/posts/playing-with-dotnet8",{"title":177,"_path":178},"Another year of sharing and learning - Dev Retro 2023","/posts/2023-retro",{"title":180,"_path":181},"Week 4, 2024 - Tips I learned this week","/posts/w04-2024-tips-learned-this-week",{"title":183,"_path":184},"Using dependency injection with Azure .NET SDK","/posts/azure-sdk-di",{"title":186,"_path":187},"Having Fun With IT Event Calendars","/posts/it-event-calendars",{"title":189,"_path":190},"Call your Azure AD B2C protected API with authenticated HTTP requests from your JetBrains IDE","/posts/http-clients-oauth2","i-heroicons-newspaper",{"title":193,"_path":194,"children":195,"icon":199},"Goodies","/goodies",[196],{"title":197,"_path":198},"My Git Cheat Sheet","/goodies/gitcheatsheet","i-heroicons-gift-solid",{"title":201,"_path":202,"icon":203},"About","/about","i-heroicons-user-circle-solid",{"_path":148,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":147,"description":208,"lead":209,"date":210,"image":211,"badge":213,"tags":215,"canonical":219,"body":220,"_type":432,"_id":433,"_source":434,"_file":435,"_extension":436},"posts",false,"","Sometimes, all you want to do is grab an npm package and execute a command with it, without having to install it (whether globally or as a dependency).","pnpm dlx","2023-05-18T00:00:00.000Z",{"src":212},"/images/pnpm.png",{"label":214},"Tooling",[216,217,218],"pnpm","package manager","tooling","https://bordeauxcoders.com/perform-dynamic-execution-of-an-npm-package",{"type":221,"children":222,"toc":426},"root",[223,230,250,257,294,314,327,333,374,380,420],{"type":224,"tag":225,"props":226,"children":227},"element","p",{},[228],{"type":229,"value":208},"text",{"type":224,"tag":225,"props":231,"children":232},{},[233,235,248],{"type":229,"value":234},"That's what you can do with ",{"type":224,"tag":236,"props":237,"children":241},"a",{"href":238,"rel":239},"https://pnpm.io/cli/dlx",[240],"nofollow",[242],{"type":224,"tag":243,"props":244,"children":246},"code",{"className":245},[],[247],{"type":229,"value":209},{"type":229,"value":249},".",{"type":224,"tag":251,"props":252,"children":254},"h2",{"id":253},"an-example",[255],{"type":229,"value":256},"An example",{"type":224,"tag":258,"props":259,"children":263},"pre",{"className":260,"code":261,"language":262,"meta":207,"style":207},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm dlx vercel deploy\n","bash",[264],{"type":224,"tag":243,"props":265,"children":266},{"__ignoreMap":207},[267],{"type":224,"tag":268,"props":269,"children":272},"span",{"class":270,"line":271},"line",1,[273,278,284,289],{"type":224,"tag":268,"props":274,"children":276},{"style":275},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[277],{"type":229,"value":216},{"type":224,"tag":268,"props":279,"children":281},{"style":280},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[282],{"type":229,"value":283}," dlx",{"type":224,"tag":268,"props":285,"children":286},{"style":280},[287],{"type":229,"value":288}," vercel",{"type":224,"tag":268,"props":290,"children":291},{"style":280},[292],{"type":229,"value":293}," deploy\n",{"type":224,"tag":225,"props":295,"children":296},{},[297,299,306,308,313],{"type":229,"value":298},"This example shows how to use the ",{"type":224,"tag":236,"props":300,"children":303},{"href":301,"rel":302},"https://vercel.com/docs/cli",[240],[304],{"type":229,"value":305},"vercel CLI package",{"type":229,"value":307}," without having to install it thanks to ",{"type":224,"tag":243,"props":309,"children":311},{"className":310},[],[312],{"type":229,"value":209},{"type":229,"value":249},{"type":224,"tag":225,"props":315,"children":316},{},[317,319,325],{"type":229,"value":318},"In this example, pnpm downloads the vercel package, and executes it with the command ",{"type":224,"tag":243,"props":320,"children":322},{"className":321},[],[323],{"type":229,"value":324},"deploy",{"type":229,"value":326}," (that deploys a project to the Vercel platform).",{"type":224,"tag":251,"props":328,"children":330},{"id":329},"some-use-cases",[331],{"type":229,"value":332},"Some use cases",{"type":224,"tag":334,"props":335,"children":336},"ul",{},[337,343,348,353],{"type":224,"tag":338,"props":339,"children":340},"li",{},[341],{"type":229,"value":342},"You don't want to install globally a package because you only need to execute its binary script once",{"type":224,"tag":338,"props":344,"children":345},{},[346],{"type":229,"value":347},"You don't want a package to be a dev dependency of your project, or you are not using it in the context of a Node project",{"type":224,"tag":338,"props":349,"children":350},{},[351],{"type":229,"value":352},"You need to execute a CLI package command from a CI pipeline",{"type":224,"tag":338,"props":354,"children":355},{},[356,358,364,366,372],{"type":229,"value":357},"You want to ensure you use the latest version of a package (useful for starter kits like ",{"type":224,"tag":243,"props":359,"children":361},{"className":360},[],[362],{"type":229,"value":363},"create-vite",{"type":229,"value":365},", or ",{"type":224,"tag":243,"props":367,"children":369},{"className":368},[],[370],{"type":229,"value":371},"create-vue",{"type":229,"value":373},")",{"type":224,"tag":251,"props":375,"children":377},{"id":376},"good-to-know",[378],{"type":229,"value":379},"Good to know",{"type":224,"tag":225,"props":381,"children":382},{},[383,385,396,398,403,405,411,413,419],{"type":229,"value":384},"For starter kits, you can use ",{"type":224,"tag":236,"props":386,"children":389},{"href":387,"rel":388},"https://pnpm.io/cli/create",[240],[390],{"type":224,"tag":243,"props":391,"children":393},{"className":392},[],[394],{"type":229,"value":395},"pnpm create",{"type":229,"value":397}," instead of ",{"type":224,"tag":243,"props":399,"children":401},{"className":400},[],[402],{"type":229,"value":209},{"type":229,"value":404},". For instance, executing ",{"type":224,"tag":243,"props":406,"children":408},{"className":407},[],[409],{"type":229,"value":410},"pnpm create vue",{"type":229,"value":412}," is equivalent to executing ",{"type":224,"tag":243,"props":414,"children":416},{"className":415},[],[417],{"type":229,"value":418},"pnpm dlx create-vue",{"type":229,"value":249},{"type":224,"tag":421,"props":422,"children":423},"style",{},[424],{"type":229,"value":425},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}",{"title":207,"searchDepth":427,"depth":427,"links":428},2,[429,430,431],{"id":253,"depth":427,"text":256},{"id":329,"depth":427,"text":332},{"id":376,"depth":427,"text":379},"markdown","content:1.posts:47.pnpm-dlx.md","content","1.posts/47.pnpm-dlx.md","md",[438,448],{"_path":151,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":150,"description":439,"lead":440,"date":441,"image":442,"badge":443,"tags":444,"canonical":445,"_type":432,"_id":446,"_source":434,"_file":447,"_extension":436},"If you are working on various projects, you have likely encountered situations where you need to have multiple versions of Node.js installed on your computer.","pnpm env","2023-05-25T00:00:00.000Z",{"src":212},{"label":214},[216,217,218],"https://bordeauxcoders.com/manage-multiple-nodejs-versions","content:1.posts:48.pnpm-env.md","1.posts/48.pnpm-env.md",{"_path":145,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":144,"description":449,"lead":450,"date":451,"image":452,"badge":454,"tags":456,"ImageAttribution":459,"_type":432,"_id":460,"_source":434,"_file":461,"_extension":436},"I usually do not take the time to reflect on my developer journey and look back over the past year. Yet, it's a shame because I miss the opportunity to:","Challenges and achievements of 2022","2023-01-03T00:00:00.000Z",{"src":453},"/images/review_1.jpg",{"label":455},"Essay",[457,458],"thoughts","learning","Picture of \u003Ca href=\"https://unsplash.com/fr/@markuswinkler?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Markus Winkler\u003C/a> on \u003Ca href=\"https://unsplash.com/fr/photos/-fRAIQHKcc0?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash\u003C/a>","content:1.posts:46.2022-retro.md","1.posts/46.2022-retro.md",1716749601526]