vue.config.js パッケージ最適化構成

vue.config.js パッケージ最適化構成

Baiduの情報は多様すぎて目が回ります。心配しないでください。私はあなたのためにそれを体験しました。必要なら参照してください。私が自慢していると思わないように、まず効果の写真を投稿します、笑

最適化の方向
1. 画像リソースの圧縮
2. productionSourceMapをfalseに設定すると、マップは生成されません。
3. CDN設定(オプション)
4. コード圧縮
5. 共通コードの抽出(個人的には無駄だと感じています)

最適化前// 持ち上げるには大きすぎるように感じる

最適化前の結果

最適化後

最適化後

ナンセンスは十分です。コードこそが重要なポイントです。これらは必要なダウンロードです。
/*cnpm インストール image-webpack-loader --save-dev
cnpm インストール圧縮 webpack プラグイン --save-dev
cnpm で uglifyjs-webpack-plugin をインストールします --save-dev */

定数パス = require('path');
// gzip 圧縮 const CompressionPlugin = require('compression-webpack-plugin')
// 監視ログ const SentryCliPlugin = require('@sentry/webpack-plugin');
// コード圧縮 const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const Version = new Date().getTime();
関数resolve(dir) {
  path.join(__dirname, dir) を返します
}
定数cdn = {
  js: [
    // vue は最初の 'https://cdn.bootcss.com/vue/2.6.10/vue.min.js' にある必要があります。
    'https://cdn.bootcss.com/vuex/3.1.0/vuex.min.js',
    'https://cdn.bootcss.com/vue-router/3.0.6/vue-router.min.js',
    'https://cdn.bootcss.com/axios/0.18.1/axios.min.js',
    'https://cdn.bootcss.com/qs/6.5.1/qs.min.js',
    'https://cdn.jsdelivr.net/npm/[email protected]/lib/vant.min.js'
  ]
}
モジュール.エクスポート = {
  //アプリケーション パッケージを展開するときのベース URL
  パブリックパス: './',

  //vue-cli-service build を実行したときに生成される本番環境ビルドファイルのディレクトリ outputDir: 'wx_vue',

  //生成された静的リソース (js、css、img、フォント) をディレクトリ (outputDir を基準) に配置します。assetsDir: './' + Version + '/assets'、

  // eslint-loader が保存時に @vue/cli-plugin-eslint のインストールをチェックするかどうか lintOnSave: false,

  // ランタイム コンパイラを含む Vue ビルドを使用するかどうか。 trueに設定するとテンプレートが使えるようになる
  ランタイムコンパイラ: true、

  //本番環境でソースマップファイルを生成するかどうか。ソースマップの詳細については末尾を参照してください。productionSourceMap: false、

  /** ハッシュを削除 */
  ファイル名ハッシュ: true、


  // ページ: {
  // 索引: {
  // エントリ: 'src/main.js',
  // テンプレート: 'public/index.html',
  // ファイル名: 'index.html'
  // }
  // },
  Webpack の設定: config => {
    process.env.NODE_ENV === 'production'の場合{
      // 本番環境の設定を変更...
      config.mode = 'プロダクション'
      config.devtool = "ソースマップ";
    } それ以外 {
      // 開発環境の構成を変更します...
      config.mode = '開発'
    }
    /** 帯域幅の負荷を軽減するために遅延読み込みモジュールのプリフェッチ プリロードを削除します (モバイル端末で使用) */
    config.plugins.delete("prefetch").delete("preload")
    config.optimization.minimize(true)
    // gzip 圧縮 // config.plugin("compressionPlugin").use(CompressionPlugin).tap(() => [
    // {
    // ファイル名: '[パス].gz[クエリ]',
    // アルゴリズム: 'gzip',
    // test: /\.js$|\.html$|\.css/, //ファイル名を一致させる// threshold: 10240, //ファイルサイズが10kを超える場合は圧縮する// minRatio: 0.8, //この値より低い圧縮率のリソースのみが処理される// deleteOriginalAssets: false //ソースファイルを削除するかどうか// }
    // ])
    config.plugins.push(
      新しい圧縮プラグイン({
        ファイル名: '[パス].gz[クエリ]',
        アルゴリズム: 'gzip'、
        テスト: /\.js$|\.html$|\.css/,
        しきい値: 10240, // この値より大きいリソースのみが処理されます 10240
        minRatio: 0.8, // この値より低い圧縮率のリソースのみが処理されます deleteOriginalAssets: false // 元のファイルを削除します })
    )
    // 共通コード抽出 config.optimization = {
      分割チャンク: {
        キャッシュグループ:
          ベンダー:
            チャンク: 'すべて'、
            テスト: /node_modules/,
            名前: 'ベンダー'、
            最小チャンク数: 1,
            最大初期リクエスト数: 5,
            最小サイズ: 0,
            優先度: 100
          },
          一般:
            チャンク: 'すべて'、
            テスト: /[\\/]src[\\/]js[\\/]/,
            名前: 'common',
            最小チャンク数: 2,
            最大初期リクエスト数: 5,
            最小サイズ: 0,
            優先度: 60
          },
          スタイル: {
            名前: 'スタイル',
            テスト: /\.(sa|sc|c)ss$/,
            チャンク: 'すべて'、
            強制: 真
          },
          ランタイムチャンク: {
            名前: 'マニフェスト'
          }
        }
      }
    }
  },
  Webpack を構成する: {
    解決する: {
      エイリアス: {
        'vue$': 'vue/dist/vue.esm.js',
        '@': 解決('src')、
        '@c': パスを解決します(__dirname, './src/components'),
        'assets': path.resolve(__dirname, '../src/assets')
      }
    },
    外部: {
      'vue': 'vue',
      'vuex': 'vuex',
      'vue-router': 'VueRouter',
      'axios': 'axios',
      'qs': 'Qs',
      'ヴァント': 'ヴァント'
      // 'weixin-js-sdk': 'weixin-js-sdk',
      // 'クリップボード': 'クリップボード',
      // 'qrcodejs2':'qrcodejs2',
      // 'js-md5':'js-md5'
    },
    最適化:
      最小化:
        新しいUglifyJsPlugin({
          醜いオプション: {
            出力: { // コメントを削除 comments: false
            },
            //本番環境ではコンソールが自動的に削除されます
            圧縮: {
              //warnings: false, // パッケージングが間違っている場合は、この行をコメント化します。drop_debugger: true, // デバッガーステートメントをクリアします。drop_console: true, // コンソールステートメントをクリアします。pure_funcs: ['console.log']
            }
          },
          ソースマップ: false、
          平行: 真
        })
      ]
    }
  },

  // CSS関連の設定 css: {
    抽出: 偽、
    ローダーオプション: {
      スタイラス:
        'URLを解決する': true,
        '輸入': []
      },
      // 少ない: {
      // // `globalVars` はグローバル変数を追加できるグローバルオブジェクトを定義します // globalVars: {
      // プライマリ: '#333'
      // }
      // }
    },
    モジュール拡張が必要です: true、
  },

  // webpack-dev-server 関連の設定 devServer: { // プロキシを設定 hot: true, // ホットローディング host: 'localhost', // IP アドレス port: 8085, // ポート https: false, // false で https がオフになり、true でオンになります open: true, // ブラウザを自動的に開きます proxy: { // 複数のクロスドメインを設定します '/api': { // ローカル // target: 'http://172.168.10.150:81/ysol_wx',
        //ターゲット: 'http://yishanonline.cn/ysol_wx',
        ターゲット: 'https://yishanol.cn/ysol_wx',
        ws: 真、
        変更元: true、
        パス書き換え: {
          '^/api': ''
        }
      }
    }
  },

  pluginOptions: { // サードパーティプラグインの設定 // ...
  },
  チェーンWebpack: config => {
    // =============picturestart を圧縮する============
    構成モジュール
      .rule('画像')
      .use('イメージウェブパックローダー')
      .loader('イメージwebpackローダー')
      .オプション({
        //{ バイパスオンデバッグ: true }
        mozjpeg: { progressive: true, quality: 65 }, JPEG画像を圧縮する
        optipng: { enabled: false }, // PNG画像を圧縮する
        pngquant: { quality: [0.65, 0.9], speed: 4 }, // PNG画像を圧縮する
        gifsicle: { interlaced: false }, // SVG 画像を圧縮する
        // webp: { 品質: 75 }
      })
      。終わり()
    // config.module.rules.push({
    // テスト: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
    // 使用:[{
    // ローダー: 'image-webpack-loader',
    // オプション: {bypassOnDebug: true}
    // }]
    // })
    // =============画像を圧縮する終了============
    config.plugin('html').tap(args => {
      args[0].cdn = cdn
      引数を返す
    })

    /* 分析ツールを追加する */
    process.env.NODE_ENV === 'production'の場合{
      プロセス.env.npm_config_report の場合 {
        設定
          .plugin('webpack-bundle-analyzer')
          .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
          。終わり();
        config.plugins.delete('プリフェッチ')
      }
    }

    if (process.env.UMI_ENV === 'production') { //ソースマップはprodのときのみアップロードされます。決定されていない場合は、プロジェクトの実行時にもアップロードされます。これはオンラインログ出力には必要ないので、削除できます。config.plugin("sentry").use(SentryCliPlugin, [{
        無視: ['node_modules'],
        include: /\.map$/, //distファイルjsをアップロード
        configFile: 'sentry.properties', // 設定ファイルのアドレス、これはそこになければなりません、ここで落とし穴に陥って、書き忘れたため、ソースマップをアップロードできなくなりました
        release: '[email protected]', //バージョン番号、自己定義変数、プロジェクト内のバージョン番号全体が一致している必要があります deleteAfterCompile: true,
        urlPrefix: '~/wx_vue/' //cdn js コード パス プレフィックス}])
    }
  }
}

