¿Para qué sirve el campo "módulo" package.json?

111

He visto que algunos paquetes npm ( vue, por ejemplo ) tienen un pkg.modulecampo en su package.json. ¿Es "module"una propiedad oficial de npm o es una convención de algún tipo? ¿Hay documentación para esto en alguna parte? ¿Para qué sirve? camino siguiente? ¿Ruta del módulo desagregada?

Ryanve
fuente
2
convención para módulos ECMAScript: aquí hay una buena lectura sobre los diferentes enfoques para identificar ESM: hackernoon.com/…
hackerrdave

Respuestas:

118

¿Es "module"una propiedad oficial de npm o es una convención de algún tipo?

Es una propuesta , pero es probable que reciba apoyo debido al uso de facto.

¿Hay documentación para esto en alguna parte?

Hay, de hecho, y se puede encontrar aquí y luego eliminar aquí .

¿Para qué sirve?

Interoperabilidad del módulo ES6 en Node. Se puede encontrar discusión adicional aquí y aquí . Y aquí hay una publicación de blog de Rich Harris que habla más sobre eso.

Josh Habdas
fuente
1
¿WebPack tiene documentación sobre esto en alguna parte, o simplemente Rollup?
tech4him
1
Parece que lo han agregado aquí: webpack.js.org/guides/author-libraries/#final-steps
tech4him
43

Esto lo utilizan las herramientas del paquete para la detección de ESM (módulo ECMAScript). La documentación de Rollup lo dice bastante bien:

Si el package.jsonarchivo también tiene un modulecampo, herramientas ES6-aware como el paquete acumulativo y webpack 2 serán importar la versión del módulo ES6 directamente.

Este artículo sobre Rollup 1.0 lo dice de otra manera:

El maincampo asegura que los usuarios de Node que usan requirerecibirán la versión UMD. El modulecampo no es una función oficial de npm, sino una convención común entre los empaquetadores para designar cómo importar una versión ESM de nuestra biblioteca.

Más información sobre este tema se pkg.moduleencuentra en Rollup Github Wiki y en el paquete web Docs .

Jack Steam
fuente
1
¿Debería mainser una versión reducida de la versión UMD de la biblioteca? ¿O debería ser uno no minificado? ¿Qué hay de module? Supongo que ese módulo no debe minimizarse porque el usuario usará su paquete (Webpack, Parcel, etc.) y al usar el archivo fuente con las exportaciones del módulo ES6, el paquete puede aprovechar la agitación de árboles, ¿correcto?
tonix