web-dev-qa-db-ja.com

es6スタイルのインポートを使用してMongoDBをインポートする方法は?

うまくいけば、これは簡単な質問です。 es6import-fromスタイルを使用してMongoDBをインポートしようとしています。 node requireを使用してインポートすると、正常に動作します。

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

しかし、es6の方法でインポートすると、エラーやログなしで壊れます。

import {MongoClient} from 'mongodb';

しかし、コンパイル/実行しても壊れません。MongoClientで何かをしようとしたときにのみ壊れます。

これが私のDbManagerクラスです-

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$

コンパイルエラーがないので、なぜこれが機能しないのかわかりません。さらに、なぜログがないのかわかりません!これは最後に起こることの1つであり、少なくともその時点まではログが記録されているはずです。私の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のインポートに頼ることはできないと思います。 typedefをインポートするために使用できるようですが、実際のモジュールはインポートできません。私がこれを回避した方法はこのようなものです-

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

余分な作業がたくさん。別の方法がある場合はお知らせください。

15
micah
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');
3
mkalmo

これを試して:

import { default as mongodb } from 'mongodb';
let MongoClient = mongodb.MongoClient;
1
Lonnie Best

import 'mongodb'を使用することができなかったので、requireをインポートしてcreateRequireを使用しました。

import { createRequire } from 'module'
const require = createRequire(import.meta.url);
const { MongoClient } = require('mongodb');

これを.mjsファイルで使用しましたが、requireも定義されておらず、魅力のように機能しました。

0
Steven Spungin