Зависимости Node.js весят слишком много

9

Недавно я начал играть с node.js.

Теперь, каждый учебник по узлу утверждает, что вы должны начать с

npm init

и затем, скажем, вам нужна стандартная серверная структура, скажем, вы выбрали экспресс:

npm install express

но тогда вам понадобится еще много вещей, к которым вы привыкли, в таких мирах, как ASP.NET.

Я говорю о шаблонизаторах (Jade) и препроцессорах таблиц стилей (SASS).

А потом они говорят вам: «установите gulp / grunt! Чтобы вы могли минимизировать, укрупнить и запустить сервер и многое другое автоматически!»

А это означает установку gulp, node-sass и gulp-sass, а также gulp-uglify и, возможно, более крутых вещей (tsd или babel, markdown и т. Д.) ...

Но все это тяжело на вашем диске и проекте. Не ищите ни минуты, и вы можете легко найти себя с объемом диска более 100 МБ для этого проекта (который еще даже не начался!), Не говоря уже о 10000+ файлах, поскольку каждый модуль узла имеет свои собственные зависимости, независимо от того, Зависимость используется другим модулем. И это очень трудно переместить куда угодно, не говоря уже о веб-сервере.

Я что-то пропустил? Я не думаю, что это возможно, что так много похвалы для среды узла, в то время как существует такой явный недостаток. Ожидаю ли я слишком многого (в конце концов, я пытался использовать много инструментов одновременно), есть ли что-нибудь тривиальное, известное ветеранам Node, чтобы обойти это?

Или Янив
источник
2
полностью согласен, я был поражен, увидев дерево npm для некоторых проектов переднего плана. Я предполагаю, что в мире .net у вас есть то же самое, но все они скомпилированы в двоичные файлы, так что вы не замечаете
Ewan
2
К сожалению, это не совсем конкретный и ответственный вопрос, поэтому он, вероятно, скоро будет закрыт. Я могу вам сказать, что 1) хотя все эти дополнительные инструменты полезны для чего-то, крошечные проекты просто не нуждаются в большинстве из них 2) все другие программные среды с аналогичной функциональностью будут иметь аналогичное количество материала (просто посмотрите при загрузке JRE или .NET) единственное различие заключается в том, сколько вам нужно, это часть дистрибутива «по умолчанию» и сколько вам нужно найти в других пакетах. 3) 100 МБ на вашем компьютере разработчика - ничто
Ixrec
1
@Ixrec, конечно, он отвечает, вы только что (или пытались) :). Но тогда я могу оспорить ваши претензии: 1) это не должен быть крошечный проект - рассмотрим проект с несколькими представлениями со своими собственными js-файлами и таблицами стилей. этого достаточно, чтобы заставить вас хотеть иметь sass, cssnano и uglify. также достаточно, чтобы вы хотели выразить, Джейд и немного больше. 2) У меня был приличный .net проект, который не стал таким тяжелым (и нигде не было столько файлов). 3) может быть, современная dev-машина воспринимает это легко, но это также сказывается на сервере, и это немного больше касается. Я ошибаюсь?
Или Янив
2
@OrYaniv В самом деле, вы как бы доказываете мою точку зрения: это вопрос, который можно обсуждать , но не ответить, потому что он слишком широкий и слишком сильно зависит от того, какие проекты вы делаете и от каких зависимостей вы, по-видимому, зависите. нужно. Кстати, обсуждения в чате полностью завершены . Или на Кору.
Иксрек
3
Добро пожаловать в удивительно раздутый мир "все или ничего" файла node.js, который на самом деле не проще и не лучше, чем вы использовали раньше.
Traubenfuchs

Ответы:

3

Недавняя проблема левой панели - яркий пример проблемы с этой тенденцией в Node. Когда вы зависите от слишком многих вещей, все они склонны к ка-пау, усложняют отладку вашего проекта и, для новичка, труднее понять работу языка.

Теперь хорошие программисты Node.js знают, как писать минималистичные приложения, когда речь идет о зависимостях. Чем меньше вещей, от которых вы зависите - тем лучше. Нужно дополнить строки слева? Закодируйте это в помощнике, это - 11 строк кода с пробелами. Нужно нумеровать строки строк? Закодируйте это, это меньше чем 100 строк кода.

Даже для более сложных задач, таких как управление проектами, я бы посоветовал придерживаться Makefiles, пока ваш проект достаточно прост - grunt и gulp действительно, действительно полезны для гигантских проектов, которые требуют больших усилий. Но для вашего SPA-блога? Напишите Makefile, это займет 5 минут, и вы знаете, как это работает.

Соблазн просто просматривать npm каждый раз, когда вам нужно написать 3 строки кода, велик, но его следует избегать, когда это разумно. Не включайте jQuery, если у вас есть 3 манипуляции с DOM, не используйте angular для этой статической промо-страницы, не используйте express для упрощенного сервера. Но вы кодируете CMS? Вы должны быть сумасшедшими, чтобы не использовать такие пакеты, как jQuery, подчеркивание, а что нет. Работаете с 10 типами коллекций, 3 базами данных и постоянно запрашиваете их? Вы были бы безумны, чтобы не использовать подчеркивание и несколько других. Подумайте: «Можно ли сэкономить достаточно времени, установив этот пакет?» или «Я не могу просто написать это в течение получаса или около того?»

BorisStoyanovv
источник
1
С другой стороны, действительно ли требуется 100 строк кода Javascript для добавления номеров строк в строку?
Роберт Харви,
Хахахах, я действительно не думал о реалистичной реализации нумерации строк, потому что ... я не вижу необходимости в существовании такой вещи, не говоря уже о пакете.
Борис Стояновв
Вы, вероятно, могли бы сократить эту линию пополам, просто позволив ей высказаться. Это действительно простая проблема для решения. (И это один вкладыш в схеме, подобной языку, и, вероятно, Python, теперь, когда я думаю об этом)
Шейн