vue2 と比較すると、vue3 の vue.config.js はより簡潔です。実践力を高めるには、必要なものを自分で設定する必要があります。いくつかの文法的な変更を除けば、いくつかの書き方は依然として似ています。パッケージの最適化にはまだ長い道のりがありますが、次回も引き続き更新します

vue.config.js パッケージ最適化設定に関するこの記事はこれで終わりです。vue.config.js パッケージ最適化に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • vue-cli3.0 での CSS、JS、画像のパッケージ パスのカスタマイズの詳細な説明
  • BlueShow v1.0 リリース 画像ブラウザ(ライトボックスに類似) blueshow.js パッケージのダウンロード
  • Jsモジュールパッケージのエクスポートの使用法と違いにはインポートが必要
  • video.js をコンパイルしてパッケージ化する方法を段階的に説明します
  • nuxt.jsは、プロジェクトのパッケージ環境操作を区別するために環境変数を追加します。
  • vue は uglifyjs-webpack-plugin パッケージング エラーの問題を解決します
  • Vue.js をパッケージ化後に容量を圧縮する方法のまとめ(Vue.js はパッケージ化後容量が大きすぎる)
  • Vue パッケージ化後に vendor.js ファイルが大きくなりすぎる問題を解決する
  • js は複数の画像を zip にパッケージ化します

