2016-03-12 50 views
5

希望这是一个简单的问题。我正在尝试使用es6 import-from样式导入MongoDB。如果我使用节点导入,它的工作正常。如何使用es6风格导入导入MongoDB?

let mongo = require('mongodb'); 
let MongoClient = mongo.MongoClient; 

但是,如果我导入它的es6方式它没有错误或日志打破。

import {MongoClient} from 'mongodb'; 

但是编译/运行它只是休息,当我尝试做任何事情MongoClient时,它不会破坏。

这里是我的数据库管理器接收机类

import {MongoClient} from 'mongodb'; 

export class DbManager { 

    constructor() { 
    console.log('Constructing DB Connection'); 
    } 

} 

当我跑我的服务器我得到其他经理和事件日志数。

mycomputer myuser$ ./start.sh 
Server Constructing 
Route Manager Constructing 
Initializing Route: Static 
Constructing DB Connection 
http server started on port: 8000 

但是,如果我做的MongoClient的的console.log根本就没有输出。

import {MongoClient} from 'mongodb'; 

export class DbManager { 

    constructor() { 
    console.log('Constructing DB Connection'); 
    console.log(MongoClient); 
    } 

} 

和输出看起来像这个 -

mycomputer myuser$ ./start.sh 
mycomputer myuser$ 

有没有编译错误,所以我不明白为什么这是行不通的。此外,我不明白为什么没有任何日志!这是发生的最后一件事情之一,至少应该记录下来,直到我想到的那一点。如果你想在这里看到我的start.sh脚本是(快速和肮脏的,不要对我做出判断):

tsc 
echo "var System = require('systemjs');" > dist/final.js 
babel dist/typescript.js >> dist/final.js 
echo "System.import('main');" >> dist/final.js 
node dist/final.js 

编辑

继续寻找答案,同时等待(希望)作为回应。我考虑看看所产生的final.js,如果MongoClient在System.register函数调用看起来像这 -

System.register("db/db.manager", ["mongodb"] ... 

的文件,如果我不使用它(即使我导入),它在任何地方使用不显示mongodb

System.register("db/db.manager", [] ... 

这就解释了为什么什么都不会发生。尝试导入mongodb时出现错误。还不确定该怎么做。

编辑编辑

实测值的溶液中。一个我并不高兴,但也许这只是它的方式。

我不认为我可以依靠es6进口。它看起来像我可以用它来导入typedefs而不是实际的模块。我如何解决这个问题就像这样 -

import {Db as MongoDb, MongoClient} from 'mongodb'; 
let mongodb = require('mongodb'); 
let mongoClient: MongoClient = mongodb.MongoClient; 

很多额外的工作。如果还有其他方法,请让我知道。

+0

是的,它看起来像你可以导入的typedef但不是实际的模块。这实际上是意图,因为它与'require'系统不同。 –

回答

1
import { MongoClient } from 'mongodb'; 

只是从node_modules/@types/mongodb/index.d导入类型定义。TS

import * as mongodb from 'mongodb'; 

从node_modules/MongoDB的/ index.js进口的一切,它一样

let mongodb = require('mongodb');