ウェブサイト検索

javascript - モジュールの利用者や消費者から内部専用のモジュールを隠す方法は?


私はいくつかの Node パッケージを ES モジュールを使って作成しています。外部用(つまり外部のパッケージで使用される)であるはずのモジュールもあれば、特定のモジュールのエクスポートが私のパッケージ専用の内部用であるものもあります。

私の知る限り、ESモジュールで特定のモジュールを内部専用として示す方法はありません。しかし、ユーザーが内部専用モジュールを使用するのを防ぐために、Nodeパッケージを開発する際に従う標準的な慣行やガイドラインはありますか?

私がこれを必要とする理由は、私のパッケージがTypeScriptで書かれており、TypeScriptが自動的に宣言ファイルを生成するためであり、その宣言ファイルには内部的に意図されたモジュールのエクスポートも含まれるからです。

回答 #1

Node v18+ の時点で、新しいパッケージ exports フィールドにより、これが可能になりました。exports フィールドを使用すると、エクスポートするモジュールの正確なリストを指定できます:

{
  "name: "my-package",
  "version": "1.0.0",

  "exports": {
    ".": "./dist/main.js",
    "./common": "./dist/common.js",
    "./other.js": "./dist/other.js"
  }
}

Node.jsのESM実装では拡張子が必要であるため、正確である必要があります。上記の構成では、消費するアプリケーションで次のインポートがサポートされます:

// Corresponding to `.`
import {} from 'my-package';

// Corresponding to `./common`
import {} from 'my-package/common';

// Corresponding to `./other.js`
import {} from 'my-package/other.js