うまくいけば、これは簡単な質問です。 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;
余分な作業がたくさん。別の方法がある場合はお知らせください。
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');
これを試して:
import { default as mongodb } from 'mongodb';
let MongoClient = mongodb.MongoClient;
import 'mongodb'
を使用することができなかったので、require
をインポートしてcreateRequire
を使用しました。
import { createRequire } from 'module'
const require = createRequire(import.meta.url);
const { MongoClient } = require('mongodb');
これを.mjs
ファイルで使用しましたが、requireも定義されておらず、魅力のように機能しました。