Wofür ist das Feld "module" package.json?


110

Ich habe gesehen, dass einige npm-Pakete ( z. B. vue ) ein pkg.moduleFeld in ihrer package.json haben. Ist "module"eine offizielle npm-Eigenschaft oder ist dies eine Konvention? Gibt es irgendwo Dokumentation dafür? Wofür ist das? nächster Pfad? Entbündelter Modulpfad?


2
Konvention für ECMAScript-Module - hier ist eine gute Lektüre über die verschiedenen Ansätze zur Identifizierung von ESMs
hackerrdave

Antworten:


118

Ist "module"eine offizielle npm-Eigenschaft oder ist dies eine Konvention?

Es handelt sich um einen Vorschlag , der jedoch aufgrund der tatsächlichen Verwendung wahrscheinlich unterstützt wird.

Gibt es irgendwo Dokumentation dafür?

Es ist in der Tat, und es findet sich hier und später entfernt hier .

Wofür ist das?

Interoperabilität des ES6-Moduls im Knoten. Weitere Diskussionen finden Sie hier und hier . Und hier ist ein Blog-Beitrag von Rich Harris, der mehr darüber spricht.


1
Hat WebPack irgendwo eine Dokumentation dazu oder nur Rollup?
Tech4him

1
Sieht so aus, als hätten sie es hier hinzugefügt: webpack.js.org/guides/author-libraries/#final-steps
tech4him

43

Dies wird von Bundler-Tools für die ESM-Erkennung (ECMAScript Module) verwendet. Die Rollup-Dokumentation sagt es ziemlich gut:

Wenn Ihre package.jsonDatei hat auch ein moduleFeld, ES6-aware Tools wie Rollup und webpack 2 werden die ES6 Modulversion importieren direkt.

Dieser Artikel zu Rollup 1.0 sagt es anders :

Das mainFeld stellt sicher, dass Knotenbenutzern, die verwenden require, die UMD-Version bereitgestellt wird. Das moduleFeld ist keine offizielle npm-Funktion, sondern eine unter Bundlern übliche Konvention, um festzulegen, wie eine ESM-Version unserer Bibliothek importiert werden soll.

Weitere Diskussionen finden Sie pkg.moduleim Rollup Github Wiki und in den Webpack-Dokumenten .


1
Sollte maineine minimierte Version der UMD-Version der Bibliothek sein? Oder sollte es ein nicht abgeschlossenes sein? Was ist mit module? Ich denke, dass das Modul nicht minimiert werden sollte, da der Benutzer seinen Bundler (Webpack, Parcel usw.) verwendet und der Bundler durch Verwendung der Quelldatei mit ES6-Modulexporten Baumschütteln auslösen kann, richtig?
Tonix
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.