A quoi sert le champ package.json «module»?

111

J'ai vu certains packages npm ( vue par exemple ) avoir un pkg.modulechamp dans leur package.json. Est-ce "module"une propriété officielle de npm ou s'agit-il d'une convention quelconque? Y a-t-il de la documentation à ce sujet quelque part? C'est pour quoi? chemin esnext? Chemin du module dégroupé?

Ryanve
la source
2
convention pour les modules ECMAScript - voici une bonne lecture sur les différentes approches pour identifier les ESM: hackernoon.com
...

Réponses:

118

Est-ce "module"une propriété officielle de npm ou s'agit-il d'une convention quelconque?

C'est une proposition , mais susceptible d'être prise en charge en raison d'une utilisation de facto.

Y a-t-il de la documentation à ce sujet quelque part?

Il existe, en fait, et il peut être trouvé ici et plus tard supprimé ici .

C'est pour quoi?

Interopérabilité du module ES6 dans Node. Des discussions supplémentaires peuvent être trouvées ici et ici . Et voici un article de blog de Rich Harris qui en parle davantage.

Josh Habdas
la source
1
WebPack a-t-il de la documentation à ce sujet quelque part, ou simplement Rollup?
tech4him
1
On dirait qu'ils l'ont ajouté ici: webpack.js.org/guides/author-libraries/#final-steps
tech4him
43

Ceci est utilisé par les outils de bundler pour la détection ESM (ECMAScript Module). La documentation Rollup le dit assez bien:

Si votre package.jsonfichier dispose également d' un modulechamp, des outils ES6-aware comme Rollup et webpack 2 seront importer la version du module ES6 directement.

Cet article sur Rollup 1.0 le dit d'une autre manière:

Le mainchamp garantit que les utilisateurs de nœud utilisant requirela version UMD seront servis. Le modulechamp n'est pas une fonctionnalité officielle de npm mais une convention commune parmi les bundlers pour désigner comment importer une version ESM de notre bibliothèque.

Une discussion plus approfondie pkg.moduleest sur le Wiki Rollup Github et le Webpack Docs .

Jack Steam
la source
1
Devrait-il mainêtre une version minifiée de la version UMD de la bibliothèque? Ou devrait-il en être une non minimisée? Et quoi module? Je suppose que ce module ne doit pas être minifié car l'utilisateur utilisera son bundler (Webpack, Parcel, etc ...) et en utilisant le fichier source avec les exportations de module ES6, le bundler peut exploiter l'arbre, n'est-ce pas?
tonix