Модули узла не определены в моем скрипте - PullRequest
0 голосов
/ 27 мая 2018

Я делаю веб-приложение, которое на основе изображения в формате jped распознает символы и отображает его в интерактивном интерфейсе для пользователя - это включает в себя некоторый асинхронный код.Существует 4 файла сценариев js, для которых требуются модули npm, и представление html.

Чтобы протестировать приложение на стороне клиента, я решил связать сценарии вместе.Он показывает следующее сообщение об ошибке:

Uncaught ReferenceError: require is not defined

Список моих модулей npm, код которых возвращает эту ошибку во время выполнения:

Я пробовал:

  1. browserify мои скрипты в комплекте, но я прочитал, что он не будет работать с асинхронными функциями;
  2. webpack скрипты в пакет, но Node-модули, такие как fs и child_process , возвращают 'undefined';
  3. добавление определенного модуля Node, child-process-ctor , чтобы принудительно заставить child_process включить

Увы, возвращается то же сообщение об ошибке.

Вопросы:

  1. Является ли объединение сценариев правильным подходом?
  2. Является ли проблема в том, что webpack не переносит fs и child_process правильно ?
  3. Какие возможные решения я должен рассмотреть?

Спасибо всем:-) Это мой первый вопрос по SO - любые отзывы приветствуются!

PS: Это может быть избыточно при Использование модуля child_process без Webpack .

1 Ответ

0 голосов
/ 28 мая 2018

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

Начать с самого начала.По мере того как Интернет в первые годы становился все более продвинутым, потребность в типе «логики интерфейса» возросла, и ответом Netscape на это требование было создание конкурентоспособного, передового языка программирования в рекордно короткие сроки.

И под рекордным временем я имею в виду 10 дней, а под конкурентным я имею в виду едва функционирующий.

Правильно, Javascript родился за 10 дней ( буквально ).Как вы можете себе представить, это был довольно плохой язык, но он работал достаточно хорошо, чтобы люди начали его использовать.

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

Если вы измените его, вы нарушите обратную совместимость с миллионами веб-сайтов.Другая идея состояла бы в том, чтобы сохранить это, но также и внедрить новый стандарт.Однако это было бы трудно оправдать, потому что для поддержки javascript уже потребовалось много работы, поддержание нескольких стандартов было бы кошмаром (кашель ... flash кашель).

Javascipt было легкоДостаточно для «новых» программистов, чтобы учиться, но проблема заключалась в том, что javascript был единственным языком в мире, где php, ruby, mySql, Mongo, Css, Html правили как доминирующие короли в своих королевствах.

Итак, кто-то подумал, что было бы неплохо перенести javascript на сервер, и таким образом родился node.js.

Однако для того, чтобы javascript означал что-либо на сервере, ондолжен был быть в состоянии сделать вещи, которые вы не хотели бы делать в вашем браузере.Например, отсканируйте свой жесткий диск и отредактируйте свои файлы.

Если каждый посещенный вами веб-сайт может начать сканирование и загрузку всего в вашей системе хорошо ....

Однако, если ваше серверное программное обеспечение не может редактировать или читать файлы, вынужно это ну ....

Вы поняли идею.Это тот же язык, но из-за проблем с безопасностью node.js имеет некоторые различия.В основном это модули, которые разрешено использовать.

Теперь самое интересное.Можете ли вы запустить клиентскую часть node.js в браузере.Технически да.Фактически, теперь, когда мы выгружаем целые операционных систем в подмножество javascript с именем asm.js , на самом деле javascript не может ничего сделать с достаточной вычислительной мощностью.

Однако даже если вы сбросите весь движок node.js (который по сути является урезанной версией chrome) в asm.js, вы все равно будете иметь те же ограничения безопасности, которые установлены браузером «Host», и поэтому вашмодули могут работать только в песочнице, которую предоставляет браузер.

Так что технически это просто браузер в другом браузере, работающий на половине скорости с теми же ограничениями безопасности.

Я бы порекомендовал это сделать?Конечно нет.

Это то, что люди еще не пробовали раньше?Конечно, нет.

Так что я надеюсь, что это поможет ответить на ваш вопрос.

...