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コードのルートにファイルを配置します。
より複雑なプロジェクトでは、ワークスペース内に複数の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 documentationを参照してください。
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
リストを編集するように促します。