NW.js - PouchDB - невозможно использовать PouchDB через require() в node webkit

Я новичок в pouchdb и nw.js, и, возможно, этот вопрос слишком прост (извините за мое невежество).

Я пытаюсь использовать pouchdb в проекте nw.js через require(), но безуспешно.

В соответствии с документацией по pouchdb setup в разделе Node.js я это сделал именно так, как он говорит, без успеха.

После этого я установил в проект компонент leveldown и выполнил следующие инструкции в разделе https://github.com/nolanlawson/pouchdb-nw github. проект.

Итак, на данный момент я уже сделал следующее:

nw-gyp configure --target=0.12.3 / в каталоге node_modules/leveldown

сборка nw-gyp

Затем, согласно pouchdb.com/guides/databases.html, у меня есть:

var PouchDB = require('pouchdb');
var db = new PouchDB('kittens');

но опять не повезло. Кроме того, запустив следующее:

db.info().then(function (info) {console.log(info); });

не получая ответа.

Примечание. Если просто включить этот <script src="../node_modules/pouchdb/dist/pouchdb.min.js"></script> в файл index.html, все заработает как шарм.

Версия nw.js: 0.12.3/версия pouchdb: 5.2.1

Что мне не хватает?


person Lidakis Manolis    schedule 25.02.2016    source источник


Ответы (2)


Вы пробовали демо? https://github.com/nolanlawson/pouchdb-nw-hello-world Чтобы правильно установить PouchDB в NW.JS, нужно выполнить несколько шагов.

Редактировать: о, подождите, да, вы уже видели демонстрацию. Может проблема в том, что LevelDOWN несовместим с вашей версией NW? В моей демонстрации я использовал более старую версию NW, чем вы.

Еще один вариант — использовать адаптер websql внутри Node, который должен обеспечить производительность, аналогичную LevelDB, но, возможно, его будет проще компилировать, чем LevelDOWN. Если ничего не помогает, я бы порекомендовал зарегистрировать проблему в репозитории LevelDOWN; у них есть масса проблем, связанных со сборкой X-версии Node на архитектуре Y в операционной системе Z, поэтому ваша комбинация XYZ может быть уникальной.

person nlawson    schedule 07.03.2016
comment
Да, я сделал весь обходной путь, как вы ссылались на приведенную выше ссылку, она также включена в мой вопрос. Не имея рабочих результатов в node webkit, я продолжаю использовать pouchdb в теге sript на странице html. - person Lidakis Manolis; 07.03.2016
comment
Ок, только что разобрался. Я не вижу в старой версии узла улучшения моего исправления. Дело в том, что компиляция leveldown в сочетании с узлом внутри пути построения nw.js создает конфликт заданного пути по отношению к ожидаемому пути компиляции. Это путем анализа системного журнала bin/bash node-gyp. Я напишу сюда, когда у меня будет полное решение проблемы. - person Lidakis Manolis; 07.03.2016
comment
FWIW Я вернулся и обновил демо для работы с более поздней версией NW.js. Рад, что это сработало для вас! - person nlawson; 09.03.2016

Наконец-то я нашел рабочее решение своей проблемы.

Обходной путь заключается в следующем:

1) Я обновил pouchDB до 5.3.0

npm обновить pouchdb --save

2) Затем перейдите к node_modules/leveldown

cd node_modules/leveldown

3) настроить gyp с целевой версией nw.js

sudo nw-gyp настроить --target = 0.12.3

4) Снова построить nw gyp

сборка nw-gyp

5) А затем в моем файле модуля javascript

 var PouchDB = require('pouchdb');
    var arincPouchDB = new PouchDB('./db/arincAirports'); // new pouch db for node without adapter // means you get leveldb adapter in this case.
    var jsonData = require("../datasrc/output/data.json");
    arincPouchDB.bulkDocs(jsonData);

    arincPouchDB.info().then(function (info) {
        console.log(info);
    });

6) И консоль говорит...

Objectadapter: "leveldb" 
auto_compaction: false
backend_adapter:"LevelDOWN"
db_name: "./db/arincAirports"doc_count: 12
update_seq: 12
__proto__: Object...

Примечание. Если вы попытаетесь использовать pouchDB из тега script в своем html-файле, и в то же время вам придется использовать его в функции javascript, она будет экспортирована через экспорт модуля, например

exports.pouchDBFunction = new pouchDBFunction();

и использовать эту экспортированную функцию в другом файле javascript, например

var json2PouchDB = require("./js/pouchDBFunction.js");
 json2PouchDB.pouchDBFunction;

не будет работать, и вы получите сообщение об ошибке pouchdb не определено. Вот почему вам нужно иметь pouchDB через функцию require().

Надеюсь, этот обходной путь поможет...

person Lidakis Manolis    schedule 07.03.2016