1

当我尝试运行与 Dexie 相关的代码时出现此错误。

Unhandled Promise rejection: ReferenceError: require is not defined
        at eval (http://localhost:3001/vendor/traceur/dist/commonjs/traceur.js:5:92)
    Evaluating http://localhost:3001/vendor/traceur/dist/commonjs/traceur.js
    Error loading http://localhost:3001/vendor/traceur/dist/commonjs/traceur.js
    Error loading http://localhost:3001/vendor/dexie/dist/dexie.js as "dexie" from http://localhost:3001/app/pages/portal/portal.js ; Zone: <root> ; Task: Promise.then ; Value: Error: ReferenceError: require is not defined(…)

仅仅通过声明一个数据库,我已经有了上述错误。

// Declare Database 

class FriendDatabase extends Dexie {
    friends: Dexie.Table<IFriend,number>;   

    constructor() {
        super("FriendDatabase");
        this.version(1).stores({
            friends: "++id,name,age"
        });
    }
}

我添加 Dexie 的约定方式是在 systemjs.config.js 中(在我的情况下,我使用了 Typescipt)

/** Map relative paths to URLs. */
const map: any = {
  'dexie': 'vendor/dexie/dist',
  'traceur': 'vendor/traceur/dist/commonjs'

};

/** User packages configuration. */
const packages: any = {
  'dexie': { main: 'dexie.js', defaultExtension: 'js'},
  'traceur': { main: 'traceur.js', defaultExtension: 'js'}
};

编辑 我的 src 代码可以在这里找到

已编辑

只是要清楚。我不是说这是 dexie 的图书馆问题。可能是我没有以正确的方式实施。因此,寻找在 angular2 中正确实现 dexie 的指南。

已编辑

我找到了这个链接,但是添加以下代码的解决方案对我不起作用

System.register("dexie", [], true, function(require, exports, module) {
  var global = System.global,
      __define = global.define;
 global.define = undefined;
(function (global, factory) {
....

(解决方法)

不是什么,我几乎不能让它工作是通过脚本标签添加dexie <script src="vendor/dexie/dist/dexie.min.js"></script> ,然后我可以直接使用dexie。

但问题是我无法导入 dexie 并且 dexie 的所有类型都丢失了。

我尝试手动复制 dexie.d.ts 并引用它,但打字稿不承认,所以我会有编译错误。

4

1 回答 1

1

最后经过一番谷歌搜索。

为了使用 SystemJS 配置 Dexie,可以在这个 github链接中找到。

在此处复制摘要

通过 npm 安装 dexie

npm install dexie --save 

更新 systemjs.config.js 如下:

Add 'dexie': 'node_modules/dexie/dist/dexie.js' to map.
Add 'dexie': { format: 'amd' } to packages.

另外:确保您的 tsconfig 文件具有“moduleResolution”:“node”。

于 2016-08-17T16:30:30.180 回答