<<:  Linuxのアラーム機能の例の説明

>>:  MySQL 5.7 解凍版のインストールとアンインストール、およびよくある問題の概要

推薦する

LinuxにNginxを素早くインストールする方法

目次nginxとは1. 必要な依存関係をダウンロードする2. nginxの圧縮パッケージをダウンロー...

CentOS 7 で PHP 5.4 を 5.6 にアップグレードする方法の簡単な分析

1.ターミナルに入ったらPHPのバージョンを確認するphp -v出力は次のようになります。 PHP ...

HTTPS の原則の説明

HTTPS ウェブサイトの構築コストが下がるにつれて、ほとんどのウェブサイトが HTTPS プロトコ...

Tomcatのクラスロードメカニズムのプロセスとソースコード分析

目次序文1. Tomcat クラスローダー構造図: 2. Tomcat のクラスロードプロセスの説明...

MySQL InnoDB 監視 (システム層、データベース層)

MySQL InnoDB 監視 (システム層、データベース層) MySQL の監視に関しては、My...

自動検索提案機能のスタイルファイルを入力します: suggestion.css

コードをコピーコードは次のとおりです。 .sugLayerDiv{位置:相対; overflow:h...

Nodejs は JSON 文字列を JSON オブジェクトに変換するエラー解決法

JSON 文字列を JSON オブジェクトに変換するにはどうすればいいですか? JSON.parse...

Linux で FastDFS を使用してイメージ サーバーを構築する

目次サーバー計画1. システムコンポーネントをインストールする2. fastdfsをインストールする...

HTML で Web ページに動的な時計を書く

HTML を使用して動的な Web クロックを作成します。コードは次のとおりです。 <!DOC...

AngularJSにおける括弧の役割の詳細な説明

1. 括弧の役割1.1 角括弧 [ ]属性名が角括弧で囲まれている場合、右側には式の値が割り当てられ...

TypeScript 学習ノート: 型の絞り込み

目次序文型推論真理値の絞り込み平等の縮小演算子の絞り込みインスタンスの絞り込み狭まりの本質ユニオン型...

MySQLでカーソルトリガーを使用する方法

カーソル選択クエリによって返される行のセットは、結果セットと呼ばれます。結果セット内の行は、入力した...

Dockerイメージの作成、アップロード、プル、デプロイを理解するための記事

目次1. 画像1. 鏡とは何ですか? 2. 画像の構成と目的(1) Dockerファイル(2)スクラ...

Nginx のアクセス制御とパラメータ調整方法

Nginx グローバル変数Nginx には、$variable 名を通じて使用できるグローバル変数が...

インデックスとテーブルリターンをカバーするMySQLの使い方

インデックスの2つの主要なカテゴリ使用されるストレージエンジン: MySQL 5.7 InnoDBク...