Для чего нужно поле «модуль» package.json?

111

Я видел, как некоторые пакеты npm ( например, vue ) имеют pkg.moduleполе в package.json. Это "module"официальное свойство npm или это какое-то соглашение? Есть где-нибудь документация по этому поводу? Для чего это? esnext путь? Разделенный путь модуля?

Райанве
источник
2
соглашение для модулей ECMAScript - вот хорошее прочтение о различных подходах к идентификации ESM: hackernoon.com/…
hackerrdave

Ответы:

118

Это "module"официальное свойство npm или это какое-то соглашение?

Это предложение , но, вероятно, будет поддержано из-за фактического использования.

Есть где-нибудь документация по этому поводу?

На самом деле он есть, и его можно найти здесь, а потом удалить здесь .

Для чего это?

Взаимодействие модулей ES6 в Node. Дополнительное обсуждение можно найти здесь и здесь . И вот сообщение в блоге Рича Харриса, в котором говорится об этом подробнее.

Джош Хабдас
источник
1
Есть ли у WebPack где-нибудь документация по этому поводу или просто Rollup?
tech4him
1
Похоже, они добавили его сюда: webpack.js.org/guides/author-libraries/#final-steps
tech4him
43

Это используется инструментами сборщика для обнаружения ESM (модуль ECMAScript). В документации Rollup это хорошо сказано:

Если в вашем package.jsonфайле также есть moduleполе, инструменты, поддерживающие ES6, такие как Rollup и webpack 2, будут напрямую импортировать версию модуля ES6 .

Эта статья о Rollup 1.0 говорит об этом иначе:

Это mainполе гарантирует, что пользователи Node requireбудут обслуживать версию UMD. Это moduleполе не является официальной функцией npm, а является общим соглашением между сборщиками, определяющим, как импортировать ESM-версию нашей библиотеки.

Дальнейшее обсуждение pkg.moduleнаходится в Rollup Github Wiki и в документации webpack .

Джек Стим
источник
1
Должна mainбыть уменьшенная версия библиотеки UMD? Или он должен быть неуминированным? О чем module? Я предполагаю, что этот модуль не следует минифицировать, потому что пользователь будет использовать его сборщик (Webpack, Parcel и т. Д.), И, используя исходный файл с экспортом модуля ES6, сборщик может обрабатывать дерево, правильно?
tonix