Pakkepakking

... på rammeverkstedet

Agenda 📝

  • Semantisk versjonering
  • Konvensjonelle commits
  • Bundling
  • Monorepos

Semantisk versjonering 🗂

  • Format på versjonsnummer: MAJOR.MINOR.PATCH

  • Inkompatible API-endringer   
    øk MAJOR-versjonen

  • Ny bakoverkompatibel funksjonalitet
    øk MINOR-versjonen
  • Bakoverkompatible feilrettinger   
    øk PATCH-versjonen
  • Kan legge til prefiks for betaversjoner osv.
    F.eks.
    MAJOR.MINOR.PATCH-beta.1

Hvorfor? 🤔

  • Du gjør det sannsynligvis allerede i dag
  • Versjonsnumre er ganske ubrukelige når de ikke følger et system

Eksempel 🤓

APP

PAKKE

// package.json

{
  "dependency": {
    "pakke": "^1.0"
  }
}

PAKKE v1.0

PAKKE v1.0

Eksempel 🤓

PAKKE v1.0

APP

PAKKE

// package.json

{
  "dependency": {
    "pakke": "^1.0"
  }
}

PAKKE v1.0

PAKKE v1.1

PAKKE v1.1

Eksempel 🤓

PAKKE v1.0

APP

PAKKE

// package.json

{
  "dependency": {
    "pakke": "^1.0"
  }
}

PAKKE v1.0

PAKKE v1.1

PAKKE v1.1

PAKKE v1.1

PAKKE v2.0

Konvensjonelle commits 🪵

Et slags regelsett for hvordan man bør skrive commit-meldinger.

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

Overordnet struktur

Konvensjonelle commits 🪵

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

Typer

  • fix: tilsvarer en PATCH
  • feat: tilsvarer en MINOR
  • refactor: hverken feilretting eller ny funksjonalitet
  • chore: vanlig i release-commit og ved endringer i byggeprosessen
fix(fetcher): prevent racing of requests

Introduce a request id and a reference to latest request. Dismiss
incoming responses other than from latest request.

Remove timeouts which were used to mitigate the racing issue but are
obsolete now.
feat: allow provided config object to extend other configs

Eksempel 🤓

Konvensjonelle commits 🪵

chore!: drop support for Node 6

BREAKING CHANGE: use JavaScript features not available in Node 6.

Breaking change

Tilsvarer en MAJOR

Signaliseres med:

  • Utropstegn bak typen, f.eks. fix!: commit-melding
  • BREAKING CHANGE i footeren

Hvorfor? 🤔

  • Automatisk generering av CHANGELOGs.
  • Automatisk versjonering (basert på commit-typene)
  • Gjør det enklere å bidra

Bundling 📦

  • Mange verktøy: Webpack, Rollup, Parcel

Bundling 📦

  • Mange verktøy: Webpack, Rollup, Parcel

Parcel

  • Krever ingen/lite konfigurasjon
  • Masse features:
    • Dev server (med hot reloading)
    • Tree shaking og code splitting
    • Babel-transpilering
    • Bundling til ESM- og CommonJS-moduler og Typescript-definisjoner

Bundling 📦

// package.json
{
  "name": "bekkact",
  "version": "1.0.0",
  "source": "src/index.js",
  "module": "dist/module.js",
  "main": "dist/main.js",
  "types": "dist/types.d.ts",
 
  "scripts": {
    "build": "parcel build"
  },
}

Monorepo 🎪

 bekkact 

bekkact-dom

Git

Git

Multirepo

  bekkact  

bekkact-dom

Git

Monorepo

Oppgaver 🧑‍💻👩‍💻

  1. Lag individuelle bundles for bekkact og bekkact-dom
  2. Få prosjektet til å bruke konvensjonelle commits
  3. Sett opp semantisk versjonering
  4. Bonus: Konfigurer bootstrapping og linking av avhengigheter i monorepoet

Nyttige ressurser 💡

Bundler: https://parceljs.org/

 

Konvensjonelle commits:

https://www.conventionalcommits.org/en/v1.0.0/

https://github.com/conventional-changelog/commitlint

https://github.com/conventional-changelog/standard-version

 

Semantisk versjonering: https://semver.org/

 

Monorepo: https://lerna.js.org/

Pakke pakker

By Markus Rauhut

Pakke pakker

  • 103