Topics

Hoe u privé Astro-componenten deelt zonder npm

  • column

Gedeeld beheer van componenten

Bij webontwikkeling komt het af en toe voor dat u dezelfde UI-componenten opnieuw wilt gebruiken op meerdere websites, toch?

Bij het ontwikkelen van meerdere sites met een modern framework zoals Astro is het delen van een componentenbibliotheek zeer effectief. Wanneer u componenten als npm-pakket deelt, is echter vaak een betaald abonnement nodig om privépakketten te publiceren.

In dit artikel laten we zien hoe u componenten efficiënt kunt delen en beheren zonder ze als npm-pakket te verpakken, met behulp van een GitHub-repository en Cloudflare Pages!

Wat zijn de uitdagingen bij het delen van componenten!?

  • Wilt u dezelfde UI-componenten gebruiken op meerdere Astro-sites!
  • Wilt u hosten op Cloudflare Pages!
  • Ik wil componenten beheren in een privé GitHub-repository!
  • Ik wil de componenten als npm-pakket publiceren, maar ik wil ze niet openbaar maken!

Zo ongeveer dan. Hoe zouden we dit het beste aanpakken?

Oplossen met een GitHub-repository en een aangepast buildscript

Om deze uitdagingen op te lossen, kunnen we het volgende aanpakken.

  1. Een GitHub-repository voor de componenten aanmaken
  2. Bestandsverwijzingen gebruiken voor lokale ontwikkeling
  3. In de Cloudflare Pages-omgeving de componentrepository klonen tijdens de build

Zonder een privé npm-pakket kunnen componenten worden gedeeld en beheerd.

Zo ziet de implementatie eruit

1. GitHub-persoonlijk toegangstoken aanmaken

Maak een GitHub-persoonlijk toegangstoken aan om toegang te krijgen tot private repositories.

  1. Log in op GitHub
  2. Klik rechtsboven op het profielpictogram → Settings
  3. Selecteer in de linkerzijbalk "Developer settings" → "Personal access tokens" → "Tokens (classic)"
  4. Klik op "Generate new token" → "Generate new token (classic)"
  5. Ken de volgende rechten toe aan het token:
    • repo - volledige toegang tot private repositories
  6. Genereer het token en bewaar het op een veilige plek (het wordt maar één keer getoond).

2. Een componentenbibliotheek bouwen

Maak een GitHub-repository voor de componenten aan (bijvoorbeeld: github.com/your-username/ui-components).

package.json van de componentenbibliotheek

{
  "name": "@your-org/components",
  "private": true,
  "type": "module",
  "main": "src/index.ts",
  "exports": {
    ".": "./src/index.ts"
  },
  "files": [
    "src"
  ],
  "peerDependencies": {
    "astro": "^5.7.12"
  }
}

3. Het hoofdproject instellen

Stel de package.json van het hoofdproject in dat de componenten gebruikt.

package.json van het hoofdproject

{
  "name": "your-astro-project",
  "type": "module",
  "private": true,
  "config": {
    "componentVersion": "v1.0.0",
    "orgName": "your-username",
    "repoName": "ui-components",
    "namespace": "your-org",
    "packageName": "components"
  },
  "scripts": {
    "dev": "astro dev",
    "start": "astro dev",
    "build": "astro build",
    "preview": "astro preview",
    "astro": "astro",
    "setup-components": "set -e; ORG_NAME=\\\\"$npm_package_config_orgName\\\\"; REPO_NAME=\\\\"$npm_package_config_repoName\\\\"; NAMESPACE=\\\\"$npm_package_config_namespace\\\\"; PACKAGE_NAME=\\\\"$npm_package_config_packageName\\\\"; VERSION=\\\\"$npm_package_config_componentVersion\\\\"; mkdir -p temp; git clone -b $VERSION <https://[email protected]/$ORG_NAME/$REPO_NAME.git> temp/$REPO_NAME; mkdir -p node_modules/@$NAMESPACE; ln -sf $(pwd)/temp/$REPO_NAME node_modules/@$NAMESPACE/$PACKAGE_NAME",
    "build-with-components": "npm run setup-components && npm run build"
  },
  "dependencies": {
    "@your-org/components": "file:../ui-components"
  },
  "devDependencies": {
    // Astroなどの開発依存関係
  }
}

De volgende vier punten zijn essentieel.

  1. config-sectie: beheert de informatie over de componentenbibliotheek op één plek
  2. setup-components-script: kloont de componenten tijdens het bouwen vanuit GitHub
  3. build-with-components-script: een opdracht die het instellen van de componenten en het bouwen combineert
  4. dependencies: bestandsverwijzingen voor lokale ontwikkeling

4. Lokale ontwikkelomgeving instellen

Kloon de componentenbibliotheek naast je project in dezelfde map en gebruik deze via bestandsverwijzingen.

projects/
  ├── ui-components/         # コンポーネントライブラリ
  └── your-astro-project/     # メインプロジェクト

Wijzigingen aan componenten tijdens lokale ontwikkeling worden direct doorgevoerd in het hoofdproject.

5. Cloudflare Pages instellen

Hieronder vind je de instellingen voor Cloudflare Pages.

  1. Omgevingsvariabelen instellen:
    • Pages-dashboard → your-project → Settings → Environment variables
    • Variabelenaam: GITHUB_TOKEN
    • Waarde: de GitHub Personal Access Token die je hebt aangemaakt
  2. Buildcommando instellen:
    • Pages-dashboard → your-project → Settings → Build & deployments
    • Build command: npm run build-with-components
    • Build output directory: dist (standaard)

