私はViteアプリのindex.htmlにいくつかの文字列を挿入しようとしています(vue3テンプレートを使用)。例えばvue-cliプロジェクトでは、
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
Viteでそれを実現する方法は何ですか?(この場合、BASE_URLは単に「/」であることは知っています。一般的な解決策を求めています)環境変数のみをカバーする解決策で問題ありませんが、次のようにJSコードを使用できるさらに一般的な解決策を知ることができれば素晴らしいと思います。
<title><%= htmlWebpackPlugin.options.title %></title>
そして、npmパッケージのインストールを必要としないソリューションが本当にありがたいです
ベストアンサー1
2023-03-20 更新:
ViteはHTML Envの置換をサポートします箱から出してバージョン 4.2 から開始されます。それだけをお探しであれば、これで準備は完了です。
古い回答:
プロジェクトでも同じことをしたいと思いました。vite-plugin-html
しばらく使用しましたが、プラグインに問題が発生し、プラグインの作成者がメンテナンスを停止したようだったので、別の解決策を検討する必要がありました。
幸いなことに、これは簡単です。Viteには針それのための。
そこで、私はこの小さなプラグインを書くことにしました:
const transformHtmlPlugin = data => ({
name: 'transform-html',
transformIndexHtml: {
enforce: 'pre',
transform(html) {
return html.replace(
/<%=\s*(\w+)\s*%>/gi,
(match, p1) => data[p1] || ''
);
}
}
});
Vite 設定では、プラグイン配列に追加し、HTML で置き換えたいもののキーと値のペアを渡すだけです。
plugins: [transformHtmlPlugin({ key: 'value' })]
次に、 にindex.html
、元の質問のようなタグを追加します。<%= key %>
、これらはプラグインに渡した内容に置き換えられます。
すべての環境変数を渡したい場合は、次のように取得しますloadEnv
(例は次のとおりです)。v-moe の投稿) オブジェクトを解凍するだけです: transformHtmlPlugin({ ...env })
。
これが私の問題の解決方法です。誰かの役に立つかもしれません!