[{"data":1,"prerenderedAt":440},["Reactive",2],{"navigation":3,"/posts/pnpm-env":204,"/posts/pnpm-env-surround":416},[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":151,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":150,"description":208,"lead":209,"date":210,"image":211,"badge":213,"tags":215,"canonical":219,"body":220,"_type":411,"_id":412,"_source":413,"_file":414,"_extension":415},"posts",false,"","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},"/images/pnpm.png",{"label":214},"Tooling",[216,217,218],"pnpm","package manager","tooling","https://bordeauxcoders.com/manage-multiple-nodejs-versions",{"type":221,"children":222,"toc":405},"root",[223,230,250,257,299,304,309,315,320,334,340,373,399],{"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},"You might not know it, but managing multiple Node.js versions is something you can do with pnpm, using the ",{"type":224,"tag":236,"props":237,"children":241},"a",{"href":238,"rel":239},"https://pnpm.io/fr/cli/env",[240],"nofollow",[242],{"type":224,"tag":243,"props":244,"children":246},"code",{"className":245},[],[247],{"type":229,"value":209},{"type":229,"value":249}," command.",{"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 env use -g lts \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,294],{"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}," env",{"type":224,"tag":268,"props":285,"children":286},{"style":280},[287],{"type":229,"value":288}," use",{"type":224,"tag":268,"props":290,"children":291},{"style":280},[292],{"type":229,"value":293}," -g",{"type":224,"tag":268,"props":295,"children":296},{"style":280},[297],{"type":229,"value":298}," lts\n",{"type":224,"tag":225,"props":300,"children":301},{},[302],{"type":229,"value":303},"This example demonstrates how to install the LTS version of Node.js.",{"type":224,"tag":225,"props":305,"children":306},{},[307],{"type":229,"value":308},"Additionally, you can install specific versions of Node.js, view the versions already present on your computer, or remove one.",{"type":224,"tag":251,"props":310,"children":312},{"id":311},"why-use-pnpm-as-your-node-version-manager",[313],{"type":229,"value":314},"Why use pnpm as your Node version manager?",{"type":224,"tag":225,"props":316,"children":317},{},[318],{"type":229,"value":319},"Because managing your Node.js version is built into pnpm: if you already use pnpm as your npm package manager, you don't need to install another tool.",{"type":224,"tag":225,"props":321,"children":322},{},[323,325,332],{"type":229,"value":324},"But there is absolutely nothing wrong with using another Node version manager if you prefer. I was using ",{"type":224,"tag":236,"props":326,"children":329},{"href":327,"rel":328},"https://github.com/coreybutler/nvm-windows",[240],[330],{"type":229,"value":331},"nvm-windows",{"type":229,"value":333}," before and I was happy with it. I just don't see the point of installing it anymore as similar functionality is already available in pnpm.",{"type":224,"tag":251,"props":335,"children":337},{"id":336},"good-to-know",[338],{"type":229,"value":339},"Good to know",{"type":224,"tag":225,"props":341,"children":342},{},[343,345,356,358,364,371],{"type":229,"value":344},"To specify a Node.js version to use in a project/folder, you can add an ",{"type":224,"tag":236,"props":346,"children":349},{"href":347,"rel":348},"https://pnpm.io/fr/npmrc",[240],[350],{"type":224,"tag":243,"props":351,"children":353},{"className":352},[],[354],{"type":229,"value":355},".npmrc",{"type":229,"value":357}," file ",{"type":224,"tag":243,"props":359,"children":361},{"className":360},[],[362],{"type":229,"value":363},"use-node-version",{"type":224,"tag":236,"props":365,"children":368},{"href":366,"rel":367},"https://pnpm.io/fr/npmrc#use-node-version",[240],[369],{"type":229,"value":370},"​",{"type":229,"value":372}," setting, like that:",{"type":224,"tag":258,"props":374,"children":376},{"className":260,"code":375,"language":262,"meta":207,"style":207},"use-node-version=16.16.0\n",[377],{"type":224,"tag":243,"props":378,"children":379},{"__ignoreMap":207},[380],{"type":224,"tag":268,"props":381,"children":382},{"class":270,"line":271},[383,388,394],{"type":224,"tag":268,"props":384,"children":386},{"style":385},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[387],{"type":229,"value":363},{"type":224,"tag":268,"props":389,"children":391},{"style":390},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[392],{"type":229,"value":393},"=",{"type":224,"tag":268,"props":395,"children":396},{"style":280},[397],{"type":229,"value":398},"16.16.0\n",{"type":224,"tag":400,"props":401,"children":402},"style",{},[403],{"type":229,"value":404},"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":406,"depth":406,"links":407},2,[408,409,410],{"id":253,"depth":406,"text":256},{"id":311,"depth":406,"text":314},{"id":336,"depth":406,"text":339},"markdown","content:1.posts:48.pnpm-env.md","content","1.posts/48.pnpm-env.md","md",[417,430],{"_path":154,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":153,"description":418,"date":419,"image":420,"badge":422,"tags":424,"canonical":427,"_type":411,"_id":428,"_source":413,"_file":429,"_extension":415},"This is the first article of the Vue.js CI/CD series. It will be the opportunity to explain the purpose of the series and the topics we plan to cover.","2023-06-01T00:00:00.000Z",{"src":421},"/images/vue-cicd.webp",{"label":423},"DevOps",[425,426,423],"Vue.js","CI/CD","https://bordeauxcoders.com/introducing-the-vuejs-cicd-series","content:1.posts:49.vuecicd-introduction.md","1.posts/49.vuecicd-introduction.md",{"_path":148,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":147,"description":431,"lead":432,"date":433,"image":434,"badge":435,"tags":436,"canonical":437,"_type":411,"_id":438,"_source":413,"_file":439,"_extension":415},"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},{"label":214},[216,217,218],"https://bordeauxcoders.com/perform-dynamic-execution-of-an-npm-package","content:1.posts:47.pnpm-dlx.md","1.posts/47.pnpm-dlx.md",1716749601522]