2016-03-12 83 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');