Para que serve o campo package.json “módulo”?

111

Eu vi alguns pacotes npm ( vue por exemplo ) têm um pkg.modulecampo em seu package.json. É "module"uma propriedade oficial do NPM ou é algum tipo de convenção? Existe documentação para isso em algum lugar? Para que serve isto? próximo caminho? Caminho do módulo não agrupado?

Ryanve
fonte
2
convenção para módulos ECMAScript - aqui está uma boa leitura sobre as diferentes abordagens para identificar ESMs
hackerrdave

Respostas:

118

É "module"uma propriedade oficial do NPM ou é algum tipo de convenção?

É uma proposta , mas provavelmente terá suporte devido ao uso de fato.

Existe documentação para isso em algum lugar?

Existe, de fato, e pode ser encontrado aqui e posteriormente removido aqui .

Para que serve isto?

Interoperabilidade do Módulo ES6 no Nó. Discussões adicionais podem ser encontradas aqui e aqui . E aqui está uma postagem no blog de Rich Harris falando mais sobre isso.

Josh Habdas
fonte
1
O WebPack tem documentação sobre isso em algum lugar, ou apenas Rollup?
tech4him
1
Parece que eles adicionaram aqui: webpack.js.org/guides/author-libraries/#final-steps
tech4him
43

Isso é usado por ferramentas de bundler para detecção de ESM (ECMAScript Module). A documentação Rollup diz muito bem:

Se o seu package.jsonarquivo também tiver um modulecampo, ferramentas compatíveis com ES6, como Rollup e webpack 2 , importarão a versão do módulo ES6 diretamente.

Este artigo no Rollup 1.0 diz de outra maneira:

O maincampo garante que os usuários do Node usando requirea versão UMD serão atendidos. O modulecampo não é um recurso oficial do npm, mas uma convenção comum entre os empacotadores para designar como importar uma versão ESM de nossa biblioteca.

Uma discussão mais aprofundada pkg.moduleestá no Rollup Github Wiki e no webpack Docs .

Jack Steam
fonte
1
Deve mainser uma versão reduzida da versão UMD da biblioteca? Ou deveria ser um não minimizado? Sobre o quê module? Eu acho que esse módulo não deve ser minimizado porque o usuário usará seu bundler (Webpack, Parcel, etc ...) e usando o arquivo de origem com o módulo ES6 exporta o bundler pode agitar árvores, correto?
tonix