Lodash встроен в Node?

Это работает без установленной зависимости lodash:

const _ = require('lodash');
_.each([1,2,3],console.info);

(нет, у меня глобально не установлен lodash)

Я где-то видел что-то вроде того, что nodejs поддерживает lodash по умолчанию, но теперь я не могу найти никакой документации по этому поводу. Это наконец правда? Где я могу прочитать об этом?

P.S. Наконец, я нашел и удалил node_modules в своем домашнем каталоге, и вся магия исчезла, теперь этот скрипт выдает ошибку из-за отсутствия зависимости. Спасибо, ребята, за помощь в этом расследовании.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
2 090
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Библиотека не встроена в node. Вы можете посмотреть полный список встроенных модулей @

https://github.com/nodejs/node/tree/master/lib

Так почему же код из моего вопроса работает? Может быть, npm предварительно загружает его без явного запроса?

Yuri Gor 02.12.2018 19:58

Не совсем. Нет смысла собирать 100K+ lib из коробки и предполагать, что она будет использоваться разработчиком. Например, рассмотрим этот пример Repl

Это сделает среду узла и установит любые пакеты, указанные в операторах require. Если ничего не предусмотрено, это просто node, ничего больше.

Как видите, из коробки вы получите _ is not defined. но в тот момент, когда вы добавите const _ = require('lodash'), он станет для вас lodash auto-install, и вы получите желаемый результат. Для удобства это делается с помощью инструмента Repl., так что вам не нужно делать npm install ... и т. д. Но из коробки нода не упакована с lodash.

Также с ES6 больше не существует большого количества вариантов использования lodash, и как только ES6 получит широкую поддержку, аргумент о совместимости lodash с браузером также не будет иметь такого значения. Так что в будущем будет даже меньше смысла связывать его с узлом.

Однако интересно то, что npm, включенный как deps в репозиторий узлов, имеет зависимости от lodash :).

Есть ли какой-нибудь документ об этой функции автоматической установки? Какие пакеты я могу или не могу использовать таким образом? Будет ли он поддерживаться в будущем? Безопасно ли не указывать lodash в package.json? Особенно в случае разработки другого пакета, который зависит от lodash.

Yuri Gor 02.12.2018 20:13

Вы должны явно указать свои зависимости в своем модуле. Не полагайтесь на предположения, что lodash is/would be/should be является частью node.

Akrion 02.12.2018 22:11

Мне не терпится услышать об этой функции "автоматической установки" - я никогда о ней не слышал.

Chris 03.12.2018 06:21

@Chris Я думаю, что я, вероятно, не очень хорошо поработал со своим ответом, если он относился к "функции" auto-install. Тот, который существует в Repl tool, выполняет автоматическую установку, поскольку обнаруживает зависимости, но это веб-среда. так что это сделано для удобства. Я утверждаю, что из коробки нет lodash с node.

Akrion 03.12.2018 06:24
Ответ принят как подходящий

Я думаю, что Акрион частично прав в том, что он говорит (ему больше не нужен lodash, lodash по умолчанию не является частью узла).

Я предполагаю, почему он работает, заключается в том, что у вас есть необходимая библиотека, которая, в свою очередь, зависит от lodash, и любой используемый вами сборщик выбирает ее таким образом.

Рискну предположить, что если вы откроете папку node_modules, там будет находиться lodash. Просмотрите свой файл package.lock (или файл блокировки пряжи) и посмотрите, что включает в себя lodash.

РЕДАКТИРОВАТЬ Как было обнаружено в комментариях, в домашнем каталоге была папка node_modules.

Я только что создал тестовый скрипт вне любого проекта, там нет node_modules, но теперь я подозреваю, есть ли какие-то в одном из родителей. Необходимо провести расследование.

Yuri Gor 03.12.2018 07:43

В тестовом сценарии вне любого проекта - вы говорите, что все еще можете импортировать lodash ?? Если да, то вы на 100% уверены, что он не установлен глобально?

Chris 03.12.2018 08:00

Да, скрипт из моего вопроса просто работает, без каких-либо трений npm. Но теперь я вижу node_modules в моем домашнем каталоге, и там установлен lodash, поэтому я, вероятно, установил его некоторое время назад по ошибке. Я удалил его, и вся магия lodash исчезла.

Yuri Gor 03.12.2018 08:06

Ха-ха, ну разве это не головокружение!

Chris 03.12.2018 08:25

Я написал пакет с отсутствующим lodash dep, который уже устанавливался несколько сотен раз - на отсутствие зависимостей никто не жаловался. Слишком рано говорить, что lodash больше не нужен.

Yuri Gor 03.12.2018 08:45

Я не возражаю - использование lodash действительно зависит от вашего проекта, вашей предполагаемой поддержки, ваших инструментов сборки и т. д.

Chris 03.12.2018 11:14

Другие вопросы по теме