【问题标题】:NW.js - PouchDB - Unable to use PouchDB via require() in node webkitNW.js - PouchDB - 无法通过 node webkit 中的 require() 使用 PouchDB
【发布时间】:2016-02-25 16:56:06
【问题描述】:

我是 pouchdb 和 nw.js 的新手,可能这个问题有点太简单了,(对不起我的无知)。

我正在尝试通过 require() 在 nw.js 项目中使用 pouchdb,但没有成功。

根据 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

我错过了什么?

【问题讨论】:

    标签: javascript node.js node-webkit pouchdb nw.js


    【解决方案1】:

    您尝试过演示吗? https://github.com/nolanlawson/pouchdb-nw-hello-world 在 NW.JS 中正确安装 PouchDB 有不少步骤。

    编辑:哦,等等,是的,你确实已经看过演示了。也许问题是LevelDOWN与您的NW版本不兼容?在我的演示中,我使用的 NW 版本比你旧。

    另一种选择是在 Node 内部使用 websql 适配器,它应该为您提供与 LevelDB 相似的性能,同时可能比 LevelDOWN 更容易编译。如果一切都失败了,我建议在 LevelDOWN 回购中提出问题;他们有大量与在 Z 操作系统上构建 X 版本的 Node on Y 架构相关的问题,因此您的 XYZ 组合可能是一个独特的组合。

    【讨论】:

    • 是的,我按照您提到的上述链接完成了整个解决方法,它也包含在我的问题中。在节点 webkit 中没有工作结果我继续在 html 页面的 sript 标记中使用 pouchdb。
    • 好的,刚刚想通了。我在旧版本的节点中看不到对我的修复的改进。问题是 leveldown 的编译结合 nw.js 构建路径中的节点会产生与预期编译路径相关的给定路径的冲突。这是通过分析系统 bin/bash node-gyp 日志来实现的。当我有完整的问题解决方案时,我会在这里写。
    • FWIW 我返回并更新了演示以使用更高版本的 NW.js。很高兴它对你有用!
    【解决方案2】:

    我终于找到了解决问题的有效方法。

    解决方法如下:

    1) 我将 pouchDB 更新到 5.3.0

    npm update pouchdb --save

    2) 然后导航到 node_modules/leveldown

    cd node_modules/leveldown

    3) 使用 nw.js 目标版本配置 gyp

    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...
    

    注意:如果您尝试从 html 文件中的脚本标签中使用 pouchDB,同时您必须在 javascript 函数中使用它,它将通过模块导出例如导出

    exports.pouchDBFunction = new pouchDBFunction();
    

    并在另一个 javascript 文件中使用这个导出的函数, 像这样

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

    将不起作用,您将收到错误 pouchdb 未定义。这就是为什么你需要通过 require() 函数来拥有 pouchDB。

    希望此解决方法对您有所帮助...

    【讨论】:

      猜你喜欢
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 2020-09-01
      • 1970-01-01
      相关资源
      最近更新 更多