最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析vue.config.js文件使用

 更新時間:2024年07月05日 11:03:41   作者:落雪小軒韓  
這篇文章主要介紹了vue.config.js文件使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、用途

創(chuàng)建 Vue 項(xiàng)目時,默認(rèn)情況下是沒有 vue.config.js 文件的。

Vue CLI 會提供一組默認(rèn)的配置,用于構(gòu)建和開發(fā)項(xiàng)目,這些配置在內(nèi)部被封裝好了,并不需要用戶手動創(chuàng)建 vue.config.js 文件來進(jìn)行配置。

通過在項(xiàng)目根目錄下創(chuàng)建 vue.config.js 文件,你可以自定義 Vue CLI 的默認(rèn)配置,從而滿足項(xiàng)目特定的需求。

常見的用途包括

1、自定義 webpack 配置:

  • 可以通過 vue.config.js 文件來修改 Vue CLI 默認(rèn)的 webpack 配置,例如添加額外的 loader 或 plugin、調(diào)整 webpack 的 entry、output 等選項(xiàng)。

2、配置開發(fā)服務(wù)器:

  • 在 vue.config.js 中配置開發(fā)服務(wù)器的選項(xiàng),例如端口號、代理設(shè)置、HTTPS 配置等。

3、配置公共資源路徑:

  • 可以指定構(gòu)建后靜態(tài)資源的公共路徑,比如部署到子路徑或 CDN 上時的路徑設(shè)置。

4、配置環(huán)境變量:

  • 可以在 vue.config.js 中設(shè)置環(huán)境變量,用于在項(xiàng)目中訪問和區(qū)分不同的環(huán)境,比如開發(fā)環(huán)境、測試環(huán)境和生產(chǎn)環(huán)境。

5、配置插件:

  • 可以配置 Vue CLI 插件,通過在 vue.config.js 文件中進(jìn)行相應(yīng)的設(shè)置和調(diào)整。

6、配置CSS:

  • 可以配置 CSS 相關(guān)的選項(xiàng),例如啟用 CSS modules、使用 PostCSS 插件等。

7、配置Babel:

  • 可以配置 Babel 相關(guān)的選項(xiàng),例如添加額外的 Babel 插件或預(yù)設(shè)。

二、常見的配置項(xiàng)及其功能說明

