🚀 VS Code でで入手しましょう!

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 の場所

Web サイトのクライアント側であるコードのこの部分を、jsconfig.json ファイルを作成して JavaScript プロジェクトとして定義します。以下に示すように、JavaScript コードのルートにファイルを配置します。

jsconfig setup

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

multiple jsconfigs

デフォルトでは、JavaScript 言語サービスは JavaScript プロジェクト内のすべてのファイルを分析し、IntelliSense を提供します。適切な IntelliSense を提供するために、除外または含めるファイルを指定する必要があります。

"exclude" プロパティの使用

exclude 属性 (glob パターン) は、言語サービスにどのファイルがソースコードの一部ではないかを指示します。これにより、パフォーマンスを高いレベルに維持できます。IntelliSense が遅い場合は、exclude リストにフォルダーを追加します (VS Code は、速度低下を検出した場合にこれを行うように促します)。

{
  "compilerOptions": {
    "module": "CommonJS",
    "target": "ES6"
  },
  "exclude": ["node_modules"]
}

ヒント: ビルドプロセスによって生成されたファイル (たとえば、dist ディレクトリ) を exclude することをお勧めします。これらのファイルは、候補が 2 回表示される原因となり、IntelliSense が遅くなります。

"include" プロパティの使用

または、include 属性 (glob パターン) を使用して、プロジェクト内のファイルを明示的に設定することもできます。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 エイリアスの使用

IntelliSense を webpack エイリアスで動作させるには、glob パターンpaths キーを指定する必要があります。

たとえば、エイリアス 'ClientApp' の場合

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "ClientApp/*": ["./ClientApp/*"]
    }
  }
}

次に、エイリアスを使用するには

import Something from 'ClientApp/foo';

ベストプラクティス

可能な限り、プロジェクトのソースコードの一部ではない JavaScript ファイルを含むフォルダーを除外する必要があります。

ヒント: ワークスペースに jsconfig.json がない場合、VS Code はデフォルトで node_modules フォルダーを除外します。

以下は、一般的なプロジェクトコンポーネントを除外することが推奨されるインストールフォルダーにマッピングするテーブルです

コンポーネント 除外するフォルダー
node node_modules フォルダーを除外します
webpackwebpack-dev-server コンテンツフォルダー (例: dist) を除外します。
bower bower_components フォルダーを除外します
ember tmp および temp フォルダーを除外します
jspm jspm_packages フォルダーを除外します

JavaScript プロジェクトが肥大化しすぎてパフォーマンスが低下する場合、多くの場合、node_modules などのライブラリフォルダーが原因です。VS Code がプロジェクトが肥大化しすぎていることを検出すると、exclude リストを編集するように促します。