Infrastructuur voor NL Design System
Samenvatting
Als je de standaard-infrastructuur van NL Design System wilt gebruiken, volg dan de volgende instructies.
- Gebruik Git voor het opslaan en beheren van code.
- Gebruik pnpm als package manager, niet npm of yarn.
- Gebruik Node.js long-term support.
- Gebruik ESLint om ECMAScript, JavaScript en TypeScript te controleren.
- Gebruik Stylelint om CSS en SCSS te controleren.
- Gebruik Prettier voor de opmaak van code.
- Gebruik een GitHub Action voor het controleren van code, testen van functionaliteit en het compileren van code, als je GitHub gebruikt.
Node.js
- Gebruik Node.js 22 voor nieuwe project, of migreer zo snel mogelijk naar Node 22.
- Stel de Node.js versie in bij
"engines"
inpackage.json
. - Stel de Node.js versie in bij de
.nvmrc
of.node-version
file, of in beide. - Gebruik pnpm 9.
Storybook
- Gebruik geen webpack voor nieuwe projecten, en migreer van webpack naar alternatieven wanneer je de mogelijkheid hebt.
Lint tools
- Gebruik een EditorConfig configuratie in
.editorconfig
voor basis-instellingen voor code-opmaak. -
Gebruik Prettier voor talen en file extensions waar we goede ervaringen mee hebben:
- Markdown in
*.md
en*.mdx
bestanden - ECMAScript in
*.mjs
bestanden - CommonJS in
*.cjs
bestanden - JavaScript in
*.js
bestanden - HTML in
*.html
bestanden - CSS in
*.css
bestanden -
Java in
*.java
bestanden, metprettier-plugin-java
-
PHP met
wp-prettier
- Markdown in
- Gebruik
prettier --check
voor Continuous Integration, zodat alle code consistente opmaak heeft. - Gebruik
stylelint
voor Continuous Integration om CSS en SCSS te controleren. - Gebruik
eslint
voor Continuous Integration om JavaScript te controleren. - Gebruik
tsc --noEmit
voor Continuous Integration om TypeScript projecten te controleren. -
Gebruik
lint-staged
zodat committers niet hoeven te wachten op een GitHub Action om te weten dat er nog een foutje is. - Gebruik
package-json-lint
ompackage.json
bestanden op consistentie te controleren.
Softwareversies:
- Gebruik Prettier 3 voor nieuwe projecten. Migreer van oudere versies naar Prettier 3 zodra het mogelijk is.
- Gebruik ESLint 9 voor nieuwe projecten. Migreer van oudere versies naar ESLint 9 zodra het mogelijk is.
- Gebruik Stylelint 16 voor nieuwe projecten. Migreer van oudere versies naar Stylelint 16 zodra het mogelijk is.
Tests
- ...
Visuele regressietests
- Gebruik een tool voor visuele regressietests, om het resultaat van front-end code te controleren door te vergelijken met referentie-screenshots.
- Als je Chromatic.
-
Gebruik een GitHub Action om screenshots naar Chromatic te uploaden, als je Chromatic gebruikt.
- Stel een
CHROMATIC_PROJECT_TOKEN
environment variable in, zodat je screenshots kan uploaden. - Op dit moment gebruikt het NL Design System kernteam Chromatic, een commerciële software-as-a-service. NL Design System projecten kunnen daar ook gebruik van maken volgens een "fair use policy".
- Stel een
Continuous Integration
-
Maak de volgende scripts in
package.json
om functionaliteit en kwaliteit van je code te controleren. Scripts zijn optioneel als ze niet nodig zijn voor je project.build
: compileer alle code naar output indist/
directories.lint-build
: controleer de gecompileerde code indist/
directories.lint
: controleer de broncode met lint tools.test-build
: voer tests uit op de gecompileerde code.test
: voor tests uit met de broncode.
Een indicatie: vrijwel alle projecten gebruiken
lint
. De meeste projecten gebruikenbuild
. Veel projecten gebruikentest
. Slechts enkele projecten gebruikenlint-build
entest-build
.
Stel de Git repository in:
- Gebruik de
main
branch als default branch. -
Stel de
main
branch in als protected branch:- de
main
branch mag niet verwijderd worden. - Vereis een
- de
- Stel in dat een succesvolle GitHub Action verplicht is voor de volgende npm scripts, als die bestaan:
build
,lint-build
entest-build
,lint
entest
.
Als je GitHub gebruikt:
- Maak een Pull Request verplicht om code te committen naar de
main
branch. - Maak een review verplicht om code te committen naar de
main
branch. - Gebruik rulesets voor branch protections. Migreer Branch protection rules naar rulesets zodra je de mogelijkheid hebt.
- Stel in de branches automatisch verwijderd worden nadat Pull Requests gemerged zijn, zodat het aantal branches overzichtelijk blijft.
Als je GitLab gebruikt:
- Gebruik vergelijkbare instellingen voor GitLab Merge Requests als voor GitHub Pull Requests.
Directory-structuur
-
Gebruik een conventionele directory-structuur, zodat bestanden op een voorspelbare plek te vinden zijn:
packages/
: npm packages die je wilt delen met de community.properietary/
: npm packages die je zelf nodig hebt, maar niet bedoeld zijn voor hergebruik.**/dist/
: gecompileerde code, die niet in Git wordt opgeslagen.**/src/
: broncode.**/tmp/
: tijdelijke bestanden die niet in Git worden opgeslagen.
Documentatie
-
Maak een
/README.md
bestand met de belangrijke informatie, zoals:- Waar kun je hulp krijgen?
- Wat is de open source licentie?
- Wat is de Code of Conduct?
- Maak een
/LICENSE.md
bestand met de open source licentie. Wij gebruiken de EUPL-1.2 licentie. - Maak een
/CODE_OF_CONDUCT.md
bestand met de Code of Conduct. Wij gebruiken de Contributor Covenant 2.0.
Als je bestanden aanmaakt met belangrijke informatie, gebruik dan conventionele bestandsnamen zodat de informatie makkelijk te vinden is, zoals bijvoorbeeld:
CHANGELOG.md
CONTRIBUTING.md
SECURITY.txt
SUPPORT.md
Infrastructure as code
Om de repositories in de nl-design-system GitHub organisatie te beheren gebruiken we Terraform, met plugins voor github en vercel. In de nl-design-system/terraform repository staan configuratie-bestanden, met diverse instellingen.
- GitHub rulesets.
- GitHub teams.
- GitHub team members.
- GitHub repository access rights.
- Vercel deployments.
Als deze instellingen in Terraform worden beheerd, dan moeten ze niet meer handmatig gewijzigd worden via de GitHub user interface. Om handmatige wijzigingen te voorkomen hebben zo min mogelijk users maintainer rechten.
Als je instellingen wilt wijzigen dan kun je bij de terraform repository een Pull Request maken met een voorstel voor de nieuwe instellingen.
Upgrades
December 2024
Node 22
Node 22 is al beschikbaar sinds april, en in oktober 2024 is versie 22 een long-term support versie geworden. Eind november werd Node 22 ondersteund door Vercel. Daarmee is ondersteuning voldoende om over te stappenop Node 22.
Instructies voor de upgrade naar Node 22:
- Pas
.nvmrc
en.node-version
aan naar22
, als je die bestanden gebruikt. -
Voer de volgende commands uit om als developer Node 22 te gebruiken in de command line:
nvm install
nvm use
corepack enable
- Upgrade npm dependencies van
@types/node
aan naar de meest recente 22.x versie, met het command:pnpm exec npm-check-updates --filter @types/node --install always --upgrade
- Pas
"engines"
van de/package.json
aan naar"node": "^22"
. - GitHub Actions kun je instellen dat ze de Node-versie gebruiken die in
.nvmrc
staat, dus je hoeft voor GitHub Actions niets te doen als je dat gebruikt. - Als je Vercel gebruikt: pas in de General Settings van je Project aan dat je Node 22.x wilt gebruiken voor Vercel. Helaas lijkt het niet mogelijk dit via Terraform te configureren.
ESLint 9
...
Style Dictionary 4
Style Dictionary 4 is al een half jaar uit, en veel teams zijn al succesvol gemigreerd. De command line tool van Style Dictionary 3 is vervangen door een Node.js API. Je kunt nu de build commands zelf vanuit JavaScript aanroepen.
De makkelijkste manier om te migreren naar Style Dictionary 4 is om onze Style Dictionary-configuratie uit de example repository te kopieëren.