Gå til indhold

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.

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.

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.

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.

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.

<!-- 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.

<!-- 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.

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.

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.