これを行う直接的な方法はありません。
これは通常、サーバー側のタスクです。サーバーは、必要なHTMLの生成に注意します。
ウェブコンポーネントはすべてクライアント側についてのものなので、ブラウザに既に配信されているものを処理します。
しかし、build.dart
スクリプトは、プロジェクト内のファイルが変更されるたびに実行されるため、スクリプトを拡張して必要なものを得ることができます。私はこれが良いアプローチだとは思わないが、あなたの問題を解決する。
最初に(私の場合web/webuitest.html
で)ターゲットhtmlファイルに次のプレースホルダを追加します。
<header></header>
は現在、いくつかのコンテンツをプロジェクトにheader.html
ファイルを追加します。
THIS IS A HEADER
は今拡張しますbuild.dart
スクリプトで、header.html
が変更されているかどうかを確認し、そうであれば更新します。webuitest.html
:
// if build.dart arguments contain header.html in the list of changed files
if (new Options().arguments.contains('--changed=web/header.html')) {
// read the target file
var content = new File('web/webuitest.html').readAsStringSync();
// read the header
var hdr = new File('web/header.html').readAsStringSync();
// now replace the placeholder with the header
// NOTE: use (.|[\r\n])* to match the newline, as multiLine switch doesn't work as I expect
content = content.replaceAll(
new RegExp("<header>(.|[\r\n])*</header>", multiLine:true),
'<header>${hdr}</header>');
// rewrite the target file with modified content
new File('web/webuitest.html').writeAsStringSync(content);
}
このアプローチの結果として、ターゲットを書き換えるとbuild.dart
が再度トリガーされるため、出力ファイルは2回構築されますが、それは大きな問題ではありません。
もちろん、これははるかに優れていることがあります。誰かがライブラリにラップすることもできます。
あまりにもかわいいですが、うまくいきます。ありがとう。 – JJJ
右、それは地獄のように醜いです:)実際には、私は頻繁に見たいものではないので、これのために図書館を建てることを考えました。 –
@Juhana、BTW、最初は 'out'ディレクトリのファイルのみを書き直すことを考えましたが、エディタもこれらのファイルを監視しています(私はそこにバグがあります)ので、無限の再構築ループ –