He visto algunos paquetes npm ( vue, por ejemplo ) que tienen un campo de module en su paquete.json.
Pero el module no está incluido en la documentación de package.json . ¿Es esta una convención de algún tipo? ¿Hay documentación para esto en alguna parte?
El campo del module no está definido oficialmente por Node.js y el soporte no está planificado. En cambio, la comunidad de Node.js se decidió por la exportación de paquetes , que creen que es más versátil.
Por razones prácticas, los paquetes de JavaScript seguirán siendo compatibles con el campo del module . Los documentos de esbuild explican cuándo usar el module , así como los campos relacionados main y browser .
¿Es
"module"una propiedad oficial de npm o es una convención de algún tipo?
Es una propuesta , pero es probable que sea compatible debido al uso de facto.
¿Hay documentación para esto en alguna parte?
De hecho, existe, y se puede encontrar aquí y luego eliminar aquí .
¿Para qué es esto?
Interoperabilidad del módulo ES6 en Node. Se puede encontrar una discusión adicional aquí y aquí . Y aquí hay una publicación de blog de Rich Harris hablando más al respecto.
Esto lo utilizan las herramientas de empaquetado para la detección de ESM (módulo ECMAScript). La documentación de Rollup lo dice bastante bien:
Si su archivo
package.jsontambién tiene un campo demodule, las herramientas compatibles con ES6 como Rollup y webpack 2 importarán la versión del módulo ES6 directamente.
Este artículo sobre Rollup 1.0 lo dice de otra manera:
El campo
maingarantiza que los usuarios de Node que utilicenrequirerecibirán la versión UMD. El campo demoduleno es una característica oficial de npm, sino una convención común entre los empaquetadores para designar cómo importar una versión ESM de nuestra biblioteca.
Hay más información sobre pkg.module en Rollup Github Wiki y en Webpack Docs .