Как установить модули в node js

Как включить модули nodejs в файлы html?

Во-первых, я новичок в nodejs, а во-вторых, ниже мой вопрос. Как включить модуль NodeJS net в js, который загружается в html??

Мой JS-файл выглядит так.

А мой файл html находится ниже

Когда я запускаю файл HTML в браузере, он выдает следующую ошибку

Uncaught ReferenceError: require не определен

в то время как если я запускаю JS-файл непосредственно в nodejs (например, этот "node sample.js") с помощью командной строки, то он работает нормально.

3 ответа

Обычно в локальном режиме я использую cmd, командную строку для установки любого модуля nodejs с помощью npm install testing or connect or etc.. Но я решил использовать appfog в качестве сервера и добавляю nodejs в свой проект на appfg, но, вероятно, мне понадобятся некоторые модули nodejs, такие.

У меня есть модуль в NodeJs, запись основных является main.js: main.js └─┬ source ├── a.js ├── b.js ├── c.js └── d.js Этот модуль имеет module.export в главном файле, например module.exports = ZTree; И есть требование в каждом файле. Я не использую requires of node modules или другие модули.

NodeJS выполняется на сервере . Скрипт внутри HTML файлов запускается на клиенте . Вы не включаете серверный код в клиент. Вместо этого вы отправляете сообщения на серверный код от клиента и интерпретируете результаты. Таким образом, стандартный способ сделать это-определить ресурс на сервере, который генерирует контент или данные, которые вы хотите создать, и получить этот контент или данные от клиента , используя обычную загрузку страницы или " ajax " (хотя в наши дни большинство людей не используют "x" [XML] в "ajax" [некоторые все еще используют], они используют JSON, текст или HTML).

Чтобы уточнить, что сказал @T.J.Crowder в комментарии: то, что вы пытаетесь сделать, невозможно.

NodeJS-это фреймворк на стороне сервера. Javascript, который вы записываете в NodeJS, выполняется на сервере. Javascript, который вы пишете для своих HTML страниц, выполняется на клиенте. Клиент и сервер не могут напрямую вызывать методы друг друга. Именно для этого используются AJAX и другие асинхронные методы связи клиент-сервер.

Причина "require is not defined" в том, что "require" является ключевым словом node.js, но это не ключевое слово в браузере.

Node.js-это виртуальная машина (или запущенный контекст) для javascript, браузер также является виртуальной машиной для javascript. Но они сильно отличаются друг от друга. Вы не можете использовать ключевое слово, поддерживаемое в одной виртуальной машине, в другой виртуальной машине, точно так же, как вы можете использовать C/C++ как в Windows, так и в Linux, но есть много библиотек, которые находятся либо только в Linux, либо только в Windows.

Похожие вопросы:

Я создаю чат, используя сервер Express из NodeJS и AngularJS для менеджера на стороне клиента Но когда я пытаюсь включить /js/code.js в свой html , он не может быть найден, потому что не.

Я изучал nodejs и то, как создавать и требовать модули. Имеет смысл и отлично работает. Однако в данный момент я заинтересован в использовании функции concat gulp-concat для объединения всех.

Можно ли включить модули в другие модули в Ruby?

Обычно в локальном режиме я использую cmd, командную строку для установки любого модуля nodejs с помощью npm install testing or connect or etc.. Но я решил использовать appfog в качестве сервера и.

У меня есть модуль в NodeJs, запись основных является main.js: main.js └─┬ source ├── a.js ├── b.js ├── c.js └── d.js Этот модуль имеет module.export в главном файле, например module.exports =.

Я писал весь код Javascript моего файла шаблона html в самом файле html, но когда логика растет и усложняется, имеет смысл отдельно связать файл сценария javascript . Но я запускаю экспресс-сервер.

У меня есть такая структура каталогов для слоя AWS Lambda. main > nodejs > node_modules У меня есть файл test.js для проверки функциональности перед загрузкой в AWS. Можно ли иметь мой файл.

Я использую python & django и связываю, чтобы включить html файлов в мой файл index.html, но, похоже, не могу заставить его работать — любая помощь будет оценена по достоинству. Я добавлю.

Я хочу отправить несколько писем с помощью nodejs. В настоящее время я использую код html внутри скрипта NodeJS маршрута. Но когда html становится большим, файл Nodejs также становится огромным, и.

как импортировать модули nodejs в файл vanilla Javascript? Другими словами, как я могу использовать свои модули nodejs в файле vanilla javascript для frontend-сценариев?

Основы работы с Node.js

Node.js использует модульную систему. То есть вся встроенная функциональность разбита на отдельные пакеты или модули. Модуль представляет блок кода, который может использоваться повторно в других модулях.

При необходимости мы можем подключать нужные нам модули. Какие встроенные модули есть в node.js и какую функциональность они предоставляют, можно узнать из документации.

Для загрузки модулей применяется функция require() , в которую передается название модуля. К примеру, в первом приложении из предыдущей темы для получения и обработки запроса был необходим модуль http :

После получения модуля мы сможем использовать весь определенный в нем функционал, который опять же можно посмотреть в документации.

Подобным образом мы можем загружать и использовать другие встроенные модули. Например, используем модуль os, который предоставляет информацию об окружении и операционной системе:

Мы не ограничены встроенными модулями и при необходимости можем создать свои. Так, в прошлой теме проект состоял из файла app.js , в котором создавался сервер, обрабатывающий запросы. Добавим в тот же каталог новый файл greeting.js и определим в нем следующий код:

В файле app.js подключим наш модуль:

В отличие от встроенных модулей для подключения своих модулей надо передать в функцию require относительный путь с именем файла (расширение файла необязательно):

Модули в Node.js

На консоль выводится та строка, которая определена в файле greeting.js.

Теперь изменим файл greeting.js :

Здесь определена переменная currentDate . Однако из вне она недоступна. Она доступна только в пределах данного модуля. Чтобы какие переменные или функции модуля были доступны, необходимо определить их в объекте module.exports . Объект module.exports — это то, что возвращает функция require() при получении модуля.

Вообще объект module представляет ссылку на текущий модуль, а его свойство exports определяет все свойства и методы модуля, которые могут быть экспортированы и использованы в других модулях. Подробнее определение загрузки модуля и все его функции можно посмотреть на странице https://github.com/nodejs/node/blob/master/lib/module.js.

В частности, здесь определяется свойство date и метод getMessage , который принимает некоторый параметр.

Далее изменим файл app.js :

Все экспортированные методы и свойства модуля доступны по имени: greeting.date и greeting.getMessage() .

Подключение модулей в NodeJS

Определение конструкторов и объектов в модуле

Кроме определения простейших функций или свойств в модуле могут определяться сложные объекты или функции конструкторов, которые затем используются для создания объектов. Так, добавим в папку проекта новый файл user.js :

Здесь определена стандартная функция конструктора User, которая принимает два параметра. При этом весь модуль теперь указывает на эту функцию конструктора:

Основы работы с модулями в Node.js

Любой проект посложнее «Hello World» состоит из некоторого количества файлов, по которым разносят код. Это дает возможность структурировать проект, вынести независимые части, которые можно будет использовать в других проектах и вообще сделать код нагляднее.

Так вот, в Node.js каждый такой файл и представляет собой модуль, который можно подключить.
Подключение происходит с помощью вызова функции require , которой нужно передать путь к файлу.

Данный код подключает модуль авторизации и делает его доступным через переменную authModule .

В зависимости от того, какой параметр передан в функцию require , будет отличатся алгоритм подключения модуля. Так что давайте посмотрим на принципы подключения модулей в Node.js. Отмечу, что вся эта информация доступна в документации.

Вместе с Node.js поставляется несколько встроенных модулей, для подключения которых нужно просто указать название модуля.

