jsconfig.json
jsconfig.json とは?
ディレクトリに jsconfig.json ファイルが存在する場合、そのディレクトリが JavaScript プロジェクトのルートであることを示します。jsconfig.json ファイルは、ルートファイルと、JavaScript 言語サービスによって提供される機能のオプションを指定します。
ヒント: JavaScript を使用しない場合は、
jsconfig.jsonについて心配する必要はありません。
ヒント:
jsconfig.jsonは、TypeScript の構成ファイルである tsconfig.json の子孫です。jsconfig.jsonは、"allowJs"属性がtrueに設定されたtsconfig.jsonです。
なぜ jsconfig.json ファイルが必要なのですか?
Visual Studio Code の JavaScript サポートは、2つの異なるモードで実行できます。
- 
ファイルスコープ - jsconfig.json なし: このモードでは、Visual Studio Code で開かれた JavaScript ファイルは独立した単位として扱われます。ファイル a.jsがファイルb.tsを明示的に参照しない限り (importまたは CommonJS モジュールのいずれかを使用)、2つのファイル間に共通のプロジェクトコンテキストはありません。
- 
明示的なプロジェクト - jsconfig.json あり: JavaScript プロジェクトは jsconfig.jsonファイルを介して定義されます。ディレクトリにこのようなファイルが存在する場合、そのディレクトリが JavaScript プロジェクトのルートであることを示します。ファイル自体は、オプションでプロジェクトに属するファイル、プロジェクトから除外されるファイル、およびコンパイラオプション (下記参照) を一覧表示できます。
ワークスペースにプロジェクトコンテキストを定義する jsconfig.json ファイルがあると、JavaScript のエクスペリエンスが向上します。このため、新しいワークスペースで JavaScript ファイルを開くと、jsconfig.json ファイルを作成するヒントが表示されます。
jsconfig.json の場所
ウェブサイトのクライアントサイドであるコードのこの部分を、jsconfig.json ファイルを作成することで JavaScript プロジェクトとして定義します。ファイルを以下に示すように JavaScript コードのルートに配置します。

より複雑なプロジェクトでは、1つのワークスペース内に複数の jsconfig.json ファイルが定義されている場合があります。これは、あるプロジェクトのコードが別のプロジェクトのコードの IntelliSense として提案されないようにするためです。以下は、client と server フォルダーを持つプロジェクトを示しており、2つの個別の JavaScript プロジェクトを示しています。

例
デフォルトでは、JavaScript 言語サービスは JavaScript プロジェクト内のすべてのファイルを分析し、IntelliSense を提供します。適切な IntelliSense を提供するために、どのファイルを除外または含めるかを指定する必要があります。
"exclude" プロパティの使用
exclude 属性 (グロブパターン) は、言語サービスにどのファイルがソースコードの一部ではないかを伝えます。これにより、パフォーマンスを高いレベルに保ちます。IntelliSense が遅い場合は、exclude リストにフォルダーを追加してください (VS Code は遅延を検出するとこれを行うように促します)。
{
  "compilerOptions": {
    "module": "CommonJS",
    "target": "ES6"
  },
  "exclude": ["node_modules"]
}
ヒント: ビルドプロセスによって生成されたファイル (たとえば、
distディレクトリ) をexcludeする必要があります。これらのファイルは、提案が2回表示される原因となり、IntelliSense を遅くします。
"include" プロパティの使用
または、include 属性 (グロブパターン) を使用して、プロジェクト内のファイルを明示的に設定できます。include 属性が存在しない場合、これはデフォルトで、含まれているディレクトリとサブディレクトリ内のすべてのファイルを含めます。include 属性が指定されている場合、これらのファイルのみが含まれます。以下は、明示的な include 属性を持つ例です。
{
  "compilerOptions": {
    "module": "CommonJS",
    "target": "ES6"
  },
  "include": ["src/**/*"]
}
ヒント:
excludeおよびincludeのファイルパスは、jsconfig.jsonの場所からの相対パスです。
jsconfig オプション
以下は、JavaScript 言語サポートを構成するための jsconfig の "compilerOptions" です。
ヒント: JavaScript には実際のコンパイルは必要ないため、
compilerOptionsに惑わされないでください。この属性は、jsconfig.jsonが TypeScript のコンパイルに使用されるtsconfig.jsonの子孫であるために存在します。
| オプション | 説明 | 
|---|---|
| noLib | デフォルトのライブラリファイル (lib.d.ts) を含めない。 | 
| target | 使用するデフォルトのライブラリ (lib.d.ts) を指定します。値は "ES3", "ES5", "ES6", "ES2015", "ES2016", "ES2017", "ES2018", "ES2019", "ES2020", "ES2021", "ES2022", "ES2023", "ESNext" です。 | 
| module | モジュールコードを生成するときのモジュールシステムを指定します。値は "AMD", "CommonJS", "ES2015", "ES2020", "ES2022", "ES6", "Node16", "NodeNext", "ESNext", "None", "System", "UMD" です。 | 
| moduleResolution | インポートのモジュール解決方法を指定します。値は "Node", "Classic", "Node16", "NodeNext", "Bundler" です。 | 
| checkJs | JavaScript ファイルの型チェックを有効にします。 | 
| experimentalDecorators | 提案されている ES デコレーターの実験的なサポートを有効にします。 | 
| allowSyntheticDefaultImports | デフォルトエクスポートのないモジュールからのデフォルトインポートを許可します。これはコード生成には影響せず、型チェックのみに影響します。 | 
| baseUrl | 非相対モジュール名を解決するためのベースディレクトリ。 | 
| paths | baseUrl オプションに対する相対パスとして計算されるパスマッピングを指定します。 | 
利用可能な compilerOptions の詳細については、TypeScript の compilerOptions ドキュメントを参照してください。
webpack エイリアスの使用
webpack エイリアスで IntelliSense を機能させるには、paths キーをグロブパターンで指定する必要があります。
例えば、エイリアス 'ClientApp' の場合
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "ClientApp/*": ["./ClientApp/*"]
    }
  }
}
そしてエイリアスを使用する
import Something from 'ClientApp/foo';
ベストプラクティス
可能な限り、プロジェクトのソースコードの一部ではない JavaScript ファイルが含まれるフォルダーは除外する必要があります。
ヒント: ワークスペースに
jsconfig.jsonがない場合、VS Code はデフォルトでnode_modulesフォルダーを除外します。
以下は、一般的なプロジェクトコンポーネントと、それらを除外することを推奨されるインストールフォルダーとのマッピングの表です。
| コンポーネント | 除外するフォルダー | 
|---|---|
| node | node_modulesフォルダーを除外する | 
| webpack、webpack-dev-server | コンテンツフォルダー (例: dist) を除外する。 | 
| bower | bower_componentsフォルダーを除外する | 
| ember | tmpおよびtempフォルダーを除外する | 
| jspm | jspm_packagesフォルダーを除外する | 
JavaScript プロジェクトが大きくなりすぎてパフォーマンスが低下する場合、それは多くの場合、node_modules のようなライブラリフォルダーが原因です。VS Code はプロジェクトが大きくなりすぎていることを検出すると、exclude リストを編集するように促します。