Вы не можете запустить веб-сервер из веб-браузера. В браузере действительно нет ничего, что могло бы действовать как модуль Node http
. Также не имеет смысла запускать PhantomJS в браузере, потому что PhantomJS является веб-браузером.
Какое желаемое поведение вы пытаетесь достичь?
Update:
Похоже, вы пытаетесь запустить код, предназначенный для Node.js внутри браузера.
JavaScript-движок внутри браузера гораздо более ограничительный, чем в Node.js, например, вы не можете получить доступ к файловой системе из браузера из соображений безопасности (иначе вы могли бы прочитать жесткий диск любого, кто посетил вашей веб-странице).
Browserify делает include some "shims", что поставит мелкие JS библиотек в код, который работает в браузере и соответствовать API из Node.js, что позволяет некоторые Node.js специфического JS кода для выполнения в браузере.
В вашем случае требуется Phantom
, который, как представляется, в свою очередь требует http
. В соответствии с документацией Browserify он увидит require('http')
и включит a shim for the http module (потому что браузер не предоставляет собственный модуль http
).
Модуль Phantom
затем пытается вызвать http.createServer()
но к Согласно наблюдениям документации к HTTP прокладки:
This module implements http.request, http.get, and most of http.ClientRequest and http.IncomingMessage in addition to http.METHODS and http.STATUS_CODES.
так http.createServer()
не поддерживается прокладки. Это также имеет смысл, потому что браузер никогда не позволит вам открыть HTTP-сервер внутри себя, иначе навигация на чей-то веб-сайт может привести к тому, что ваш браузер начнет подавать контент во внешний мир, что, очевидно, не имеет смысла.
В Вашем комментарии:.
"i want that my node js script can be executed from another JS code"
Вы не уточняете, что «другой JS код» работает в случае, если что JS код уже запущен в узле, то вам не нужно Browserify вообще. Если вы пытаетесь запустить веб-браузер в реальном процессе Node.js, это не произойдет, опять же по очевидным соображениям безопасности, поскольку просмотр веб-страницы не должен иметь возможности запускать любой исполняемый файл на вашем система.
Что Browserify позволяет вам сделать, это взять код, первоначально предназначенный для узла.js и запускать его в браузере вместо этого, но t runtime выполняется в браузере, а не в Node.js, поэтому вы можете использовать только JS-код, который работает в рамках ограничений среды выполнения JS браузера.
Если вы пытаетесь выполнить свой код в Node.js, вам нужно сделать это, если что-то запустило исполняемый файл Node.js либо из командной строки, либо путем запуска другой программы для вас, но что невозможно сделать из веб-браузера. Если вы пытаетесь заставить пользователей перейти на ваш веб-сайт, а затем запустить этот код на своих машинах в браузере, а не в Node.js, вам нужно использовать только модули, которые работают в браузере.
Browsify также, вероятно, не поддерживает PhantomJS, потому что это полный браузер и не должен запускаться в другом браузере. –
спасибо, но как я могу запустить js-скрипт узла из кода javascript, не используя командную строку – Amouna