Skip to content

VitePress 2.0 新機能

VitePress 2.0 新機能について、多くの開発者はAPIの呼び出し方だけに留まりがちです。本記事はプロダクション環境の観点から、実際に遭遇する問題とその解決策を議論します。

基本原理

重要なのはコアロジックを理解することです:

javascript
import { ref, computed, watch, onMounted } from "vue";

export default {
  setup() {
    const count = ref(0);
    const doubled = computed(() => count.value * 2);

    watch(count, (newVal, oldVal) => {
      console.log(`count: ${oldVal} -> ${newVal}`);
    });

    onMounted(() => {
      console.log("コンポーネントがマウントされました");
    });

    return { count, doubled };
  },
};

パフォーマンス最適化は具体的なシナリオに合わせる必要があり、すべての状況で過度な最適化が必要なわけではありません。

高度な機能

以下の方法で改善できます:

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"],
        },
      },
    },
  },
});

このコードは基本的な使い方を示しています。実際のプロジェクトでは、エラーハンドリングやエッジケースも考慮する必要があります。

ベストプラクティス

この基盤の上で、さらに最適化できます:

MIT Licensed