2012-05-10 1 views
6

Я заметил, что, пытаясь получить, казалось бы, простые пакеты узлов для установки с помощью npm (например, nerve, «микро-каркас»), я часто сталкиваюсь с некоторой формой боли в зависимости. После некоторого копания я отследил проблему с помощью нерва до модуля bcrypt, который, по-видимому, написан на C/C++ и должен быть скомпилирован после того, как менеджер пакетов загрузит его.Node.js/npm - в любом случае, чтобы узнать, является ли пакет чистым JS или нет?

К сожалению, кажется, что если вы хотите, чтобы это работало в Windows, ответ (из одной из проблем с проблемами bcrypt) «устанавливает Linux VM». Таким образом, сегодня я сделал это и начал работать в других зависимостях (вам нужно установить certain unnamed apt packages, прежде чем вы даже сможете подумать о его создании, несмотря на то, что GCC установлен), а затем, увидев еще одну ошибку компилятора C (о некотором пакете или другом не являющемся могу найти «Arrays.c», я думаю), я действительно сдался и переключился с нерва, чтобы выразить вместо этого. По иронии судьбы, большая и более сложная экспресс-установка с npm в Linux и Windows без единой проблемы.

Итак, мой вопрос: есть ли доступ к отслеживанию фильтра/зависимостей, который позволяет увидеть, есть ли у пакета дополнительные зависимости, кроме ядра ядра? Потому что для меня привлекательность узла - это «все в Javascript», и этот вид вещей довольно неприятно рассеивает иллюзию. Фактически, несмотря на то, что я делал больше, чем свое время, работая с C/C++, всякий раз, когда я вижу требование «сделать» что-то в эти дни, я обычно бегу в другом направлении, крича. :)

+1

Я чувствую вашу боль Дэйва, но иногда мы вынуждены спускаться к c/C++ путем оптимизации и потребностей в ресурсах.После работы с несколькими модулями собственных узлов и попыткой не повторять ничего и использовать разумные зависимости, я столкнулся с рядом проблем. Возможно, наиболее рациональными модулями узлов являются те, которые вызывают или выполняют собственный код, а не компилируют и связывают с ним. –

ответ

4

Обратите внимание на поле «скрипты» в package.json.

Если он содержит что-то вроде

"scripts": { 
    "install": "make build", 
} 

и Makefile в корневой директории, есть хорошая вероятность того, что пакет имеет некоторый собственный модуль, который должен был бы быть собран и построен. Многие пакеты включают Makefile только для компиляции тестов.

Эта проверка документов пакета не исключает возможности компиляции и сборки некоторой зависимости. Это означало бы повторение этого процесса для каждой зависимости в package.json, их зависимостях и так далее.

Сообщалось, что многие модули были обновлены для установки, без сборки на Windows, для одного. Однако это не может быть гарантировано для всех пакетов.

Использование виртуальной машины Linux представляется наилучшей альтернативой. Developing Node.js applications on Window дает пошаговые инструкции по установке VM, Node.js и Express.

2

Узел не «все javascript», так как один из способов расширить ядро ​​узла - написать плагины c/C++.

Таким образом, Node является более обертки javascript вокруг модулей c/C++ с использованием V8.

Как вы могли бы написать эффективные драйверы баз данных в чистом javascript? это было бы возможно, но медленно.

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

+1

Вы имеете в виду https://github.com/felixge/node-mysql? – Dave

+0

Как я уже сказал, это возможно (запись чистых драйверов базы данных js), но вы действительно протестировали пакет? я сделал . – mpm

+3

Я только что нашел эту сравнительную страницу, сравнивая чистые реализации JS с libmysql one: https://github.com/Sannis/node-mysql-bindings-benchmarks/wiki. Это похоже на https://github.com/sidorares/ nodejs-mysql-native так же быстро, как тот, который ссылается на mysql lib. Меня это совсем не удивляет - наверняка узкими местами для этого материала будут процессор и CPU/I/O базы данных и базы данных, а не сам клиент? – Dave

7

Первое решение не означает, что зависимость делает упаковку нечистой или нет. Гораздо лучше искать gyp сгенерированный выход:

find node_modules/ | grep binding.gyp || echo pure 
+0

Да, это дает ответ, и в этом случае это даже правильно, в отличие от первого ответа. Вы не можете сказать из «make build», что это делает. Он может создать что-то, что не является чистым сценарием, но это может и не быть. И этот ответ также не проверяет никакой зависимости. Единственный правильный ответ - искать какие-либо доказательства узла-gyp, который заключается в том, чтобы построить все, что нечисто. –

Смежные вопросы