CDN-opdateringer
Dependency-pipelinen kan opdatere eksterne JavaScript- og CSS-referencer i Git-tracked kildefiler, herunder views. Den finder også understøttede URLs uden ec-self-host.
Understøttede udbydere og regler
Sektion kaldt “Understøttede udbydere og regler”| URL-type | Politik i devops/dependency-updates.json |
|---|---|
| unpkg | npm.packages, med npm-pakkenavnet |
| npmcdn | npm.packages, med npm-pakkenavnet |
jsDelivr /npm/ |
npm.packages, med npm-pakkenavnet |
| cdnjs | cdnjs.packages, med cdnjs-bibliotekets navn |
Se det samlede konfigurationseksempel i Dependency-opdateringer.
Standardpolitikken er minor. patch holder opdateringen inden for nuværende minor, og none forhindrer alle ændringer, også versionspinning og skift af udbyder.
URLs uden version eller med latest fastlåses til en stabil version. Delvise versioner som @2, @2.1 og @3.x.x fastlåses inden for deres angivne interval. Mere komplekse versionsudtryk kræver manuel håndtering. For en fast version anvendes nye majors ikke automatisk; de vises som information i log og eventuel PR, og udløser ikke en selvstændig PR.
Skift til jsDelivr
Sektion kaldt “Skift til jsDelivr”Opdateringen foretrækker jsDelivr, når filen ved målversionen har identiske bytes hos begge udbydere. Derfor kan en URL skifte udbyder, selv om versionsnummeret allerede er aktuelt.
unpkg- og npmcdn-redirects opløses til en eksplicit filsti. Den gamle npmcdn-adresse downloades via unpkg.
Migration fra cdnjs kræver, at cdnjs selv angiver bibliotekets npm-kilde. Scriptet prøver filstien med og uden dist/. Både cdnjs-reglen og den tilsvarende npm-regel skal tillade migrationen. Andre mappings, herunder GitHub-kilder, bliver hos cdnjs. cdnjs-politikken vælger målversionen i den aktuelle kørsel. Efter en migration styrer npm-politikken senere opdateringer. Hvis migrationen fejler, bevares udbyderen, og der logges en advarsel. En gyldig versionsopdatering hos den oprindelige udbyder kan stadig gennemføres.
Integrity, CORS og sammenhængende filer
Sektion kaldt “Integrity, CORS og sammenhængende filer”Nye filer downloades og valideres før ændring. Eksisterende SRI-algoritmer genberegnes, eller der tilføjes SHA-384 på ændrede tags. Direkte CDN-tags kræver anonym CORS, og crossorigin="anonymous" tilføjes efter behov. ec-self-host bevares med en matchende integrity-hash. Kun kildefilen ændres i PR’en. Runtime-hjælperen downloader den nye version, og de downloadede assets tilføjes ikke til Git.
Et biblioteks CSS og JavaScript ved samme oprindelige version opdateres samlet. Hvis den nye CSS kan hentes, men JavaScript-filen giver HTTP 404, ændres ingen af referencerne. Biblioteker med fælles versionsvariabel skal også have en fælles tilladt målversion.
Razor og JavaScript
Sektion kaldt “Razor og JavaScript”Simple stringvariabler i samme Razor-fil kan opdateres, når alle referencer er genkendte CDN-script/link-URLs, og variablen ikke bruges til andre formål eller senere ændres.
Eksempel:
@{ var alpineVersion = "3.14.9"; }<script src="@($"https://unpkg.com/alpinejs@{alpineVersion}/dist/cdn.min.js")" ec-self-host></script>Scriptet kan opdatere variablens værdi og taggets integrity-hash, mens versionsudtrykket bevares.
En bogstavelig URL i en JavaScript-import kan også ændres:
import "https://unpkg.com/lit@3.1.0/index.js";Der tilføjes ikke et HTML-integrity-attribut til en JavaScript-import.
Eksempler på automatiske ændringer
Sektion kaldt “Eksempler på automatiske ændringer”Målversionerne nedenfor illustrerer adfærden. Faktiske versioner afhænger af tilgængelige stabile udgaver, projektets regler og vellykkede downloads. <beregnet hash> er den hash, som scriptet beregner fra filens bytes.
Razor med ec-self-host
Sektion kaldt “Razor med ec-self-host”<!-- Før --><script src="https://unpkg.com/tippy.js@@6.2.0/dist/tippy-bundle.umd.min.js" ec-self-host></script>
<!-- Efter --><script src="https://cdn.jsdelivr.net/npm/tippy.js@@6.3.7/dist/tippy-bundle.umd.min.js" ec-self-host integrity="sha384-<beregnet hash>"></script>Razor-escaping med @@ og attributtet ec-self-host bevares.
CSS uden ec-self-host
Sektion kaldt “CSS uden ec-self-host”<!-- Før --><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11.0.7/swiper-bundle.min.css">
<!-- Efter --><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11.2.10/swiper-bundle.min.css" integrity="sha384-<beregnet hash>" crossorigin="anonymous">En patch-regel ville holde Swiper inden for 11.0.x. Eksisterende SHA-256-, SHA-384- og SHA-512-hashes opdateres med deres oprindelige algoritmer.
Fastlåsning af versionsintervaller
Sektion kaldt “Fastlåsning af versionsintervaller”| Før | Eksempel efter | Adfærd |
|---|---|---|
https://unpkg.com/tippy.js/dist/tippy-bundle.umd.min.js |
https://cdn.jsdelivr.net/npm/tippy.js@6.3.7/dist/tippy-bundle.umd.min.js |
Fastlås en URL uden version og migrér identiske bytes |
https://unpkg.com/tippy.js@latest/dist/tippy-bundle.umd.min.js |
https://cdn.jsdelivr.net/npm/tippy.js@6.3.7/dist/tippy-bundle.umd.min.js |
Erstat latest med en fast version |
https://unpkg.com/tippy.js@6/dist/tippy-bundle.umd.min.js |
En fast 6.x-version af samme fil |
Fastlås inden for major 6 |
https://unpkg.com/tippy.js@6.2/dist/tippy-bundle.umd.min.js |
En fast 6.2.x-version af samme fil |
Fastlås inden for minor 6.2 |
https://npmcdn.com/flatpickr/dist/l10n/da.js |
https://cdn.jsdelivr.net/npm/flatpickr@4.6.13/dist/l10n/da.js |
Fastlås og migrér den danske locale, når bytes er identiske |
//cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js |
//cdn.jsdelivr.net/npm/alpinejs@3.15.12/dist/cdn.min.js |
Fastlås inden for major 3, og bevar den protokolrelative URL |
https://cdnjs.cloudflare.com/ajax/libs/tiny-slider/2.9.2/min/tiny-slider.js |
https://cdnjs.cloudflare.com/ajax/libs/tiny-slider/2.9.4/min/tiny-slider.js |
Brug bibliotekets cdnjs-politik. URL’en kan også migreres, hvis npm-kilde og bytekontrol tillader det |
Fælles version på tværs af npm-pakker
Sektion kaldt “Fælles version på tværs af npm-pakker”@{ var alpineVersion = "3.14.9"; }<script src="https://unpkg.com/@@alpinejs/focus@("@" + alpineVersion)/dist/cdn.min.js" ec-self-host></script><script src="@($"https://unpkg.com/alpinejs@{alpineVersion}/dist/cdn.min.js")" ec-self-host></script>Begge pakker skal tillade og levere samme målversion, og alle anvendelser af variablen skal være genkendte CDN-tags i samme fil. Er betingelserne opfyldt, kan værdien og begge hashes opdateres samlet, mens versionsudtrykkene bevares.
Referencer, der ikke ændres automatisk
Sektion kaldt “Referencer, der ikke ændres automatisk”| Eksempel eller placering | Årsag |
|---|---|
code.jquery.com og cdn.socket.io |
Udbyderne registreres, men opdateres ikke. jsDelivr npm-URLs for socket.io-client er understøttet |
jsDelivr /gh/ |
GitHub-URLs er ikke understøttet |
Versioner som @^3, tilde, sammenligningsudtryk, egne tags og prereleases |
Versionsudtrykkene er ikke understøttet |
Version fra Model.AlpineVersion eller URL fra GetCdnUrl() |
Udtrykket kan ikke opløses som en simpel lokal version |
| Fælles versionsvariabel, der også bruges i andre udtryk eller ændres senere | Alle anvendelser kan ikke opdateres sikkert samlet |
URL-lister, der senere renderes med eksempelvis <script src="@script"> |
Tags og integrity-hashes kan ikke kobles sikkert til den fælles version |
| Script/link-markup i JavaScript-strings eller JSX/TSX | Markupformen er ikke understøttet |
Dynamisk integrity, eksempelvis @Model.AssetHash |
Hashen kan ikke genberegnes som et fast attribut |
crossorigin="use-credentials" |
Kun anonym CORS understøttes for direkte tags |
HTML/Razor-kommentarer, blokkommentarer og selvstændige //-kommentarlinjer |
Kommentarerne udelades |
Untracked filer, wwwroot/vendor/, App_Plugins/ og *.min.js-kildefiler |
Filerne udelades fra scanningen |
| Google Fonts, tracking scripts og URLs, der kun ligger i CMS-indhold | Udbyderen eller placeringen er uden for scanningen |
En URL til en ekstern .min.js-fil er understøttet, når den står i en kildefil, som scannes. Udelukkelsen ovenfor gælder selve kildefilens navn.
Fejlet versionsopslag, manglende målfiler, ikke-understøttet markup, ugyldigt CORS-svar eller redirect til en anden host efterlader den berørte gruppe uændret og giver en advarsel. Gennemgå advarslerne, selv om dependency-pipelinen er grøn.