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.json
ファイルが定義されている場合があります。これは、あるプロジェクトのコードが別のプロジェクトのコードへの IntelliSense として提案されないようにするためです。以下に示すのは、client
フォルダーと server
フォルダーを持つプロジェクトで、2 つの別々の JavaScript プロジェクトを示しています。
例
デフォルトでは、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 フォルダーを除外します |
webpack 、webpack-dev-server |
コンテンツフォルダー (例: dist ) を除外します。 |
bower |
bower_components フォルダーを除外します |
ember |
tmp および temp フォルダーを除外します |
jspm |
jspm_packages フォルダーを除外します |
JavaScript プロジェクトが肥大化しすぎてパフォーマンスが低下する場合、多くの場合、node_modules
などのライブラリフォルダーが原因です。VS Code がプロジェクトが肥大化しすぎていることを検出すると、exclude
リストを編集するように促します。