Tijdens de build wordt de componentenbibliotheek in de opgegeven versie automatisch gekloond en opgenomen.

Componenten eenvoudig gebruiken na de configuratie

Zodra de configuratie is voltooid, is het gebruik van componenten heel eenvoudig.

Maak in de componentenbibliotheek een src/index.ts-bestand aan en exporteer de componenten.

export { default as Button } from './components/base/Button.astro';
export { default as Heading } from './components/base/Heading.astro';
// 他のコンポーネントもここでエクスポート

Importeer de componenten die je wilt gebruiken in het hoofdproject.

---
import { Button, Heading } from '@your-org/components';
---

<div>
  <Heading>Hello World</Heading>
  <Button>Click me</Button>
</div>

Hoe zit het met versiebeheer?

Wanneer je een nieuwe versie van de componentenbibliotheek wilt uitbrengen,

  1. Breng wijzigingen aan in de componentenbibliotheek en commit ze
  2. Maak een nieuwe tag aan (bijv. v1.1.0)
  3. Werk de package.json van het hoofdproject bij
    "config": {
      "componentVersion": "v1.1.0",
      // 他の設定...
    }
    
    

Elk project kan de component gebruiken in de versie die het nodig heeft.

Ook de ontwikkelworkflow is veilig

Een veilige en efficiënte ontwikkelworkflow scheelt zorgen en werk, en dat is prettig.

  1. Ontwikkel of wijzig nieuwe functies in de componentenbibliotheek (bijv. de branch feature/new-button)
  2. Test en controleer die wijzigingen direct in het hoofdproject in de lokale omgeving
  3. Zodra de ontwikkeling een bepaalde fase heeft bereikt, maak je een testtag aan (bijv. v1.1.0-test)
  4. Werk componentVersion in de testomgevingbranch van het hoofdproject bij naar de testtag en deploy naar de testomgeving
  5. Als de testomgeving geen problemen laat zien, voeg je de wijzigingen samen met de main-branch van de componentenbibliotheek
  6. Het wordt live gezet door een nieuwe versietag aan te maken en de versie van het hoofdproject bij te werken (bijv. v1.1.0).

Het voordeel: je kunt wijzigingen aan componenten testen zonder invloed op de productieomgeving! Het voordeel: je kunt wijzigingen aan componenten testen zonder invloed op de productieomgeving!

De productieomgeving van Cloudflare Pages gebruikt de versie van de tag die is opgegeven in config.componentVersion. Zolang je geen nieuwe tag aanmaakt en config niet bijwerkt, heeft een wijziging dus geen invloed op productie, dus je kunt gerust zijn!

■ Geen npm-privépakketten nodig: combineer een GitHub-privérepository met een aangepast buildscript!

■ Met een zorgvuldig beheer van GitHub-tokens en een correcte lokale ontwikkelomgeving delen je hele team componenten naadloos!

Wat denk je ervan?

Is dit niet ideaal voor kleine tot middelgrote teams en projecten waarin kostenefficiëntie belangrijk is?

Mocht je team of project in de toekomst groeien, dan kun je later nog overstappen naar npm-privépakketten. Voorlopig denk ik dat deze aanpak ruimschoots voldoende is voor een efficiënte componentdeling!


Aanvullend: Deze aanpak werkt ook met andere frameworks dan Astro, zoals React, Vue en Svelte. De details van de configuratie kunnen verschillen, maar de basisaanpak blijft hetzelfde! Je kunt het buildproces op vergelijkbare wijze aanpassen bij andere hostingdiensten dan Cloudflare Pages.

Over de auteur

Van DTP naar het web: al snel werkte hij aan markup, frontend, projectregie en accessibility, en beheerst hij alles. Actief bij Liberogic sinds de beginjaren en nu een levende encyclopedie binnen het bedrijf. Recentelijk verdiept hij zich, met prompts als hulpmiddel, in de vraag: "Kunnen we voor accessibility niet meer op AI leunen?" Technologie en denkwijze blijven zich ontwikkelen.

Ayumu Futamata

IAAP-gecertificeerd webaccessibility-specialist (WAS) / Markup-engineer / Frontend-engineer / Webdirecteur

Bekijk de artikelen van deze medewerker

Ons grootste pluspunt is een betrouwbaar team en een snelle reactie

Bij Liberogic wordt er door onze ervaren medewerkers proactief aan projecten gewerkt, waardoor klanten ons hoog waarderen.
We zorgen ervoor dat er zorgvuldig een projectmanager en een director worden toegewezen, zodat het gehele project soepel verloopt. We voorkomen onnodige kostenstijging door middel van volledige inzet en verdelen de middelen op een manier die past bij de taak. Ook staan we bekend om ons snelle inzicht in de werkzaamheden en het snel opstellen en indienen van offertes.

* Liberogic zet zich niet in voor SES-achtige detacheringsopdrachten op locatie bij klanten. Houd hier alstublieft rekening mee.

U kunt vrijwel alle belangrijke tools voor projectmanagement en chat gebruiken, waaronder Slack, Teams, Redmine, Backlog, Asana, Jira, Notion, Google Workspace, Zoom, Webex en meer.

Bij grootschalige projecten met SES of offshore-ontwikkeling heeft u misschien vragen over technische uitdagingen en de aanpak daarvan?

Casestudies