関係ESモジュール、commonjs、活字体モジュールシステム

まず、ESとすべてのノウハウが同じではありませんが、特定の違いがTSモジュールはまた、彼の実現ことに留意すべきである、と言うことはありませんが、ESモジュール2015(ES6)ダウン確定後、TSは、続くとESモジュールをサポートし、私たちをCMJ以降およびESMバージョンの前で一貫性のある変更を持ってまで、TS使用ESモジュールに加えて、それは、名前空間の管理モジュールを使用していた名前空間の管理モジュールを、持っているでしょう。たとえば、以下の公式ウェブサイトが言って:

用語名に活字体1.5が変更されました。「内部のモジュールは、」今「の名前空間」と呼ばれます。「外部モジュールは、」今のECMAScript 2015年用語と一致するようになる「モジュール」と呼ばれ、(すなわち、現在のモジュールのX {推奨文言名前空間X {と等価です)。

注バベルが書かれたESモジュールの典型的なもので、バベル自体は、高レベルの構文ES6、コードのES7でブラウザにTSに移行するには、バベルのプロジェクトを読み込むことができ、モジュールの一部の文言は、非互換性の問題が表示されます。(リアクト+脱出TSプロジェクトコードエスケープするバベルローダのWebPACKのであるTSX、TS文法、バベル・ローダは本当に強力、TS文法、プロンプトやチェックの種類ForkTsCheckerWebpackPlugin、TsconfigPathsPlugin、eslintや他のプラグインであります)完全に

TSは、多くの場合、導入のインポートが*として反応します。

モジュールTS CJS名前空間は、上記のエラーを解決するために、従って、CJSモジュールをインポートする必要性を導入し、デフォルトなしの任意のモジュールが導かれる:インポートは*として「反応する」と反応させ

このコードのように、TSから移行するにはバベルが、コードに大幅な変更が必要になりますが、TSも、この問題に気づいた、esModuleInteropのようなアプローチのバベルをサポートするためのコンパイルオプションを追加し、PR場合は、下記https://github.com/マイクロソフト/活字体/プル/ 19675

// tsconfig.json
{
"esModuleInterop":真
}

このオプションでは、すべてのファイルは、名前の__esModule隠された属性が真であるESモジュールのエクスポートされます。輸入ESモジュールについては、すべての動作が変更されていません。

場合は、全体のインポート他のモジュール(NSとして輸入*)、ESデフォルト属性としてエクスポート・コンテンツ・モジュール自体モジュール、およびその他の属性は、それはすべてのモジュールにコピーされないようならば。

// module.js
module.exports = () => {
  console.log('foo')
}
exports.xixi = 'xixi'

// 使用
import * obj from 'module.js';

即ち、module.exportモジュール由来の輸出および他の特性に取り付けられ、対象物OBJて送信のOBJとして*にコピーされ、実行obj.foo ===「foo」で真である、obj.default()印刷FOOと比較し、インポートのこの時点でモジュールをES インポート、一貫した性能上のモジュールオブジェクトのデフォルトキーが導出されるESは、他の特性のESと比較して、デフォルトまたはCMJのmodule.exportエクスポートモジュール正常エクスポートおよびCMJ、モジュールでの輸出の性質をマウントします。

おすすめ

転載: www.cnblogs.com/zhangmingzhao/p/11995379.html