Загрузите один метод lodash для небольших сборок с помощью browserify/rollup/webpack

С сайта https://lodash.com/:

// Load a single method for smaller builds with browserify/rollup/webpack.
var chunk = require('lodash/chunk');
var extend = require('lodash/fp/extend');

Это хорошо работает с большинством методов: each, map, isArray и т. д. Единственный метод, который я не могу заставить работать, это lodash/chain.

Текущий код, в который я импортирую всю библиотеку lodash, выглядит примерно так:

_.chain(items)
  .filter(...)
  .groupBy(...)
  .map(...)
  .concat(...)
  .value();

Каким будет правильный способ создания правильного цепочечного объекта, который не содержит всех методов, включенных в сборку lodash? Метод chain создает объект-оболочку lodash и возвращает его. Я мог бы создать свой собственный цепной метод, подобный этому

var lodash = require('lodash/wrapperLodash');
var filter = require('lodash/filter');
var map = require('lodash/map');

function chain(value) {
  var result = lodash(value);
  result.__chain__ = true;
  result.filter = filter
  result.map = map;
  return result;
}

module.exports = chain;

Теперь вызов chain сможет выполнить filter и map. К сожалению, результат из chain().filter не будет иметь методов, которые я прикрепил в исходной цепочке. Каков правильный способ создания пользовательского цепного объекта lodash?


person jmlopez    schedule 13.03.2016    source источник
comment
Нашел. Начал с этого: npmjs.com/package/babel-plugin-lodash. Затем, после использования плагина, я получил: Ошибка сборки модуля: Ошибка: имя файла.js: синтаксис цепочки lodash не поддерживается babel-plugin-lodash. Рассмотрите возможность замены синтаксиса цепочки шаблонами композиции _.flow и _.flowRight. См. medium.com/making-internets/. Последняя ссылка имеет очень хорошее объяснение.   -  person jmlopez    schedule 13.03.2016


Ответы (1)


Для этого есть разные решения, хотя не все из них сохраняют возможности цепочки.

Пользовательская сборка Lodash (сохраняет цепочку)

Используйте https://lodash.com/custom-builds с собственными методами. Он создаст сборку lodash с нужными вам методами. Проблема, которую я обнаружил в прошлом с этим решением, заключается в том, что размер сборки довольно высок, даже если импортировать несколько методов, так как для этого требуется целая функция lodash, которая оборачивает ваши данные, чтобы иметь возможность использовать цепочку. .

Импортируйте только те функции, которые вам нужны (без цепочки)

Большинство функций lodash доступны в виде отдельных пакетов в npm (пример выбора), поэтому вы можете импортировать их по отдельности. Однако с этим решением у вас не будет цепочки.

Импорт функций из lodash src (без цепочки)

Другое решение состоит в том, чтобы импортировать определенные функции из вашего полного модуля lodash, поэтому любой упаковщик будет использовать только эту функцию с ее зависимостями, а не весь lodash, например:

var pick = require('lodash/pick');

Совет: не используйте цепочку

Хотя вы просили конкретно иметь цепочку, я хотел бы отговорить вас от ее использования, так как это плохая практика функционального программирования. Прочтите эту статью в блоге ( как вы упомянули в своем первом комментарии) за очень подробное объяснение того, почему лучше не использовать цепочку и как от нее отойти.

person Bertofer    schedule 25.02.2017