- require () не работает в скрипте типа nodejs
- 2 ответа
- Функция Javascript require () выдает ошибку ReferenceError: require не определен
- Не могу понять почему не работает require в nodejs
- 1 ответ 1
- Всё ещё ищете ответ? Посмотрите другие вопросы с метками node.js или задайте свой вопрос.
- Похожие
- Подписаться на ленту
- Правильное использование require в node.js
- Предисловие
- Разбор полетов
- Измерение пропускной способности
- Импортирование модулей непосредственно в обработчик
- Импортирование модулей в начале файла
- Анализ результатов
- node.js не подгружается require
- 4 ответа 4
require () не работает в скрипте типа nodejs
В моем файле package.json я указал, что мое приложение nodejs имеет тип module , потому что, если я этого не сделаю, мне кажется, что я не смогу использовать <
Но если я добавлю «type»: «module» в мой файл package.json , я больше не смогу использовать операторы require , потому что я получаю ошибку ReferenceError: require is not defined .
Если я удаляю строку «type»: «module» из package.json и переписываю все свои операции импорта в соответствии с требованиями, все работает без ошибок.
Кажется, я не могу найти никаких признаков того, что import и require нельзя смешивать или использовать вместе в одном и том же сценарии, я что-то здесь упускаю или у меня есть какая-то другая ошибка? Как я могу решить использовать эти два вида утверждений в одном и том же сценарии?
Почему мне это нужно, потому что я хочу require некоторые файлы конфигурации, основанные на динамических путях, и только если файлы существуют, что, я думаю, я не могу сделать с <
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я довольно новичок в программировании на стороне сервера nodejs, поэтому вполне возможно, что я подхожу к этой ситуации очень неправильно, если это так, пожалуйста, сообщите мне что-нибудь, основываясь на Почему Я упоминал выше.
ПРИМЕЧАНИЕ. Я запускаю скрипт этого узла из терминала сервера, а не из браузера.
2 ответа
Но если я добавлю «type»: «module» в свой файл package.json , я больше не смогу использовать операторы require , потому что я получаю ReferenceError: require is not defined error .
Правильно. Это или / или. Либо вы используете ESM (модули JavaScript, type = «module») , либо вы используете CJS (CommonJS-подобные Node.js собственные модули, require ).
Но , если вы используете type=»module» :
Вы все еще можете использовать модули CJS, вы просто импортируете их через import вместо require (или через import() [динамический импорт] при необходимости). Подробнее здесь и здесь.
Вы можете использовать createRequire , чтобы эффективно получить функцию require Вы можете использовать в своем модуле ESM, что приводит нас к .
Зачем мне это нужно, потому что я хочу require некоторые файлы конфигурации, основанные на динамических путях, и только если файлы существуют, что, я думаю, я не могу сделать с import .
Источник
Функция Javascript require () выдает ошибку ReferenceError: require не определен
В основном я использую javascript для очистки данных из магазина Google Play, используя:
Я использовал API Google Market из Github, который требует следующего:
Но я получаю следующее
ReferenceError: требование не определено .
Итак, мне не нужен javascript, который либо нов для меня, либо это что-то необычное.
RequireJS — это загрузчик файлов и модулей JavaScript. Он оптимизирован для использования в браузере, но может использоваться в других средах JavaScript, таких как Rhino и Node. Использование модульного загрузчика скриптов, такого как RequireJS, повысит скорость и качество вашего кода.
По умолчанию require() это недопустимая функция в javascript на стороне клиента. Я рекомендую вам изучить require.js, поскольку он расширяет клиентскую часть, чтобы предоставить вам эту функцию.
Реализация браузер может быть найден через require.js и нативная поддержка может быть найдена в node.js .
В документации к используемой вами библиотеке должно быть указано, что вам нужно для ее использования. Я подозреваю, что она предназначена для работы под Node.js, а не в браузерах.
Да, require является функцией Node.JS и не работает в сценариях на стороне клиента без определенных требований. Если вы получаете эту ошибку при написании кода electronicJS, попробуйте следующее:
В своем объявлении BrowserWindow добавьте следующее поле webPreferences: т.е. вместо простого mainWindow = new BrowserWindow() напишите
Источник
Не могу понять почему не работает require в nodejs
Долго с этим мучилась, грешила на ОС, пробовала тот же трюк на Linux у пред установкой параметров через scripts но та же ошибка, не могу понять где косанула.
файл 2: /utils/fbserver.js
package.json имеет инструкция скрипта для запуске через консоль: nmp start
Вроде бы все установила правильно, но упорно не хочет находить модуль fbserver.js (.
запись из npm-debug.log
1 ответ 1
require , если переданное имя модуля не начинается с / , ./ или ../ , ищет этот модуль в каталогах node_modules , начиная с текущего, и далее вверх до корня файловой системы. Соответственно, ни о каком каталоге utils require понятия не имеет. Нестандартные пути надо указывать явным образом: require(‘./utils/fbserver.js’) .
Также можно (но очень не рекомендуется) использовать переменную окружения NODE_PATH (что Вы, судя по приведенному коду, и пытались сделать), но в этом случае в NODE_PATH надо указывать абсолютные пути к каталогам, у Вас же указан относительный.
Подробнее можно почитать в документации.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками node.js или задайте свой вопрос.
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.10.18.40487
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Источник
Правильное использование require в node.js
Предисловие
Не так давно проект, на котором я работаю в данный момент, начал использовать модульную систему ES2015. Я не буду заострять внимание на этой технологии JavaScript, т.к статья совсем не об этом, а о том как технология сподвигла меня к одной мысли.
Как многие знают, ES2015 Modules представляют собой импортирование/экспортирование скриптов крайне схожее по синтаксису с python и многими другими языками программирования. Пример:
Все, кто интересовался модулями JavaScript знают, что импортирование и экспортирование возможно только на верхнем уровне модуля (файла с кодом).
Следующий грубый пример кода вызовет ошибки:
В отличие от ES2015 Modules — в модульной системе node.js импортирование и экспортирование возможны на любом уровне вложенности.
Аналогичный код на node.js не вызовет ошибку:
Преимущество такого способа в том, что модули необходимые в обработчике явно импортированы внутри и не засоряют пространство имен модуля (особенно актуально, если импортируемый модуль нужен только в одном обработчике). Так же появляется возможность отложенного экспортирования данных модуля.
- Об отсутствии модуля вы узнаете только во время вызова соответствующего обработчика
- Путь к импортироемому модулю может измениться, что приведет к изменению в каждом месте импортирования (например, в вашем модуле, в различных обработчиках используется lodash/object/defaults и вы решили обновиться до 4.x версии, где подключать нужно lodash/defaults ).
Разбор полетов
В большинстве задач для которых используется node.js — front-end или основной веб-сервер, и высокая нагрузка на node.js частое явление. Пропуская способность вашего сервера должны быть максимально возможная.
Измерение пропускной способности
Для измерения пропускной способности веб-сервера используется великолепная утилита от Apache — ab. Если вы еще с ней не знакомы, то настоятельно рекомендую это сделать.
Код веб-сервера одинаков за исключением обработчиков.
Тест запускался на node.js 6.0 с использованием модуля ifnode , сделанного на базе express
Импортирование модулей непосредственно в обработчик
Код:
Результат:
Импортирование модулей в начале файла
Код:
Результат:
Анализ результатов
Импортирование модулей в начале файла уменьшило время одного запроса на
23%(!) (в сравнение с импортированием непосредственно в обработчик), что весьма существенно.
Такая большая разница в результатах кроется в работе функции require . Перед импортированием, require обращается к алгоритму поиска абсолютного пути к запрашиваемому компоненту (алгоритм описан в документации node.js). Когда путь был найден, то require проверяет был ли закеширован модуль, и если нет — не делает ничего сверхестественного, кроме вызова обычного fs.readFileSync для .js и .json форматов, и недокументированного process.dlopen для загрузки C++ модулей.
Note: пробовал «прогревать» кеш для случая с непосредственным импортированием модулей в обработчик (перед запуском утилиты ab, модули были уже закешированы) — производительность улучшалась на 1-2%.
Источник
node.js не подгружается require
Подскажите что не так — есть два файла, server.js и config.json, оба в одной папке.
В server.js прописано:
При запуске server.js получаю ошибку Error: Cannot find module ‘config’
Но есть пропишу так:
то работает, однако мне нужен первый вариант так как есть вложенные папки где мне нужно использовать config, в чем может быть дело?
4 ответа 4
Первый вариант require(‘config’) указывает на использование подключенных библиотек, у них глобальная область видимости.
У второго варианта require(‘./config’) есть ./ , которая говорит использовать текущую папку и можно указать файл. Относительно текущей папки можно перемещаться вглубь папок require(‘./test/test’) Также можно перемещаться вверх на один уровень вложенности с помощью ../ , напр. если вы создали дочернюю папку myfolder , внутри нее используете require(‘./../config’)
Самый простой вариант:
Этот способ ищет модуль config.js, находящийся в той же директории что и главный модуль.
В более сложных случаях можно воспользоваться библиотекой rfr (это отдельная библиотека, ее можно скачать через npm install rfr ):
Эта библиотека ищет модули относительно папки, которая на 2 уровня выше той, куда она была установлена.
Для простых проектов этого будет достаточно, но если вы пишите библиотеку — вам надо не забыть добавить rfr в bundledDependencies , чтобы она была автоматически поставлена в нужную вам папку когда вашу библиотеку скачают.
Но я бы рекомендовал все же использовать относительные пути. Почему? Потому что IDE. Если вы будете использовать IDE — то она скорее всего попросту не поймет что за модуль вы загружаете нестандартным способом.
Относительные же пути работают в любых IDE которые поддерживают модули.
Источник