в нього несумісні зміни. Переробляти і заново тестувати всі форми відразу вам не хочеться, краще робити це поступово. Для цього треба буде створити в додатку два каталоги, організувати в кожному свій підкаталог node_modules і помістити в них різні версії модуля forms. Потім, у міру перекладу черговий форми на новий модуль forms, її код переміщається в каталог, де знаходиться нова версія.
. 4 Системні модулі в каталогах, перелічених у масиві require.paths
При пошуку каталогів node_modules Node не обмежується деревом додатки. Алгоритм доходить до кореня файлової системи, тому можна створити каталог/node_modules і організувати в ньому глобальний репозиторій модулів. Саме тут буде завершуватися пошук модуля, що не знайденого ні в якому іншому місці.
Але Node надає і ще один механізм, заснований на змінній require, paths. Це масив імен каталогів, в яких слід шукати модулі.
Наведемо приклад:
$ node
gt; require.paths;
[laquo;/home/david/.node_modulesraquo;,laquo;raquo;/home/david/.node_librarieslaquo;, /usr/local/lib/node" ]
Для заповнення масиву require, paths використовується змінна оточення NODE_PATH:
$ export NODE_PATH=/ usr/lib/node
$ node
gt; require.paths;
[laquo;/usr/lib/noderaquo;,laquo;/home/david/.node_librariesraquo;,"/usr/local/lib/node ]
gt;
Раніше в програмах для Node часто застосовувалася наступна ідіома для додавання нових елементів у масив require.paths: require.paths.push (__ dirname). Однак тепер вона не рекомендується, тому що, як з'ясувалося, є джерелом плутанини. Хоча так робити можна і навіть ще залишилися модулі, в яких ця ідіома зустрічається, але дивляться на її використання з великим несхваленням. Якщо кілька модулів поміщають каталоги в require.paths, то результати непередбачувані.
У більшості випадків рекомендується встановлювати модулі в каталоги node_modules.
Складові модулі - модулі-каталоги
Складовою модуль може включати декілька внутрішніх модулів, файли даних, файли шаблонів, документацію, тести та інше. Все це можна помістити в добре продуману структуру каталогів, яку Node буде розглядати як модуль, і завантажувати командою require ( moduleName ). Для цього слід додати в каталог файл модуля index.js або файл з ім'ям package.json. Файл package.json повинен містити дані, що описують модуль, у форматі, дуже схожому на формат файлу package.json, використовуваного менеджером пакетів npm (див. Нижче). В обох випадках для сумісності з Node достатньо дуже невеликого набору полів, які розпізнаються npm.
Точніше, Node розпізнає наступні поля у файлі package.json:
{name: myAwesomeLibrary ,: ./ lib/awesome.js }
При такому файлі package.json команда require ( myAwesomeLibrary ) знайде цей каталог і завантажить файл
/path/to/node_modules/myAwesomeLibrary/lib/awesome.js
Якщо файлу package.json немає, то Node буде замість нього шукати файл index.js, тобто завантажить файл:
/path/to/node_modules/myAwesomeLibrary/index.js
У будь-якому випадку (index.js або package.json) реалізувати складовою модуль, що містить внутрішні модулі та інші файли, нескладно. Якщо повернутися до розглянутої вище структурі пакету Express, то ми побачимо, що деякі модулі користуються відносними ідентифікаторами для посилання на інші модулі в пакеті, а для включення модулів, розроблених кимось іншим, можна скористатися каталогом node_modules.
Менеджер пакетів для Node (npm) - це система управління та поширення пакетів для Node, що стала стандартом де-факто. Концептуально вона схожа на такі інструменти, як apt-get (Debian), rpm/yum (Redhat/Fedora), MacPorts (Mac OS X), CPAN (Perl) і PEAR (PHP). Її завдання - забезпечити публікацію і розповсюдження пакетів Node через Інтернет за допомогою простого інтерфейсу командного рядка. Npm дозволяє швидко знаходити пакети для вирішення конкретного завдання, завантажувати та встановлювати їх, а також керувати вже встановленими пакетами.
У npm визначено формат пакета для Node, заснований на специфікації CommonJS.
Формат npm-пакетапакет являє собою структуру каталогів, описану у файлі package.json. Саме так ми вище визначили складовою модуль, відмінність тільки в тому, що npm розпізнає значно більше полів, ніж Node. Вихідною точкою для визначення формату package, json для npm послужила специфі...