module.exports = {
  // 配置開發(fā)服務(wù)器
  devServer: {
    // 指定開發(fā)服務(wù)器的主機(jī)名,默認(rèn)為 localhost
    host: 'localhost',
    // 指定開發(fā)服務(wù)器的端口號,默認(rèn)為 8080
    port: 8080,
    // 啟用 HTTPS,默認(rèn)為 false
    https: false,
    // 配置開發(fā)服務(wù)器的代理
    proxy: {
      '/api': {
        target: 'http://localhost:3000',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    }
  },
  // 配置公共路徑
  publicPath: '/',
  // 是否在構(gòu)建時生成 source map,默認(rèn)為 false
  productionSourceMap: false,
  // 配置 CSS
  css: {
    // 啟用 CSS modules
    requireModuleExtension: true,
    // 是否使用 CSS 預(yù)處理器 loader
    loaderOptions: {
      sass: {
        prependData: `@import "@/styles/variables.scss";`
      }
    }
  },
  // 配置 Babel
  transpileDependencies: [
    /* string or regex */
  ],
  // 配置插件
  pluginOptions: {
    // ...
  },
  // 配置 webpack
  configureWebpack: {
    // ...
  },
  // 配置 Webpack Dev Server 的選項(xiàng)
  devServer: {
    // ...
  }
};

三、實(shí)踐案例

'use strict'
const path = require('path')
// 輔助函數(shù) resolve,它接受一個路徑參數(shù) dir,并返回該路徑相對于當(dāng)前文件所在目錄的絕對路徑
function resolve (dir) {
  return path.join(__dirname, dir)
}
// 引入了用于壓縮文件的 webpack 插件 compression-webpack-plugin,它能夠在打包時對文件進(jìn)行 gzip 壓縮
const CompressionWebpackPlugin = require('compression-webpack-plugin')
// 定義了一個變量 IS_PROD,它根據(jù)當(dāng)前環(huán)境變量 NODE_ENV 的值來判斷是否為生產(chǎn)環(huán)境
const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)
// 正則表達(dá)式,用于匹配需要進(jìn)行 gzip 壓縮的文件類型
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i
// 導(dǎo)出了整個配置對象,使其可以被 webpack 使用
module.exports = {
  publicPath: './',
  outputDir: 'dist',
  assetsDir: 'static',
  lintOnSave: process.env.NODE_ENV === 'development',
  productionSourceMap: false,
  css: {
    loaderOptions: {
      // 給 sass-loader 傳遞選項(xiàng)
      sass: {
        // 所以這里假設(shè)你有 `src/variables.scss` 這個文件
        data: '@import "@/assets/css/variables.scss";'
      }
    }
  },
  configureWebpack: config => {
  	// 定義一個空數(shù)組,用于存放Webpack插件
    const plugins = []
    // 如果是生產(chǎn)環(huán)境,添加以下插件配置
    if (IS_PROD) {
      plugins.push(
        new CompressionWebpackPlugin({ // 使用CompressionWebpackPlugin插件進(jìn)行g(shù)zip壓縮
          filename: '[path].gz[query]', // 指定壓縮后文件的名稱格式
          algorithm: 'gzip', // 指定壓縮算法為gzip
          test: productionGzipExtensions, // 指定要壓縮的文件類型
          threshold: 10240, // 只有文件大小大于10KB才會被壓縮
          minRatio: 0.8 // 只有壓縮率達(dá)到0.8以上的文件才會被壓縮
        })
      )
      // 開啟分離js,配置Webpack的優(yōu)化選項(xiàng)
      config.optimization = {
        runtimeChunk: 'single', // 將runtime代碼單獨(dú)提取為一個chunk
        splitChunks: { // 配置分割代碼塊的規(guī)則
          chunks: 'all', // 選擇所有類型的chunk進(jìn)行優(yōu)化
          maxInitialRequests: Infinity, // 允許的最大初始請求數(shù),Infinity表示無限制
          minSize: 20000, // 每個代碼塊的最小大小,小于該值的模塊不會被提取
          cacheGroups: { // 定義緩存組
            vendor: { // 緩存組的名稱為vendor
              test: /[\\/]node_modules[\\/]/,  // 匹配條件,node_modules目錄下的模塊
              name (module) { // 模塊名稱的生成規(guī)則
                const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1] // 獲取模塊名稱
                return `npm.${packageName.replace('@', '')}` // 返回以npm.開頭的模塊名稱,@符號替換為空字符串
              }
            }
          }
        }
      };
    }
    // 將定義的插件數(shù)組合并到Webpack配置中的插件數(shù)組中
    config.plugins = [...config.plugins, ...plugins];
  },
  chainWebpack (config) {
    // 刪除 webpack 中的預(yù)加載和預(yù)獲取資源的插件
    // 這些插件通常會在項(xiàng)目中引入一些未使用的資源,對于一些性能要求較高的項(xiàng)目,可能希望移除這些插件以減少無用資源的加載。
    config.plugins.delete('preload') // TODO: need test
    config.plugins.delete('prefetch') // TODO: need test
    // 將入口文件配置為包含了 Babel polyfill 的 main.js 文件
    config.entry.app = ['@babel/polyfill', './src/main.js']
    // 設(shè)置了一個別名 @,指向項(xiàng)目中的 src 目錄
    // 在代碼中引用文件時就可以使用 @ 代替 src
    config.resolve.alias
      .set('@', resolve('src'))
      .end()
    // 如果是開發(fā)環(huán)境,則調(diào)用 config.devtool('cheap-source-map') 方法來配置 devtool 選項(xiàng),以生成方便調(diào)試的源映射文件
    config
      .when(process.env.NODE_ENV === 'development',
        config => config.devtool('cheap-source-map')
      )
    // 圖片處理規(guī)則
    config.module
      .rule('images')
      .test(/\.(woff2?|eot|ttf|otf|png|jpe?g|gif|svg)(\?.*)?$/) // 匹配圖片文件的文件名后綴
      .use('url-loader') // 使用 url-loader 加載器處理圖片文件
      .loader('url-loader')
      .options({
        limit: 80000, // 小于 80000 字節(jié)的圖片轉(zhuǎn)換為 base64 編碼的 Data URL
        esModule: false // 禁用 ES 模塊語法
      })
      if (IS_PROD) {
        config.module
          .rule('images')
          .test(/\.(woff2?|eot|ttf|otf|png|jpe?g|gif|svg)(\?.*)?$/)
          .use('image-webpack-loader') // 用于優(yōu)化圖片文件
          .loader('image-webpack-loader')
          .options({
            mozjpeg: { progressive: true, quality: 65 },
            optipng: { enabled: false },
            pngquant: { quality: [0.65, 0.9], speed: 4 },
            gifsicle: { interlaced: false }
          })
      }
  }
}

以上代碼的主要作用是根據(jù)環(huán)境判斷是否為生產(chǎn)環(huán)境,如果是則添加對應(yīng)的插件配置和優(yōu)化選項(xiàng)。

其中,主要的插件是 CompressionWebpackPlugin,用于對資源文件進(jìn)行 gzip壓縮,在生產(chǎn)環(huán)境中提高加載速度。

同時,通過配置 splitChunks 選項(xiàng),將第三方庫和公共模塊分離到單獨(dú)的文件中,以優(yōu)化瀏覽器緩存機(jī)制,提高頁面加載速度。

附:

