2014-09-16 3 views
0

Узел имеет простую систему загрузки модуля, которая использует вызов метода require() для загрузки модулей из разных мест в корневой папке. .Модули NPM в проектах на основе Grunt

var qr = require('qr-image');  

Я пытаюсь сделать что-то подобное в ворчанием, но я неудачно с этим.

Я добавил этот модуль в файл package.json следующим образом, а затем выполнил npm install в корневой директории проекта.

"devDependencies": { 
    . 
    . 
    . 

    "qr-image": "^2.0.0" 
}, 

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

ReferenceError: require is not defined

Просьба предложить как использовать модуль npm в проекте на основе Grunt, спасибо.

+2

Что вы подразумеваете под «получить следующую ошибку на консоли». Вы используете это в терминале (используя linux или mac osx) или в браузере? Если он находится в терминале, какую команду вы вводите для его запуска? – MrColes

+0

FYI Большинство результатов на 'ReferenceError: require не определено' в Google связаны с людьми, пытающимися использовать' require' в сценариях браузера, которые, если вы не используете браузер, не будут работать. – Andy

+0

Я пишу код в своих .js-файлах. (попробовал как контроллер, так и сервис javascript). Выполняя элемент Inspect in chrome, я вижу эту ошибку. Я смущен, где использовать? В проекте на узле, который я использовал для записи инструкции require в файле server.js (где я использовал для определения сервера и его порта, на котором он запущен) –

ответ

0

Функция require не доступна в веб-браузерах. Вместо этого это часть nodejs, которая является серверным языком (например, что-то, что вы можете запускать прямо с вашего компьютера, а не в браузере) и используется для загрузки зависимостей на этом языке.

В веб-браузере, я обычно просто включить свои зависимости в качестве дополнительных скриптов на странице, например ,:

<script src="path/to/my/dependency.js"></script> 
<script src="path/to/my/code.js"></script> 

Некоторые другие варианты RequireJS или то, что перечислено в this question или больше зависимости общего назначения менеджер для интерфейсного кода: Bower.

Если вы сфокусировались на своем вопросе, вероятно, что зависимость «qr-image» npm не будет работать в клиентском коде для вас (поскольку она была создана для запуска через узел в серверном коде).

Быстрый поиск кода на стороне клиента QR-кода привел к этому SO post, что указывает на the QRCode.js project для генерации QR-кода на стороне клиента - я его не использовал, но он выглядит как шаг в правильном направлении, для чего вы работаете.

+0

Спасибо за подробный ответ. Это очень помогло. Прочитав ваш ответ много раз, я пришел к выводу о реализации создания qr-кодов на стороне сервера. Это связано с тем, что я использую Firebase для сохранения генерируемого qr-изображения и последующего отображения этого изображения всякий раз, когда пользователь снова посещает эту страницу. Как вы думаете, есть ли лучший подход, чем этот? Один из способов - сохранить текст qr-изображения в firebase и вычислить для qr-кода каждый раз, когда пользователь посещает эту страницу. –

+0

На стороне сервера звучит хорошо. Ваш подход звучит прекрасно, но, честно говоря, продолжайте с того, что будет достаточно разумным на данный момент, и повторите его после этого. В долгосрочной перспективе вам может понадобиться что-то, что лениво генерирует изображение, например., когда приходит запрос на загрузку одного из этих изображений, только если он еще не существует, он генерирует его, сохраняет его и возвращает. В прошлом я делал такие вещи, используя mod_rewrite, чтобы статический веб-сервер служил изображениям, если они еще не существуют. – MrColes

Смежные вопросы