Нужно отметить, что встроенные модули имеют приоритет над всеми остальными, если в функцию require передано их название. Так к примеру, require(‘http’) всегда вернет встроенный модуль, даже если будет сторонний модуль с таким названием или файл с таким именем. Список всех встроенных модулей и документацию по ним можно найти на сайте. Исходники этих модулей можно посмотреть в репозитории проекта.

Если передано название модуля и он не является встроенным, тогда идет подключение модуля из папки node_modules . В данной папке находятся все модули, которые добавлены с помощью NPM. NPM — это менеджер пакетов для Node.js, который упрощает поиск и подключение сторонних модулей. На момент написания этой статьи в нем находилось уже 89 503 модулей.

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

Давайте рассмотрим ситуацию, когда такой код был вызван из папки ‘/var/www/demo’ , тогда Node.js попытается найти указанные модули в следующих папках:

Node.js рекурсивно, каждый раз переходя в родительскую папку, будет искать папку node_modules с нужным модулем. NPM также даем возможность установить модуль глобально ( npm install -g MODULE ), тогда он будет доступен из любого места.

Рассмотрим еще один вариант подключения, если переданный параметр в функцию require начинается с / , ../ , или ./ , тогда файл для подключения будет происходить по абсолютному пути или относительно текущей папки.

Сначала будет проверено или существует файл с именем точно соответствующим указанному, если такой файл не будет найден, тогда Node.js попытается подключить файл добавляя к имени разные расширения: .js , .json , а также .node .

Поэтому нет необходимости указывать файл с расширением, так как require(‘./lib/users.js’) и require(‘./lib/users’) подключит один и тот же модуль.

Модули могут быть настолько большими, что может возникнет необходимость вынести некоторые части в отдельные файлы, чтобы лучше организовать код модуля. А так как эти файлы используются только этим модулем, не нужно чтобы они находились среди остальных модулей. Для решения этой проблемы в Node.js есть возможность организовать модуль в виде папки в которой будут находится все файлы модуля. Чтобы подключить такой модуль нужно просто передать путь данной папки в функцию require .

Представим, что у нас есть модули и один и них logger представлен в виде папки с файлами:

Подключение модуля logger заключается в том, что мы просто передадим путь к этой папки:

Дальше Node.js сам попытается определить какой из файлов папки представляет собой точку входа для модуля. Для начала будет проверено или существует в папке файл package.json в котором будет указано в поле main имя файла, который нужно подключить.

В нашем случае будет загружен файл ‘./logger/console.js’ . Если файла package.json нету, тогда Node.js попытается подключить файлы ‘./logger/index.js’ или ‘./logger/index.node’ .

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

Это поведение можно изменить, если после каждого вызова модуля удалять его из кэша.

module — это параметр, который вы передавали функции require для подключения модуля.

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

Чтобы получить полный путь, по которому был найден модуль, можно воспользоваться функцией require.resolve .

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

Эту функцию также можно использовать если вы хотите подключить один из файлов модуля, который установлен через NPM.

Так как вы не знаете где находится папка node_modules с нужным модулем, можно воспользоваться тем, что Node.js сам пройдется по всем возможным местам расположения модуля.

Функция require кроме всего этого имеет еще одно полезное свойство main . Оно хранит в себе модуль который был запущен из командной строки. Так что из любого модуля можно узнать или данный модуль был запущен напрямую или он был подключен как зависимость другого модуля.

Кроме уже рассмотренной функции require , в каждом модуле доступен объект module . Основная задача этого объекта дать возможность модулю вернуть результат своего исполнения. Это может быть и объект, и функция, и строка — любой тип данных.

В объекта module есть свойство exports и ему нужно присваивать все что вы хотите вернуть из модуля. Именно module.exports вернется как результат подключения модуля.

После подключения модуля с данным кодом, в ответе будет объект с данным методом.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *