日々の開発において、Farm 2.0 フロントエンドビルドツールの利用頻度がますます高まっています。本記事ではその使い方、原理、最適化戦略を体系的に解説します。
クイックスタート
以下の方法で改善できます:
javascript
module.exports = {
entry: "./src/index.js",
output: { path: __dirname + "/dist", filename: "[name].[contenthash:8].js" },
module: {
rules: [
{ test: /\.jsx?$/, exclude: /node_modules/, use: "babel-loader" },
{ test: /\.css$/, use: ["style-loader", "css-loader", "postcss-loader"] },
],
},
optimization: {
splitChunks: {
chunks: "all",
cacheGroups: {
vendor: { test: /[\\/]node_modules[\\/]/, name: "vendors" },
},
},
},
};
このソリューションは半年以上にわたって本番環境で安定して稼働しており、実際に検証済みです。
内部原理
まず基本的な実装方法を見てみましょう:
javascript
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import { resolve } from "path";
export default defineConfig({
plugins: [vue()],
resolve: { alias: { "@": resolve(__dirname, "src") } },
server: {
port: 3000,
proxy: { "/api": { target: "http://localhost:8080", changeOrigin: true } },
},
build: {
rollupOptions: {
output: {
manualChunks: {
vendor: ["vue", "vue-router", "pinia"],
utils: ["lodash-es", "dayjs"],
},
},
},
},
});
このコードは基本的な使い方を示しています。実際のプロジェクトでは、エラーハンドリングやエッジケースも考慮する必要があります。
実務での応用
この基盤の上で、さらに最適化できます:
javascript
module.exports = {
entry: "./src/index.js",
output: { path: __dirname + "/dist", filename: "[name].[contenthash:8].js" },
module: {
rules: [
{ test: /\.jsx?$/, exclude: /node_modules/, use: "babel-loader" },
{ test: /\.css$/, use: ["style-loader", "css-loader", "postcss-loader"] },
],
},
optimization: {
splitChunks: {
chunks: "all",
cacheGroups: {
vendor: { test: /[\\/]node_modules[\\/]/, name: "vendors" },
},
},
},
};
このパターンは大規模プロジェクトで非常に実用的で、メンテナンスコストを大幅に削減できます。
パフォーマンス比較
実際のプロジェクトでの使い方はより複雑になります: