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 モジュールのいずれかを使用しない限り)、両ファイル間に共通のプロジェクトコンテキストはありません。 -
明示的なプロジェクト - jsconfig.jsonあり: JavaScriptプロジェクトは、
jsconfig.json
ファイルを通じて定義されます。ディレクトリにそのようなファイルが存在することは、そのディレクトリがJavaScriptプロジェクトのルートであることを示します。ファイル自体は、オプションでプロジェクトに属するファイル、プロジェクトから除外されるファイル、およびコンパイラオプション(下記参照)をリストできます。
ワークスペースにプロジェクトコンテキストを定義するjsconfig.json
ファイルがある場合、JavaScriptエクスペリエンスが向上します。このため、新しいワークスペースでJavaScriptファイルを開くと、jsconfig.json
ファイルの作成を促すヒントが表示されます。
jsconfig.json の場所
コードのこの部分、つまりウェブサイトのクライアントサイドを、jsconfig.json
ファイルを作成することでJavaScriptプロジェクトとして定義します。以下に示すように、ファイルをJavaScriptコードのルートに配置してください。
より複雑なプロジェクトでは、ワークスペース内に複数の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
するようにしてください。これらのファイルは、提案が二重に表示され、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 エイリアスの使用
IntelliSenseがwebpackエイリアスで動作するためには、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
リストの編集を促します。