Support the /+esm endpoint on jsDelivr packages
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 42/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- csharp, javascript, rollup
- Ambito
- developer-experience, tooling
Direzione di ricerca
No files or tests are named. Start by locating LibMan's provider parsing and jsDelivr download handling, then review how library and file paths are resolved. Done means an agreed /+esm form can fetch package and individual-file ESM endpoints with coverage for the supported syntax.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Is your feature request related to a problem? Please describe.
Some libraries available through jsDelivr have no default JS file specified by the package author. Libraries packaged for NPM are often meant to be included as CJS modules, with the expectation that the developer will use a tool like webpack or Rollup.js to prepare the code to run client-side. On jsDelivr packages sometimes have this disclaimer under the "install" code snippet:
No default JS file set by the package author so the URL is guessed. You can always browse all package files to use another one.
Luckily jsDelivr provides a more reliable option - fetching the library as an ES module, as illustrated in this example:
<script type="module">
import coreJs from 'https://cdn.jsdelivr.net/npm/core-js@3.45.0/+esm'
</script>
jsDelivr uses Rollup.js to generate the ESM version of the package and exposes the result when it sees /+esm appended to the URL. This is a very helpful feature provided by the CDN, but as far as I can tell there is currently no way to leverage this feature with LibMan.
Describe the solution you'd like
It would be a nice convenience if there was some way to tell LibMan to fetch pre-bundled libraries from jsDelivr. I think the simplest syntax for this would be:
{
"provider": "jsdelivr/esm",
"library": "core-js@3.45.0",
"destination": "wwwroot/lib/core-js/index.mjs"
}
The file name, [library name]/index.mjs, could be inferred, though I believe that is a separate issue.
Describe alternatives you've considered
I did try "tricking" LibMan into fetching a generated ESM for me with something like this:
{
"provider": "jsdelivr",
"library": "core-js@3.45.0",
"files": [ "/+esm" ]
}
Of course, that doesn't work because there is no literal "/+esm" file in this package. A more sensible and straightforward alternative syntax might be:
{
"provider": "jsdelivr",
"library": "core-js@3.45.0/+esm"
}
Additional context
I've found a few examples, like parse and locutus, where the /+esm endpoint is the only install option shown on the download page.
Locutus is an odd example, because the package contains a very large collection of submodules. I've found that jsDelivr supports a form of tree shaking by allowing /+esm to be appended to individual files in the library:
<script type="module">
import pcre from 'https://cdn.jsdelivr.net/npm/locutus@2.0.32/php/pcre/+esm'
import sprintf from 'https://cdn.jsdelivr.net/npm/locutus@2.0.32/php/strings/sprintf.js/+esm'
</script>
LibMan might be able to take advantage of this feature as well:
{
"provider": "jsdelivr/esm",
"library": "locutus@2.0.32",
"destination": "wwwroot/lib/locutus",
"files": [
"/php/pcre/index.js",
"/php/strings/sprintf.js"
]
}
- Lingua principale
- C#
- Stelle
- 486
- Fork
- 91
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di aspnet/LibraryManager
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
aspnet/LibraryManager#824 · 1 commento · 3 reazioni ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 68/100
aspnet/LibraryManager#804 · 2 reazioni ·
-
Changelog for 3.0.114 Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 48/100
aspnet/LibraryManager#829 · 1 commento · 3 reazioni ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 42/100
aspnet/LibraryManager#820 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
aspnet/LibraryManager#808 · 5 commenti ·
Tutte le issue di aspnet/LibraryManager
Issue simili
-
CS0162 "Unreachable code detected" warning from a MSBuildTemp .tmp file in every game project Apertabug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
-
Type: enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
apache/arrow-adbc#4809 ·
-
type/automation type/tech-debt
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
microsoft/vscode-azurefunctions#5197 · 1 commento ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
microsoft/microsoft-ui-reactor#1274 ·