Делает ли webpack 4 дедупликацию пакетов npm, которые, в свою очередь, уже были объединены webpack?

Я видел другие подобные вопросы. Вопросы, которые я видел, были заданы до выпуска Webpack 4, не касались конкретно npm и не получили окончательных ответов.

Допустим, я использую webpack для сборки пакета, который включает в себя зависимости, и я не хочу классифицировать эти зависимости как внешние webpack и одноранговые зависимости npm. Затем я публикую этот пакет в npm.

Кто-то скачивает мой пакет и использует его как часть проекта. Этот проект уже включает одну из зависимостей моего пакета. Допустим, этот проект, в свою очередь, связан webpack.

1.) Будет ли webpack распознавать и устранять дубликаты зависимостей при сборке проекта?

2.) Если нет, и если я не использую webpack для сборки моего пакета npm, позволит ли он webpack дедуплицировать повторяющиеся зависимости при сборке проекта?

3.) Каковы передовые методы в этом отношении?


person twils0    schedule 22.10.2018    source источник


Ответы (1)


если вы уже распространяете файл, связанный webpack со всеми зависимостями, вам не нужно объявлять ни зависимости, ни peerDependencies.

1.) Будет ли webpack распознавать и устранять дубликаты зависимостей при сборке проекта?

Да

3.) Каковы передовые методы в этом отношении?

Опубликуйте пакет с внешними и одноранговыми зависимостями и позвольте пакету работать на стороне пользователя.

person PlayMa256    schedule 22.10.2018
comment
Итак, для 3.) лучших практик, если я связываю с webpack, все зависимости должны быть внешними/одноранговыми зависимостями? Что делать, если у меня есть 5 необычных зависимостей? Каждый раз, когда кто-то использует мой пакет, ему придется загружать все 5, чтобы избежать дублирования? Это кажется странным. - person twils0; 22.10.2018
comment
ваши необычные зависимости будут загружены, когда люди установят ваш пакет. Тогда webpack будет лучше работать с другой стороны. Публикация уже связанных зависимостей — это совсем неплохо. Это зависит от вас на самом деле. - person PlayMa256; 22.10.2018
comment
Спасибо за вашу помощь! Так вы говорите - если я свяжу, то будет дедупликация. Если я не упакую с внешними/одноранговыми зависимостями, он автоматически установит другие зависимости, когда пользователь загрузит мой пакет npm? Или пользователю нужно будет загрузить одноранговые зависимости вручную? - person twils0; 22.10.2018
comment
Если вы связываете или не связываете, webpack все равно будет выполнять дедупликацию. Наиболее часто используемая стратегия заключается в том, чтобы не связывать и позволять потребителю вашего приложения связывать его. Это не значит, что вы не можете связать это, это зависит от вас. Вы можете связать, если хотите убедиться, что он будет работать где угодно, несмотря ни на что - person PlayMa256; 22.10.2018
comment
Когда вы добавляете зависимости, когда кто-то пишет npm install yourpackage, он устанавливает все зависимости от объекта зависимостей в вашем package.json. Когда вы устанавливаете peerDependencies, у пользователя должны быть установлены эти зависимости, они не будут установлены автоматически. - person PlayMa256; 22.10.2018
comment
Понятно. Я вижу, что ты говоришь. Благодарю вас! - person twils0; 22.10.2018