一些關(guān)鍵配置項(xiàng)解析

  • publicPath: 指定項(xiàng)目的基本 URL 路徑,通常用于將靜態(tài)資源部署到 CDN 上時使用。在這個配置中,‘./’ 表示相對路徑。
  • outputDir: 指定打包后的文件輸出目錄。
  • assetsDir: 指定放置生成的靜態(tài)資源 (js、css、img、fonts) 的 (相對于 outputDir 的) 目錄。
  • productionSourceMap: 是否在生產(chǎn)環(huán)境下生成 source map 文件,方便調(diào)試,默認(rèn)為 false。
  • css.loaderOptions: 用于向 CSS 相關(guān)的 loader 傳遞選項(xiàng)。在這里使用 sass-loader 加載器,引入了一個變量文件。
  • configureWebpack: 用于修改 webpack 的配置,在這里添加了一些插件,比如壓縮插件 CompressionWebpackPlugin,根據(jù)環(huán)境變量決定是否啟用壓縮。
  • chainWebpack: 通過 webpack-chain 的 API 修改 webpack 配置,包括修改入口文件、配置別名、刪除預(yù)加載和預(yù)取等操作。
  • url-loaderimage-webpack-loader: 用于處理圖片資源,限制圖片大小,并進(jìn)行圖片優(yōu)化,例如壓縮、轉(zhuǎn)換格式等。

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue props傳值失敗 輸出undefined的解決方法

    vue props傳值失敗 輸出undefined的解決方法

    今天小編就為大家分享一篇vue props傳值失敗 輸出undefined的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue商城中商品“篩選器”功能的實(shí)現(xiàn)代碼

    vue商城中商品“篩選器”功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了vue商城中商品“篩選器”功能的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 基于axios 的responseType類型的設(shè)置方法

    基于axios 的responseType類型的設(shè)置方法

    今天小編就為大家分享一篇基于axios 的responseType類型的設(shè)置方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • vue項(xiàng)目中Eslint校驗(yàn)代碼報錯的解決方案

    vue項(xiàng)目中Eslint校驗(yàn)代碼報錯的解決方案

    這篇文章主要介紹了vue項(xiàng)目中Eslint校驗(yàn)代碼報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 前端vue3實(shí)現(xiàn)圖片懶加載的完整步驟記錄

    前端vue3實(shí)現(xiàn)圖片懶加載的完整步驟記錄

    在現(xiàn)代前端開發(fā)中懶加載是一種提高應(yīng)用性能和用戶體驗(yàn)的重要技術(shù),尤其是在處理較大圖片或長列表數(shù)據(jù)時,這篇文章主要介紹了前端vue3實(shí)現(xiàn)圖片懶加載的相關(guān)資料,需要的朋友可以參考下
    2025-06-06
  • vue.js綁定事件監(jiān)聽器示例【基于v-on事件綁定】

    vue.js綁定事件監(jiān)聽器示例【基于v-on事件綁定】

    這篇文章主要介紹了vue.js綁定事件監(jiān)聽器的方法,結(jié)合實(shí)例形式分析了vue.js基于v-on事件綁定響應(yīng)鼠標(biāo)點(diǎn)擊相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • vue 解決遍歷對象顯示的順序不對問題

    vue 解決遍歷對象顯示的順序不對問題

    今天小編就為大家分享一篇vue 解決遍歷對象顯示的順序不對問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 談?wù)剬ue響應(yīng)式數(shù)據(jù)更新的誤解

    談?wù)剬ue響應(yīng)式數(shù)據(jù)更新的誤解

    本篇文章主要介紹了談?wù)剬ue響應(yīng)式數(shù)據(jù)更新的誤解,深入了解了vue響應(yīng)式數(shù)據(jù),有興趣的可以了解一下
    2017-08-08
  • Vue二級彈窗關(guān)閉錯誤的解決指南

    Vue二級彈窗關(guān)閉錯誤的解決指南

    本文詳細(xì)分析了Vue.js項(xiàng)目中二級彈窗關(guān)閉時出現(xiàn)的DOM操作錯誤原因,并提供了多種解決方案,包括確保正確的DOM操作時機(jī)、處理過渡動畫、管理動態(tài)組件和清理異步操作等,通過這些方法,可以有效預(yù)防和解決此類問題,提升應(yīng)用的穩(wěn)定性和性能,需要的朋友可以參考下
    2026-01-01
  • vue-router安裝和使用詳解

    vue-router安裝和使用詳解

    vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,適合用于構(gòu)建單頁面應(yīng)用,分步驟介紹了安裝和使用vue-router的方法,感興趣的朋友跟隨小編一起看看吧
    2023-08-08

最新評論

长丰县| 江城| 越西县| 绥江县| 关岭| 和林格尔县| 博野县| 溧阳市| 沈丘县| 通江县| 江北区| 东至县| 永登县| 舞钢市| 阿图什市| 闻喜县| 泸州市| 华安县| 大埔区| 惠水县| 苏州市| 丰城市| 石嘴山市| 贵德县| 南昌县| 崇文区| 开鲁县| 宁阳县| 惠安县| 佛坪县| 黄陵县| 乡城县| 锦屏县| 海淀区| 六盘水市| 嘉黎县| 三台县| 平远县| 荥阳市| 潮安县| 周宁县|