それは、コンパイラによって生成された名前を使用することが危険なのです。それは変更することができます。
回避策を行うことができます
しかし:次に、あなたが変数module
を使用することができます
var module = module_1.default;
:
import myModule from 'module'
const module = myModule
2行目はにコンパイルされます。
なぜ近い将来export default
ではなくexport =
を使用するには、export default
の使用が当たり前になるだろう。この機能は、現在のCommonJSユースケースを置き換えるためにECMAScriptによって設計されています。メンバーdefault
は、より優れた、より一般的なものです。
ここは例です。あなたは、オブジェクトをエクスポートする必要があります。
const myConfigObject = Object.freeze({
dbHost: "",
dbUser: "",
// ...
})
export = myConfigObject
その後、あなたはそれをインポートすることができます。
その後
import * as myConfigObject from "./myConfigObject"
、あなたはに関連する何かをするモジュールのユーザーに役立つ小さなヘルパー関数toDSN
をエクスポートしたいと思いますエクスポートされたオブジェクトどうやってするか?ヘルパーを設定のメンバーとして追加することができます。しかし、それはエレガントではありません。
export default Object.freeze({
dbHost: "",
dbUser: "",
// ...
})
export function toDSN(configObj) {
return // ...
}
はその後、あなたはデフォルトのオブジェクトをインポートすることができます:
はここES6の方法です
import myConfigObject from "./myConfigObject"
...かtoDSN
をインポートします。
import { toDSN } from "./myConfigObject"
...または両方をインポートします:
import myConfigObject, { toDSN } from "./myConfigObject"
現在のNode.jsユーザーコードの唯一の落とし穴は、メンバーdefault
を使用する必要があります。 Node.jsがES6モジュールを実装するとき、落とし穴はもう存在しません。
なぜTSコンパイラがインポート用の中間変数を生成するのですか?
ES6モジュールの一般的なケースで必要とされるためです。次のES6コード:
import myConfigObject, { toDSN } from "./myConfigObject"
ここでは、2つの変数がインポートされます。しかし、CommonJS(またはAMD)require
は、1つの変数しかインポートできません。したがって、コンパイラはこの単一の変数を中間変数myConfigObject_1
としてインポートします。次にオブジェクトmyConfigObject
はmyConfigObject_1.default
から利用可能であり、toDSN
はmyConfigObject_1.toDSN
から利用可能です。
私は、ES6モジュールの紹介としてthe article from Mozillaを提案します。
私はおそらくあなたに伝える必要はありませんが、将来この質問に訪れる人々のために言います:**答えが 'eval()'であれば、あなたはおそらく間違った質問**。 'eval()'を使うと、セキュリティの脆弱性や追跡が困難なバグが発生します。ほとんどの場合、より良い解決策があります。 –