style
フィールドですが、kit.json エクスポートとの混合で微弱な場合は絶対に失敗しました私は非常に多くのアプローチを試しましたが、単一または追加の運動条件で失敗することを見つけるのに最も簡単です.決議の概要を説明する前に、剣を保存するために不可欠な宣伝方法について説明させてください.
なぜ適切な運動をしなくなったのか .mjs
または .cjs ESM を指す拡張子またはCommonJSコード?ノードはこれらを採用しましたソース ファイルの形式を指すソース コード ファイル拡張子。 一見、論理的に見えます。 拡張機能は通常、ファイル スタイルをチェックリストに入れるには不十分です。これは、単純なスタンド オンの私自身の非ハイブリッド エクササイズ条件で機能します。 ただし、ハイブリッド モジュールを作成する場合は、 .mjs を使用します。 and
.cjs は、どちらもそれ以外の場合は、ソースをコピーして拡張機能を交換し、インポートステートメントで明示的な拡張機能を実行するためにソースコードにパッチを適用するためのパーソナライズされたツールを使用するか、台頭しています.ESM コードでは、import
ディレクティブでパスを指定する必要がありますインポートされたファイルに。 .mjs
を含む URL からインポートする場合、コードにパッチを適用する必要があります。 .cjs ファイルからの要求に成功し、その逆も同様です。
{
- ,
- “commonjs” }
- } } しかし、これは適切な夢物語です.もう 1 つの余分なしわ、TypeScript はもうありません (しかし) エクスポートで動作します。 したがって、従来の モジュール と
- 単一ソースコード不適切
Single Source Execrable
ES6 でコードを作成し、 ES-Next や Typescript の import と export の使い方 インポートを使用して、ES モジュールまたは CommonJS モジュールの両方を適切にインポートします。 逆はもはや適切ではありません。 CommonJS で作成する場合は、ES モジュールを使用する必要がなくなる可能性があります。
輸入形 から ‘./ Shape.js’ 輸出 クラス MyS hape {
- tsconfig-cjs.json:{
「伸びる」: “./ tsconfig-inappro priate.json”, “コンパイラオプション” : - {
“モジュール”: , “outDir” : “dist/cjs” - ,
“プロット”: } } - これが tsconfig です-すべての共有設定を含む ES6 コード用の inproperty.json:
-
」 baseUrl”: - “src”
、
tsconfig-inproperty.json:{- :
- {
- “allowJs” :
- 適切な, “allowSyntheticDefaultImports” : 適切な
,
“宣言”: 適切な, “esModuleInterop” :
- 適切な, “inlineSourceMap”: 真実でない
- ,
"lib"
、: “listEmittedFiles” : 真実でない
- ,
-
main
TypeScript のプロパティ。 main プロパティは、CJS エントリ ポイントとmodule
ESM エントリへのプロパティの側面。"主要"
:
- )"dist/cjs/index.js"
- , 「モジュール」
- :
"dist/mjs/index.js", 解像度
)K では、育て方のコツとは:
簡単な組み立て ネイティブ ESM コードを生成します既存のツールで動作します ESM または CommonJS の両方のハイブリッド キットを生成します
()
{ これ.形 =- 個性的
- )形() }
- }
export default の使用法をインポートして使用する場合は注意が必要です。 requireのCommonJSの能力による。 TypeScript または Babel トランスパイラーは、エクスポート real を module.exports に自動的にバンドルし、インポート時に「.default」参照を生成します。代わりに、ネイティブの NodeJS はもう使用しません。 この式は、トランスパイラーを使用しなくなった場合、おそらく .default を実行する必要がある可能性があります。 参照。
輸入 形 から './Shape.js' const
形 = 個性的 形.
()
- 建物
ソースを ESM 用と CommonJS 用の 2 回用意します。
Typescript をトランスパイラーとして実行し、ES6/ES- で作成します次またはタイプスクリプト。 または、Babel は ES6 でうまく機能します。Javascript レコードデータは .js 拡張であり、もはや .mjs[“node_modules”, “dist”] ではありません または .cjs 拡大。 Typescript recordsdata は、.ts 拡張子を占めることができます.kit.json アセンブル スクリプトは次のとおりです: kit.json:{
「スクリプト」 :- {
- “組み立てる”:
- “rm -fr dist/&& tsc -p tsco nfig.json && tsc -p tsconfig-cjs.json && ./fixup”
}
- )}
- tsconfig.json[
tsconfig-inproperty.json
には、ESM ビルドと CommonJS ビルドの両方に弱い共有アセンブル設定が含まれています。デフォルト tsconfig.jsonは ESM 用で、「esnext」の使用法をビルドします。 これを「es2015」または任意のプリセットに交換します tsconfig.json:{ 「伸びる」
“コンパイラオプション” :- : "./tsconfig-inproperty.json",
- : 「エスネクスト」,
:“outDir” :
"dist/mjs" ,
“プロット”
“listFiles”:
ESM/CJS kit.json ごと
組み立ての最後のステップは簡単です ディストリビューションごとに kit.json を作成する fixup スクリプト レコードデータ。 これらの kit.json レコードデータは、.dist/のデフォルトのキット スタイルを説明します。 サブディレクトリ。修正:猫 >dist/cjs/kit.json >dist/mjs/kit.json- <
- これは非常に効果的に機能しますが、キットは両方ともデフォルトでは「module」または「commonjs」。 キットをハイブリッドにして、ESM と CommonJS の両方のフォーマットをエクスポートしたい場合に何が起こるのでしょうか? 悲しいことに、ESM として消費されると「モジュール」になり、CommonJS によって消費されると「commonjs」になる条件付きスタイルを占有する方法はもはやないかもしれません.
ノードは、キットのエクスポート エントリを定義する条件付き エクスポート
プロパティを提示します。側面。 それにもかかわらず、これはもはやキット スタイルと スタイル と exports プロパティが効果的に結合されなくなりました。require
セレクターは、ハイブリッド モジュールが ESM による演習のさまざまなエントリの側面を説明できるようにします。 CommonJS.
ツール (下の色目) を使用して、ESM と CommonJS をプロットするには不適切な 1 つのソース コードから 2 つのディストリビューションを生成します。 exports プロパティは、ノードにリンクされたエントリ ポイントをロードするように指示します。
それにもかかわらず、スタイル のモジュールと
exports
さまざまな言い方をすると、CommonJS アプリ/ライブラリがこのモジュールを require
に弱体化させる場合 と “./dist/cjs/index.js” からの貨物、そして ‘index.js’ は require(‘./ submodule.js’)、モジュールの kit.json に style スペースから module および ESM モジュールは、require の実行を制限します。その下のコードが CommonJS であることを選択しなくなりました。 エクスポートがチップレベルのkit.jsonスタイルをオーバーライドするモジュールスタイルをおそらく説明している場合、おそらく非常に理想的である可能性があります.
{
- “コース” : “./dist/ mjs/index.js”, “スタイル”:
- “モジュール” },
- “必須”: {
“コース”: “./dist/cjs/index.js”, “スタイル”: