CC 4.0 ライセンス
このセクションの内容は、以下のリンクの内容から派生したものであり、CC BY 4.0 ライセンスの対象となります。
特に明記されていない限り、以下の内容は元のコンテンツに基づいて修正および削除された結果とみなすことができます。
DevServer
このページでは、`webpack-dev-server@5`に基づいた@rspack/dev-server
(略称:dev-server)の動作に影響を与えるオプションについて説明します。dev-serverは、迅速なアプリケーション開発を促進します。
ヒント
現在のアプリケーションが`@rspack/dev-server`に依存していない場合、devServerの設定は無効になります。
たとえば、Rspack CLIはデフォルトで`@rspack/dev-server`に依存しているため、devServerの設定はRspack CLIプロジェクトで使用できます。Rsbuildは独自の開発サーバーを実装しており、別の「サーバー」設定を提供しているため、devServerの設定はRsbuildプロジェクトでは使用できません。
devServer.allowedHosts
- 型:
string | string[] | 'all' | 'auto'
- デフォルト:
'auto'
このオプションでは、開発サーバーへのアクセスを許可するサービスをホワイトリストに登録できます。
rspack.config.js
module.exports = {
//...
devServer: {
allowedHosts: [
'host.com',
'subdomain.host.com',
'subdomain2.host.com',
'host2.com',
],
},
};
Djangoの`ALLOWED_HOSTS`を模倣して、`.`で始まる値をサブドメインのワイルドカードとして使用できます。`.host.com`は、`host.com`、`www.host.com`、および`host.com`の他のサブドメインと一致します。
rspack.config.js
module.exports = {
//...
devServer: {
// this achieves the same effect as the first example
// with the bonus of not having to update your config
// if new subdomains need to access the dev server
allowedHosts: ['.host.com', 'host2.com'],
},
};
`'all'`に設定すると、このオプションはホストチェックをバイパスします。ホストをチェックしないアプリはDNSリバインディング攻撃に対して脆弱であるため、これは推奨されません。
rspack.config.js
module.exports = {
//...
devServer: {
allowedHosts: 'all',
},
};
`'auto'`に設定すると、このオプションは常に`localhost`、`host`、および`client.webSocketURL.hostname`を許可します。
rspack.config.js
module.exports = {
//...
devServer: {
allowedHosts: 'auto',
},
};
devServer.client
ロギング
- 型:
'log' | 'info' | 'warn' | 'error' | 'none' | 'verbose'
- デフォルト:
'info'
ブラウザでのログレベルを設定できます。たとえば、リロード前、エラー前、またはホットモジュールリプレースメントが有効になっている場合などです。
rspack.config.js
module.exports = {
//...
devServer: {
client: {
logging: 'info',
},
},
};
オーバーレイ
- 型:
boolean | object
- デフォルト:
true
コンパイラエラーまたは警告がある場合、ブラウザにフルスクリーンオーバーレイを表示します。
rspack.config.js
module.exports = {
//...
devServer: {
client: {
overlay: true,
},
},
};
よりきめ細かい制御のために、次のプロパティを持つオブジェクトを提供できます。
プロパティ |
説明 |
errors |
コンパイルエラー |
runtimeErrors |
処理されないランタイムエラー |
warnings |
コンパイル警告 |
すべてプロパティはオプションであり、指定しない場合はデフォルトで`true`になります。
たとえば、コンパイル警告を無効にするには、次の設定を提供できます。
rspack.config.js
module.exports = {
//...
devServer: {
client: {
overlay: {
errors: true,
warnings: false,
runtimeErrors: true,
},
},
},
};
スローされたエラーに基づいてフィルタリングするには、`error`パラメータを受け取り、ブール値を返す関数を渡すことができます。
たとえば、`AbortController.abort()`によってスローされたエラーを無視するには、次のようにします。
rspack.config.js
module.exports = {
//...
devServer: {
client: {
overlay: {
runtimeErrors: error => {
if (error instanceof DOMException && error.name === 'AbortError') {
return false;
}
return true;
},
},
},
},
};
警告
関数は、設定ファイル内の外側のスコープで宣言された変数にアクセスできません。
progress
ブラウザにコンパイルの進捗状況をパーセントで表示します。
rspack.config.js
module.exports = {
//...
devServer: {
client: {
progress: true,
},
},
};
reconnect
- 型: `boolean | number`
- デフォルト:
true
dev-serverに、クライアントの再接続を試行する回数を指示します。`true`の場合、無制限に再接続を試みます。
rspack.config.js
module.exports = {
//...
devServer: {
client: {
reconnect: true,
},
},
};
`false`に設定すると、再接続を試みません。
rspack.config.js
module.exports = {
//...
devServer: {
client: {
reconnect: false,
},
},
};
クライアントが再接続を試行する正確な回数を指定することもできます。
rspack.config.js
module.exports = {
//...
devServer: {
client: {
reconnect: 5,
},
},
};
webSocketTransport
- 種類:
'ws' | 'sockjs'
- デフォルト:
ws
このオプションを使用すると、現在のdevServer
のトランスポートモードをクライアントごとに選択したり、カスタムクライアント実装を提供したりできます。これにより、ブラウザまたは他のクライアントがdevServer
と通信する方法を指定できます。
ヒント
webSocketServer
に'ws'
または'sockjs'
を提供すると、devServer.client.webSocketTransport
とdevServer.webSocketServer
の両方が指定された値に設定されます。
rspack.config.js
module.exports = {
//...
devServer: {
client: {
webSocketTransport: 'ws',
},
webSocketServer: 'ws',
},
};
ヒント
カスタムクライアントとサーバーの実装を提供する場合は、それらが互いに互換性があり、正常に通信できるようにしてください。
カスタムクライアント実装を作成するには、BaseClientを拡張するクラスを作成します。
互換性のある'ws'
サーバーと共に、カスタムWebSocketクライアント実装であるCustomClient.js
へのパスを使用する
rspack.config.js
module.exports = {
//...
devServer: {
client: {
webSocketTransport: require.resolve('./CustomClient'),
},
webSocketServer: 'ws',
},
};
互換性のあるカスタムWebSocketクライアントとサーバーの実装を使用する
rspack.config.js
module.exports = {
//...
devServer: {
client: {
webSocketTransport: require.resolve('./CustomClient'),
},
webSocketServer: require.resolve('./CustomServer'),
},
};
webSocketURL
- 種類:
string | object
- デフォルト:
{}
このオプションを使用すると、WebSocketサーバーへのURLを指定できます(開発サーバーをプロキシしていて、クライアントスクリプトがどこに接続するかを常に認識していない場合に便利です)。
rspack.config.js
module.exports = {
//...
devServer: {
client: {
webSocketURL: 'ws://0.0.0.0:8080/ws',
},
},
};
次のプロパティを持つオブジェクトを指定することもできます
hostname
: devServerに接続されているクライアントに、指定されたホスト名を使用するように指示します。
pathname
: devServerに接続されているクライアントに、接続に指定されたパスを使用するように指示します。
password
: devServerに接続されているクライアントに、認証に指定されたパスワードを使用するように指示します。
port
: devServerに接続されているクライアントに、指定されたポートを使用するように指示します。
protocol
: devServerに接続されているクライアントに、指定されたプロトコルを使用するように指示します。
username
: devServerに接続されているクライアントに、認証に指定されたユーザー名を使用するように指示します。
rspack.config.js
module.exports = {
//...
devServer: {
client: {
webSocketURL: {
hostname: '0.0.0.0',
pathname: '/ws',
password: 'dev-server',
port: 8080,
protocol: 'ws',
username: 'rspack',
},
},
},
};
ヒント
ブラウザからprotocol
/hostname
/port
を取得するには、webSocketURL: 'auto://0.0.0.0:0/ws'
を使用します。
devServer.compress
提供されるすべてのリソースに対してgzip圧縮を有効にします
rspack.config.js
module.exports = {
//...
devServer: {
compress: true,
},
};
devServer.devMiddleware
Rspackアセットを処理するwebpack-dev-middlewareにオプションを提供します。
rspack.config.js
module.exports = {
devServer: {
devMiddleware: {
index: true,
mimeTypes: { phtml: 'text/html' },
publicPath: '/publicPathForDevServe',
serverSideRender: true,
writeToDisk: true,
},
},
};
- 種類:
array | function | object
- デフォルト:
undefined
すべてのリスポンスにヘッダーを追加します
rspack.config.js
module.exports = {
//...
devServer: {
headers: {
'X-Custom-Foo': 'bar',
},
},
};
配列を渡すこともできます
rspack.config.js
module.exports = {
//...
devServer: {
headers: [
{
key: 'X-Custom',
value: 'foo',
},
{
key: 'Y-Custom',
value: 'bar',
},
],
},
};
関数を渡すこともできます
rspack.config.js
module.exports = {
//...
devServer: {
headers: () => {
return { 'X-Bar': ['key1=value1', 'key2=value2'] };
},
},
};
devServer.historyApiFallback
- 型:
boolean | object
- デフォルト:
false
HTML5 History APIを使用する場合、404
レスポンスの代わりにindex.html
ページを提供する必要がある場合があります。devServer.historyApiFallback
をtrue
に設定して有効にします
rspack.config.js
module.exports = {
//...
devServer: {
historyApiFallback: true,
},
};
オブジェクトを提供することにより、rewrites
などのオプションを使用してこの動作をさらに制御できます
rspack.config.js
module.exports = {
//...
devServer: {
historyApiFallback: {
rewrites: [
{ from: /^\/$/, to: '/views/landing.html' },
{ from: /^\/subpage/, to: '/views/subpage.html' },
{ from: /./, to: '/views/404.html' },
],
},
},
};
パスにドットを使用する場合(Angularで一般的)、disableDotRule
を使用する必要がある場合があります
rspack.config.js
module.exports = {
//...
devServer: {
historyApiFallback: {
disableDotRule: true,
},
},
};
その他のオプションと情報については、connect-history-api-fallbackのドキュメントを参照してください。
devServer.host
- 種類:
'local-ip' | 'local-ipv4' | 'local-ipv6' | string
- デフォルト:
'local-ip'
使用するホストを指定します。サーバーを外部からアクセスできるようにするには、次のように指定します
rspack.config.js
module.exports = {
//...
devServer: {
host: '0.0.0.0',
},
};
local-ip
ホストとしてlocal-ip
を指定すると、ホストオプションをローカルのIPv4
アドレスとして解決しようとします(利用可能な場合)。IPv4
が利用できない場合は、ローカルのIPv6
アドレスを解決しようとします。
local-ipv4
ホストとしてlocal-ipv4
を指定すると、ホストオプションをローカルのIPv4
アドレスとして解決しようとします。
local-ipv6
ホストとしてlocal-ipv6を指定すると、ホストオプションをローカルのIPv6アドレスとして解決しようとします。
devServer.hot
- 種類:
boolean | 'only'
- デフォルト:
true
Rspackのホットモジュール置換機能を有効にします
rspack.config.js
module.exports = {
//...
devServer: {
hot: true,
},
};
ビルドエラーが発生した場合のフォールバックとして、ページを更新せずにホットモジュール置換を有効にするには、hot: 'only'
を使用します
rspack.config.js
module.exports = {
//...
devServer: {
hot: 'only',
},
};
devServer.liveReload
デフォルトでは、ファイルの変更が検出されると、dev-serverはページをリロード/更新します。liveReload
を有効にするには、devServer.hot
オプションを無効にするか、devServer.watchFiles
オプションを有効にする必要があります。devServer.liveReload
をfalse
に設定して無効にします
rspack.config.js
module.exports = {
//...
devServer: {
liveReload: false,
},
};
ヒント
ライブリロードは、web
、webworker
、electron-renderer
、node-webkit
などのWeb関連のターゲットでのみ機能します。
devServer.onListening
@rspack/dev-serverがポートで接続のリスニングを開始したときに、カスタム関数を実行する機能を提供します。
rspack.config.js
module.exports = {
//...
devServer: {
onListening: function (devServer) {
if (!devServer) {
throw new Error('@rspack/dev-server is not defined');
}
const port = devServer.server.address().port;
console.log('Listening on port:', port);
},
},
};
devServer.open
- 種類:
boolean | string | object | [string, object]
- デフォルト:
true
サーバーの起動後にブラウザを開くようにdev-serverに指示します。デフォルトのブラウザを開くには、true
に設定します。
rspack.config.js
module.exports = {
//...
devServer: {
open: true,
},
};
ブラウザで指定されたページを開くには
rspack.config.js
module.exports = {
//...
devServer: {
open: ['/my-page'],
},
};
ブラウザで複数の指定されたページを開くには
rspack.config.js
module.exports = {
//...
devServer: {
open: ['/my-page', '/another-page'],
},
};
デフォルトのブラウザの代わりに使用するブラウザ名を指定します
rspack.config.js
module.exports = {
//...
devServer: {
open: {
app: {
name: 'google-chrome',
},
},
},
};
オブジェクトはすべてのopenオプションを受け入れます
rspack.config.js
module.exports = {
//...
devServer: {
open: {
target: ['first.html', 'http://localhost:8080/second.html'],
app: {
name: 'google-chrome',
arguments: ['--incognito', '--new-window'],
},
},
},
};
ヒント
ブラウザアプリケーション名はプラットフォームによって異なります。再利用可能なモジュールでハードコーディングしないでください。たとえば、'Chrome'
はmacOSでは'Google Chrome'
、Linuxでは'google-chrome'
、Windowsでは'chrome'
です。
devServer.port
- 種類:
'auto' | string | number
- デフォルト:
[]
リクエストをリスニングするポート番号を指定します
rspack.config.js
module.exports = {
//...
devServer: {
port: 8080,
},
};
port
オプションはnull
または空の文字列にすることはできません。空きポートを自動的に使用するには、port: 'auto'
を使用してください
rspack.config.js
module.exports = {
//...
devServer: {
port: 'auto',
},
};
devServer.proxy
一部のURLをプロキシすることは、別のAPIバックエンド開発サーバーがあり、同じドメインでAPIリクエストを送信する場合に役立ちます。
dev-serverは強力なhttp-proxy-middlewareパッケージを利用しています。より高度な使用方法については、そのドキュメントを確認してください。http-proxy-middleware
の機能の一部はtarget
キーを必要としません(たとえば、router
機能)。ただし、ここでも構成にtarget
キーを含める必要があります。そうしないと、@rspack/dev-server
はそれをhttp-proxy-middleware
に渡しません。
localhost:3000
のバックエンドでは、これを使用してプロキシを有効にできます
rspack.config.js
module.exports = {
//...
devServer: {
proxy: [
{
context: ['/api'],
target: 'http://localhost:3000',
},
],
},
};
/api/users
へのリクエストは、リクエストをhttp://localhost:3000/api/users
にプロキシするようになります。
/api
を渡したくない場合は、パスを書き換える必要があります
rspack.config.js
module.exports = {
//...
devServer: {
proxy: [
{
context: ['/api'],
target: 'http://localhost:3000',
pathRewrite: { '^/api': '' },
},
],
},
};
無効な証明書でHTTPSで実行されているバックエンドサーバーは、デフォルトでは受け入れられません。必要な場合は、次のように構成を変更します
rspack.config.js
module.exports = {
//...
devServer: {
proxy: [
{
context: ['/api'],
target: 'http://localhost:3000',
secure: false,
},
],
},
};
すべてをプロキシしたくない場合があります。関数の戻り値に基づいてプロキシをバイパスすることができます。
関数では、リクエスト、レスポンス、およびプロキシオプションにアクセスできます。
- プロキシでリクエストの処理を続行するには、
null
またはundefined
を返します。
- リクエストに対して404エラーを生成するには、
false
を返します。
- リクエストのプロキシを続行する代わりに、提供するパスを返します。
たとえば、ブラウザリクエストの場合はHTMLページを提供したいが、APIリクエストの場合はプロキシしたいとします。次のようなことができます
rspack.config.js
module.exports = {
//...
devServer: {
proxy: [
{
context: ['/api'],
target: 'http://localhost:3000',
bypass: function (req, res, proxyOptions) {
if (req.headers.accept.indexOf('html') !== -1) {
console.log('Skipping proxy for browser request.');
return '/index.html';
}
},
},
],
},
};
複数の特定のパスを同じターゲットにプロキシする場合は、context
プロパティを持つ1つ以上のオブジェクトの配列を使用できます
rspack.config.js
module.exports = {
//...
devServer: {
proxy: [
{
context: ['/auth', '/api'],
target: 'http://localhost:3000',
},
],
},
};
ルートへのリクエストはデフォルトではプロキシされません。ルートプロキシを有効にするには、devMiddleware.index
オプションをfalsy値として指定する必要があります
rspack.config.js
module.exports = {
//...
devServer: {
devMiddleware: {
index: false, // specify to enable root proxying
},
proxy: [
{
context: () => true,
target: 'http://localhost:1234',
},
],
},
};
ホストヘッダーのoriginはデフォルトでプロキシ時に保持されます。この動作をオーバーライドするには、changeOrigin
をtrue
に設定できます。名前ベースのバーチャルホストサイトを使用する場合などに便利です。
rspack.config.js
module.exports = {
//...
devServer: {
proxy: [
{
context: ['/api'],
target: 'http://localhost:3000',
changeOrigin: true,
},
],
},
};
devServer.server
- 種類:
'http' | 'https' | 'spdy' | string | object
- デフォルト:
'http'
サーバーとオプションを設定できます(デフォルトは「http」)。
rspack.config.js
module.exports = {
//...
devServer: {
server: 'http',
},
};
自己署名証明書を使用してHTTPS
経由で提供するには
rspack.config.js
module.exports = {
//...
devServer: {
server: 'https',
},
};
自己署名証明書を使用してspdyでHTTP/2
経由で提供するには
rspack.config.js
module.exports = {
//...
devServer: {
server: 'spdy',
},
};
オブジェクト構文を使用して独自の証明書を提供します
rspack.config.js
module.exports = {
//...
devServer: {
server: {
type: 'https',
options: {
ca: './path/to/server.pem',
pfx: './path/to/server.pfx',
key: './path/to/server.key',
cert: './path/to/server.crt',
passphrase: '@rspack/dev-server',
requestCert: true,
},
},
},
};
また、minVersion
などの追加のTLSオプションを設定することもでき、それぞれのファイルの内容を直接渡すこともできます
rspack.config.js
const fs = require('fs');
const path = require('path');
module.exports = {
//...
devServer: {
server: {
type: 'https',
options: {
minVersion: 'TLSv1.1',
key: fs.readFileSync(path.join(__dirname, './server.key')),
pfx: fs.readFileSync(path.join(__dirname, './server.pfx')),
cert: fs.readFileSync(path.join(__dirname, './server.crt')),
ca: fs.readFileSync(path.join(__dirname, './ca.pem')),
passphrase: '@rspack/dev-server',
requestCert: true,
},
},
},
};
devServer.setupMiddlewares
- 種類:
function (middlewares, devServer)
カスタム関数を実行し、カスタムミドルウェアを適用する機能を提供します。
rspack.config.js
module.exports = {
// ...
devServer: {
setupMiddlewares: (middlewares, devServer) => {
if (!devServer) {
throw new Error('@rspack/dev-server is not defined');
}
devServer.app.get('/setup-middleware/some/path', (_, response) => {
response.send('setup-middlewares option GET');
});
// Use the `unshift` method if you want to run a middleware before all other middlewares
// or when you are migrating from the `onBeforeSetupMiddleware` option
middlewares.unshift({
name: 'first-in-array',
// `path` is optional
path: '/foo/path',
middleware: (req, res) => {
res.send('Foo!');
},
});
// Use the `push` method if you want to run a middleware after all other middlewares
// or when you are migrating from the `onAfterSetupMiddleware` option
middlewares.push({
name: 'hello-world-test-one',
// `path` is optional
path: '/foo/bar',
middleware: (req, res) => {
res.send('Foo Bar!');
},
});
middlewares.push((req, res) => {
res.send('Hello World!');
});
return middlewares;
},
},
};
devServer.static
- 種類:
boolean | string | object | [string, object]
このオプションを使用すると、ディレクトリ(デフォルトでは「public」ディレクトリ)から静的ファイルを提供するためのオプションを構成できます。無効にするには、false
に設定します
rspack.config.js
module.exports = {
//...
devServer: {
static: false,
},
};
単一のディレクトリを監視するには
rspack.config.js
module.exports = {
// ...
devServer: {
static: ['assets'],
},
};
複数の静的ディレクトリを監視するには
rspack.config.js
module.exports = {
// ...
devServer: {
static: ['assets', 'css'],
},
};
devServer.watchFiles
- 型:
string | object | [string, object]
このオプションでは、ファイルの変更を監視する glob/ディレクトリ/ファイルのリストを設定できます。例えば
rspack.config.js
module.exports = {
//...
devServer: {
watchFiles: ['src/**/*.php', 'public/**/*'],
},
};
ファイル監視の詳細オプションを設定することも可能です。chokidar
のドキュメントで、使用可能なオプションを確認してください。
rspack.config.js
module.exports = {
//...
devServer: {
watchFiles: {
paths: ['src/**/*.php', 'public/**/*'],
options: {
usePolling: false,
},
},
},
};
devServer.webSocketServer
- 型:
false | 'sockjs' | 'ws'
このオプションを使用すると、現在の WebSocket サーバーを選択するか、カスタム WebSocket サーバー実装を提供することができます。
現在のデフォルトモードは 'ws'
です。このモードは、サーバーとして ws
を使用し、クライアントではネイティブ WebSocket を使用します。
rspack.config.js
module.exports = {
//...
devServer: {
webSocketServer: 'ws',
},
};