View on GitHub

Meta-Repository Workshop

Mono-repo eller mange repo? Prøv meta-repo! - JavaZone 2025

Oppgave 1: Installasjon av meta-verktøyet

📋 Mål

I denne oppgaven skal du:

📚 Bakgrunn

Vi trenger meta-verktøyet til Matt Williams, som vi installerer med npm.

Som nevnt i påmeldingssiden til workshop‘en har dette blitt testet på macOS. Windows-brukere bør kunne bruke WSL2 (Windows Subsystem for Linux), evt så har jeg en docker-container, som dere kan benytte (se lenger ned i siden her). Linux-nerds - dere er på egenhånd, men regner med at dere klarer dere fint :)

🛠 Steg-for-steg

NB! Det er en fin knapp ute til høyre på hver kodeblokk som gjør det lett å kopiere teksten.

Steg 1: NPM og node

Test at du har node og npm installert:

node --version
npm --version

Om du ikke har node kan du installere det med:

brew install node   # Mac

På Linux kan du bruke pakkebehandleren din, f.eks:

sudo apt-get install nodejs npm   # Ubuntu/Debian

Steg 2: Installer meta-verktøyet

Dersom du ikke bruker Docker, installer meta globalt med npm:

npm install -g --no-save meta

Test at det fungerer:

meta --version

Troubleshooting Mac

Proxy-problemer

Dersom du får en feilmelding som dette:

npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm warn deprecated rimraf@2.7.1: Rimraf versions prior to v4 are no longer supported
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm error code FETCH_ERROR
npm error errno FETCH_ERROR
npm error request to https://codeload.github.com/mateodelnorte/commander.js/tar.gz/9060bf880b791cf39245d425f1e8a41a55616781 failed, reason: Socket closed
npm error A complete log of this run can be found in: /Users/t992958/.npm/_logs/2025-09-01T11_28_49_761Z-debug-0.log

… så har du problemer med proxy-innstillinger og må skru av proxy for npm:

npm config set noproxy "registry.npmjs.org,codeload.github.com,github.com"

Troubleshooting Windows

Cygwin (muligens også WSL)

Det er dessverre en bug i meta som gjør at den ikke fungerer. Saken er meldt til meta-prosjektet, men inntil videre må dere gjøre en workaround.

Symptom:

$ meta init
Error: spawn EINVAL
    at ChildProcess.spawn (node:internal/child_process:421:11)
    at spawn (node:child_process:796:9)
    at Command.executeSubCommand (C:\Users\username\AppData\Roaming\npm\node_modules\meta\node_modules\commander\index.js:565:12)
    at Command.parse (C:\Users\username\AppData\Roaming\npm\node_modules\meta\node_modules\commander\index.js:489:17)
    at exports.run (C:\Users\username\AppData\Roaming\npm\node_modules\meta\index.js:47:11)
    at Object.<anonymous> (C:\Users\username\AppData\Roaming\npm\node_modules\meta\bin\meta:8:15)
    at Module._compile (node:internal/modules/cjs/loader:1738:14)
    at Object..js (node:internal/modules/cjs/loader:1871:10)
    at Module.load (node:internal/modules/cjs/loader:1470:32)
    at Module._load (node:internal/modules/cjs/loader:1290:12) {
  errno: -4071,
  code: 'EINVAL',
  syscall: 'spawn'
}

Workaround - rapportert av en bruker som fikk det til å fungere:

Redigerte line 563 og 565 i denne filen: C:\Users<username>\AppData\Roaming\npm\node_modules\meta\node_modules\commander\index.js

Fra:

proc = spawn(process.argv[0], args, { stdio: 'inherit', customFds: [0, 1, 2] });
} else {
proc = spawn(bin, args, { stdio: 'inherit', customFds: [0, 1, 2] });

Til:

proc = spawn(process.argv[0], args, { stdio: 'inherit', shell: true, customFds: [0, 1, 2] });
} else {
proc = spawn(bin, args, { stdio: 'inherit', shell: true, customFds: [0, 1, 2] });

(Forskjellen er shell: true som er lagt til i begge spawn-kallene.)

Alternativt: Docker

Dersom du ikke vil eller får installert verktøyene lokalt, kan du bruke Docker:

Windows (Powershell):

docker run --rm -it -v "$($PWD.Path):/work" -w /work ghcr.io/kjetiljd/meta-repo-workshop-tools:latest bash

Mac/Linux/…:

docker run --rm -it -v "$PWD:/work" -w /work ghcr.io/kjetiljd/meta-repo-workshop-tools:latest bash

Nå er du i en bash-terminal med alt du trenger installert. /work er mappet til mappen du står når du kjører kommandoen.

Kjør exit nå for å gå ut av terminalen i docker-containeren:

exit
← Tilbake til oversikt → Neste oppgave: Oppsett og grunnleggende struktur