Start free
Andrew Hanna

Andrew Hanna

Salesforce second-generation packaging (2GP), uitgelegd

Salesforce second-generation packaging (2GP), uitgelegd

TL;DR: Second-generation packaging (2GP) is de moderne, source-gedreven manier van Salesforce om managed en unlocked packages te bouwen en distribueren vanuit versiebeheer in plaats van een packaging-org. Het vervangt first-generation packaging (1GP) door modulaire packages, flexibele namespaces, expliciete dependencies en een Salesforce CLI-workflow. Salesforce raadt 2GP nu aan voor alle nieuwe managed package-ontwikkeling.

Wat is Salesforce second-generation packaging (2GP)?

Een 2GP-package is een container voor de metadata, code en schema die je als app distribueert - naar AppExchange-klanten (managed) of over je eigen org-landschap (unlocked). Het kernidee is dat de package wordt gebouwd vanuit source in Git, niet vanuit een stateful packaging-org. Salesforce stelt expliciet dat managed 2GP "niet zomaar versie 2.0" van 1GP is; het is een ander, automatiseringsvriendelijk ontwikkelmodel en het aanbevolen pad voor alle nieuwe packages.

Hoe verschilt 2GP van first-generation packaging (1GP)?

Kort gezegd: 1GP leeft in een packaging-org, 2GP leeft in je repository. Die ene verandering ontsluit de rest:

  • Source-gedreven. De packageversie wordt gemaakt vanuit je projectsource, dus Git is de bron van waarheid.
  • Modulair. Je kunt functionaliteit over meerdere packages splitsen in plaats van één monoliet.
  • Namespace-flexibiliteit. Dezelfde namespace kan door meerdere 2GP-packages worden gedeeld, al bindt elke package aan één namespace die na aanmaak niet kan wijzigen.
  • Expliciete dependencies. Package-dependencies worden gedeclareerd in sfdx-project.json, niet ontdekt bij installatie.
  • Versiebeheer- en CI-vriendelijk. De hele flow loopt via de Salesforce CLI, dus hij past in een pijplijn.

Managed of unlocked: welke 2GP heb je nodig?

Beide zijn second-generation packages die op dezelfde manier worden gebouwd. De keuze gaat over het publiek:

  • Managed 2GP - voor ISV's die distribueren op AppExchange. Code is IP-beschermd en de package draagt een geregistreerde namespace.
  • Unlocked packages - voor interne teams die de metadata van een org in deploybare, geversioneerde eenheden organiseren. Code blijft leesbaar.

Hoe maak je een 2GP-package? (stap voor stap)

Je hebt een Dev Hub-org nodig met Unlocked Packages and Second-Generation Managed Packages ingeschakeld, en de permissie Create and Update Second-Generation Packages. Vervolgens:

  1. Maak de package-definitie. sf package create --name MyApp --package-type Managed --path force-app --target-dev-hub DevHub
  2. Maak een versie vanuit je source, met een installatiesleutel en code coverage. sf package version create --package MyApp --installation-key test1234 --code-coverage --wait 10
  3. Test de installatie in een scratch- of sandbox-org. sf package install --package 04t... --wait 10
  4. Promoot naar released zodra hij slaagt. Promotie vereist dat je aan de code coverage voldoet. sf package version promote --package [email protected]

Een gepromote managed versie is degene die je indient bij de AppExchange security review voordat klanten hem kunnen installeren.

Wat zijn de veelvoorkomende 2GP-valkuilen?

  • Namespace is permanent. Kies bewust; een 2GP-package kan later niet van namespace wisselen.
  • Code coverage bepaalt promotie. Je kunt een versie niet naar released promoten zonder aan de Apex-coverage-eisen te voldoen.
  • Dependencies moeten expliciet zijn. Niet-gedeclareerde dependencies falen bij installatie, niet bij de build.
  • Niet elk 1GP-metadatatype wordt ondersteund. Controleer de dekking voordat je een oude package migreert.

Omdat de hele flow CLI-first is, past hij in een DevOps-pijplijn - dezelfde plek waar tools als Copado, Gearset, Salto, AutoRABIT, Flosum of Blue Canvas versiebeheer en testen orkestreren. Voor meer build-and-release-playbooks, zie onze SF Guides.

FAQ

Vervangt 2GP 1GP?

Salesforce raadt 2GP aan voor alle nieuwe managed packages, al werken bestaande 1GP-packages nog en kunnen ze worden gemigreerd.

Heb ik een Dev Hub nodig voor 2GP?

Ja. Schakel Dev Hub en second-generation packaging in en verleen de create/update-packages-permissie voordat je begint.

Kunnen twee 2GP-packages een namespace delen?

Ja. Meerdere managed 2GP-packages kunnen één namespace gebruiken, maar elke package bindt aan één namespace die na aanmaak niet kan wijzigen.

Wat is het verschil tussen managed en unlocked packages?

Managed 2GP is voor AppExchange-distributie met IP-bescherming; unlocked packages organiseren de metadata van je eigen org in geversioneerde, deploybare eenheden.

Gerelateerde artikelen

Benieuwd naar sneller releasen voordat je instapt? Laten we praten

Vrijblijvend.