国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于webpack開發(fā)vue-cli

這篇具有很好參考價值的文章主要介紹了基于webpack開發(fā)vue-cli。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、vue-cli開發(fā)

1. 項目整體目錄

基于webpack開發(fā)vue-cli

2. package.json
{
  "name": "vue-cli",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "npm run dev",
    "dev": "cross-env NODE_ENV=development webpack serve --config ./config/webpack.config.js",
    "build": "cross-env NODE_ENV=production webpack --config ./config/webpack.config.js"
  },
  "keywords": [],
  "author": "cx",
  "license": "ISC",
  "browserslist": [
    "last 2 version",
    "> 1%",
    "not dead"
  ],
  "devDependencies": {
    "@babel/core": "^7.17.10",
    "@babel/eslint-parser": "^7.17.0",
    "@vue/cli-plugin-babel": "^5.0.4",
    "babel-loader": "^8.2.5",
    "copy-webpack-plugin": "^10.2.4",
    "cross-env": "^7.0.3",
    "css-loader": "^6.7.1",
    "css-minimizer-webpack-plugin": "^3.4.1",
    "eslint-plugin-vue": "^8.7.1",
    "eslint-webpack-plugin": "^3.1.1",
    "html-webpack-plugin": "^5.5.0",
    "image-minimizer-webpack-plugin": "^3.2.3",
    "imagemin": "^8.0.1",
    "imagemin-gifsicle": "^7.0.0",
    "imagemin-jpegtran": "^7.0.0",
    "imagemin-optipng": "^8.0.0",
    "imagemin-svgo": "^10.0.1",
    "less-loader": "^10.2.0",
    "mini-css-extract-plugin": "^2.6.0",
    "postcss-loader": "^6.2.1",
    "postcss-preset-env": "^7.5.0",
    "sass": "^1.51.0",
    "sass-loader": "^12.6.0",
    "stylus-loader": "^6.2.0",
    "unplugin-auto-import": "^0.7.1",
    "unplugin-vue-components": "^0.19.3",
    "vue-style-loader": "^4.1.3",
    "vue-template-compiler": "^2.6.14",
    "webpack": "^5.72.0",
    "webpack-cli": "^4.9.2",
    "webpack-dev-server": "^4.9.0"
  },
  "dependencies": {
    "element-plus": "^2.2.0",
    "vue": "^3.2.33",
    "vue-router": "^4.0.15"
  }
}

3. eslintrc.js

這里需要繼承vue3的eslint校驗規(guī)則

module.exports = {
  root: true,
  env: {
    node: true,
  },
  extends: ["plugin:vue/vue3-essential", "eslint:recommended"], // 繼承
  parserOptions: {
    parser: "@babel/eslint-parser", // 解析器
  },
};

4. babel.config.js

這里直接使用@vue/cli-plugin-babel/preset預(yù)設(shè),這里面已經(jīng)為我們做好了各種兼容性處理和優(yōu)化,不用我們在像以前一樣還要自己配置core-js,@babel/plugin-transform-runtime等優(yōu)化性的配置了。

module.exports = {
  presets: ["@vue/cli-plugin-babel/preset"], // 預(yù)設(shè)
};
5. webpack.config.js
const path = require("path");
const EslintWebpackPlugin = require("eslint-webpack-plugin"); // eslint檢查代碼
const HtmlWebpackPlugin = require("html-webpack-plugin"); // 生成html文件
const MiniCssExtractPlugin = require("mini-css-extract-plugin"); // 提取css文件
const CssMinimizerWebpackPlugin = require("css-minimizer-webpack-plugin"); // 壓縮css文件
const TerserWebpackPlugin = require("terser-webpack-plugin"); // 壓縮js文件
const ImageMinimizerPlugin = require("image-minimizer-webpack-plugin"); // 壓縮圖片
const CopyPlugin = require("copy-webpack-plugin"); // 拷貝文件
const { VueLoaderPlugin } = require("vue-loader"); // vue-loader插件
const { DefinePlugin } = require("webpack"); // 定義環(huán)境變量
const AutoImport = require("unplugin-auto-import/webpack"); // 按需加載element-plus
const Components = require("unplugin-vue-components/webpack"); // 按需加載element-plus
const { ElementPlusResolver } = require("unplugin-vue-components/resolvers"); // 按需加載element-plus
 
const isProduction = process.env.NODE_ENV === "production"; // 判斷是否是生產(chǎn)環(huán)境

// 返回處理樣式loader函數(shù)
const getStyleLoaders = (pre) => {
  return [
    isProduction ? MiniCssExtractPlugin.loader : "vue-style-loader",
    "css-loader",
    {
      // 處理css兼容性問題
      // 配合package.json中browserslist來指定兼容性
      loader: "postcss-loader",
      options: {
        postcssOptions: {
          plugins: ["postcss-preset-env"],
        },
      },
    },
    pre && {
      loader: pre,
      options:
        pre === "sass-loader"
          ? {
              additionalData: `@use "@/styles/element/index.scss" as *;`, // 自定義element-plus主題
            }
          : {},
    },
  ].filter(Boolean);
};

module.exports = {
  entry: "./src/main.js", // 入口文件
  output: { // 輸出文件
    path: isProduction ? path.resolve(__dirname, "../dist") : undefined, // 生產(chǎn)環(huán)境輸出路徑
    filename: isProduction ? "static/js/[name].[contenthash:10].js" : "static/js/[name].js", // 生產(chǎn)環(huán)境文件名 
    chunkFilename: isProduction ? "static/js/[name].[contenthash:10].chunk.js" : "static/js/[name].chunk.js",  // 生產(chǎn)環(huán)境代碼分割文件名
    assetModuleFilename: "static/media/[hash:10][ext][query]", // 生產(chǎn)環(huán)境資源文件名
    clean: true, // 清除上一次打包文件
  },
  module: { // 處理模塊規(guī)則
    rules: [
      // 處理css
      {
        test: /\.css$/,
        use: getStyleLoaders(),
      },
      {
        test: /\.less$/,
        use: getStyleLoaders("less-loader"),
      },
      {
        test: /\.s[ac]ss$/,
        use: getStyleLoaders("sass-loader"),
      },
      {
        test: /\.styl$/,
        use: getStyleLoaders("stylus-loader"),
      },
      // 處理圖片
      {
        test: /\.(jpe?g|png|gif|webp|svg)$/,
        type: "asset",
        parser: {
          dataUrlCondition: {
            maxSize: 10 * 1024,
          },
        },
      },
      // 處理其他資源
      {
        test: /\.(woff2?|ttf)$/,
        type: "asset/resource",
      },
      // 處理js
      {
        test: /\.js$/,
        include: path.resolve(__dirname, "../src"),
        loader: "babel-loader",
        options: {
          cacheDirectory: true,
          cacheCompression: false,
        },
      },
      {
        test: /\.vue$/, // 處理vue
        loader: "vue-loader",
        options: {
          // 開啟緩存
          cacheDirectory: path.resolve(__dirname, "../node_modules/.cache/vue-loader"),
        },
      },
    ],
  },
  // 處理html
  plugins: [
    new EslintWebpackPlugin({ // eslint檢查代碼
      context: path.resolve(__dirname, "../src"),  // 指定eslint檢查的目錄
      exclude: "node_modules", // 排除node_modules文件夾
      cache: true, // 開啟緩存
      cacheLocation: path.resolve(__dirname, "../node_modules/.cache/.eslintcache"), // eslint緩存cache文件夾
    }),
    new HtmlWebpackPlugin({ // 生成html文件
      template: path.resolve(__dirname, "../public/index.html"), // 指定html模板
    }),
    isProduction &&
      new MiniCssExtractPlugin({ // 提取css文件
        filename: "static/css/[name].[contenthash:10].css", // 生產(chǎn)環(huán)境文件名
        chunkFilename: "static/css/[name].[contenthash:10].chunk.css", // 生產(chǎn)環(huán)境代碼分割文件名
      }),
    isProduction &&
      new CopyPlugin({ // 拷貝文件
        patterns: [ // 拷貝文件列表
          {
            from: path.resolve(__dirname, "../public"), // 拷貝文件源
            to: path.resolve(__dirname, "../dist"), // 拷貝文件目標(biāo)
            globOptions: { 
              // 忽略index.html文件
              ignore: ["**/index.html"],
            },
          },
        ],
      }),
    new VueLoaderPlugin(), // vue-loader插件
    // cross-env定義的環(huán)境變量給打包工具使用
    // DefinePlugin定義環(huán)境變量給源代碼使用,從而解決vue3頁面警告的問題
    new DefinePlugin({
      __VUE_OPTIONS_API__: true,
      __VUE_PROD_DEVTOOLS__: false,
    }),
    // 按需加載element-plus
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [
        ElementPlusResolver({
          // 自定義主題,引入sass
          importStyle: "sass",
        }),
      ],
    }),
  ].filter(Boolean),
  mode: isProduction ? "production" : "development",
  devtool: isProduction ? "source-map" : "cheap-module-source-map",  // 生產(chǎn)環(huán)境生成source-map
  optimization: { // 優(yōu)化
    splitChunks: { // 代碼分割
      chunks: "all", // 分割所有代碼
      cacheGroups: { // 緩存組
        vue: { // 分割vue
          test: /[\\/]node_modules[\\/]vue(.*)?[\\/]/,
          name: "vue-chunk",
          priority: 40,
        },
        elementPlus: { // 分割element-plus
          test: /[\\/]node_modules[\\/]element-plus[\\/]/,
          name: "elementPlus-chunk",
          priority: 30,
        },
        libs: { // 分割第三方庫
          test: /[\\/]node_modules[\\/]/,
          name: "libs-chunk",
          priority: 20,
        },
      },
    },
    runtimeChunk: {
      name: (entrypoint) => `runtime~${entrypoint.name}.js`, // 生成runtime文件
    },
    minimize: isProduction, // 生產(chǎn)環(huán)境壓縮代碼
    minimizer: [
      new CssMinimizerWebpackPlugin(), // 壓縮css文件
      new TerserWebpackPlugin(), // 壓縮js文件
      new ImageMinimizerPlugin({ // 壓縮圖片
        minimizer: { // 壓縮器
          implementation: ImageMinimizerPlugin.imageminGenerate, // 使用imagemin
          options: {
            plugins: [
              ["gifsicle", { interlaced: true }],
              ["jpegtran", { progressive: true }],
              ["optipng", { optimizationLevel: 5 }],
              [
                "svgo",
                {
                  plugins: [
                    "preset-default",
                    "prefixIds",
                    {
                      name: "sortAttrs",
                      params: {
                        xmlnsOrder: "alphabetical",
                      },
                    },
                  ],
                },
              ],
            ],
          },
        },
      }),
    ],
  },
  // webpack解析模塊加載選項
  resolve: {
    // 自動補(bǔ)全文件擴(kuò)展名
    extensions: [".vue", ".js", ".json"],
    // 路徑別名
    alias: {
      "@": path.resolve(__dirname, "../src"),
    },
  },
  devServer: {
    host: "localhost",
    port: 3000,
    open: true,
    hot: true, // 開啟HMR
    historyApiFallback: true, // 解決前端路由刷新404問題
  },
  performance: false, // 關(guān)閉性能提示
};

二、解讀webpack.config.js關(guān)于vue的配置部分

1. module 部分:
  • 處理 Vue 單文件組件的 loader:

{
  test: /\.vue$/, // 處理vue
  loader: "vue-loader",
  options: {
    // 開啟緩存
    cacheDirectory: path.resolve(__dirname, "../node_modules/.cache/vue-loader")
  }
}

這里使用 vue-loader 處理 .vue 文件,開啟緩存加快構(gòu)建速度。

2. plugins 部分:
  • VueLoaderPlugin:

new VueLoaderPlugin()

在 webpack.config.js 文件中使用了 VueLoaderPlugin,這是用于 Vue-loader 的插件,它會在開發(fā)環(huán)境下編譯 Vue 單文件組件。

  • DefinePlugin:

new DefinePlugin({
  __VUE_OPTIONS_API__: true,
  __VUE_PROD_DEVTOOLS__: false
})

Vue 3 項目會出現(xiàn)頁面警告,可以使用 DefinePlugin 插件定義全局變量來解決,這里定義了 VUE_OPTIONS_APIVUE_PROD_DEVTOOLS。

  • 按需加載element-plus
    // 按需加載element-plus
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
3. optimization 部分:

這部分主要是配置優(yōu)化選項,其中包括代碼分割、壓縮等配置。

  • 代碼分割:
splitChunks: {
  chunks: "all",
  cacheGroups: {
    vue: {
      test: /[\\/]node_modules[\\/]vue(.*)?[\\/]/,
      name: "vue-chunk",
      priority: 40
    },
    elementPlus: {
      test: /[\\/]node_modules[\\/]element-plus[\\/]/,
      name: "elementPlus-chunk",
      priority: 30
    },
    libs: {
      test: /[\\/]node_modules[\\/]/,
      name: "libs-chunk",
      priority: 20
    }
  }
}

在 webpack.config.js 文件中使用了 SplitChunksPlugin 插件對代碼進(jìn)行了分割,其中包括了對 Vue、Element-UI 等第三方庫的分割,可以提高頁面加載速度。

  • 生產(chǎn)環(huán)境壓縮:

minimize: isProduction,
minimizer: [
  new CssMinimizerWebpackPlugin(),
  new TerserWebpackPlugin(),
  new ImageMinimizerPlugin({
    minimizer: {
      implementation: ImageMinimizerPlugin.imageminGenerate,
      options: {
        plugins: [
          ["gifsicle", { interlaced: true }],
          ["jpegtran", { progressive: true }],
          ["optipng", { optimizationLevel: 5 }],
          [
            "svgo",
            {
              plugins: [
                "preset-default",
                "prefixIds",
                {
                  name: "sortAttrs",
                  params: {
                    xmlnsOrder: "alphabetical"
                  }
                }
              ]
            }
          ]
        ]
      }
    }
  })
]

在生產(chǎn)環(huán)境中使用了優(yōu)化插件,包括壓縮 CSS、JS 和圖片等資源文件。文章來源地址http://www.zghlxwxcb.cn/news/detail-495231.html

4. resolve部分
  // webpack解析模塊加載選項
  resolve: {
    // 自動補(bǔ)全文件擴(kuò)展名
    extensions: [".vue", ".js", ".json"],
    // 路徑別名
    alias: {
      "@": path.resolve(__dirname, "../src"),
    },
  },

到了這里,關(guān)于基于webpack開發(fā)vue-cli的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Webpack項目學(xué)習(xí):Vue-cli(腳手架)-優(yōu)化配置 -ui庫element-plus+減小打包體積 -按需加載+自定義主題+優(yōu)化

    Webpack項目學(xué)習(xí):Vue-cli(腳手架)-優(yōu)化配置 -ui庫element-plus+減小打包體積 -按需加載+自定義主題+優(yōu)化

    安裝 全部引入,在入口文件main.js ?啟動:npm start ?按需引入 需要插件快速開始 | Element Plus (gitee.io) ? ? 更改默認(rèn)配置 主題 | Element Plus (gitee.io) ? ?如果有模塊沒有安裝 ,安裝一下即可 優(yōu)化 關(guān)閉性能分析 文件單獨打包 做緩存-

    2024年02月08日
    瀏覽(99)
  • 關(guān)于基于vue-cli腳手架創(chuàng)建vue項目(圖文版)

    關(guān)于基于vue-cli腳手架創(chuàng)建vue項目(圖文版)

    目錄 一.vue-cli腳手架·概述(來源于官方文檔) 二.創(chuàng)建流程 2.1 首先安裝node.js,如未安裝請移步到:安裝node.js 2.2 安裝腳手架vue-cli 2.2.1 使用npm install -g @vue/cli命令 ?2.2.1 使用vue -V 查看版本并檢驗是否安裝成功 ?2.3 安裝vue項目 2.3.1 使用命令 vue create 項目名 ?編輯?2.3.2 這里

    2024年02月07日
    瀏覽(301)
  • webpack/vue-cli構(gòu)建速度和打包體積優(yōu)化

    webpack/vue-cli構(gòu)建速度和打包體積優(yōu)化

    webpack-bundle-analyzer 可以生成代碼分析報告,可以直觀地分析打包出的文件有哪些,及它們的大小、占比情況、各文件 Gzipped 后的大小、模塊包含關(guān)系、依賴項等 npm i -D webpackbar webpack-bundle-analyzer javascript 復(fù)制代碼 const { BundleAnalyzerPlugin } = require(\\\'webpack-bundle-analyzer\\\'); ? module.e

    2024年01月19日
    瀏覽(97)
  • vue項目(vue-cli)配置環(huán)境變量和打包時區(qū)分開發(fā)、測試、生產(chǎn)環(huán)境

    在自定義配置Vue-cli 的過程中,想分別通過.env.development .env.test .env.production 來代表開發(fā)、測試、生產(chǎn)環(huán)境。 本來想使用上面三種配置來區(qū)分三個環(huán)境,但是發(fā)現(xiàn)使用test來打包后在測試環(huán)境會報錯,報錯信息: Uncaught ReferenceError: exports is not defined 本來以為真的是程序出現(xiàn)什么

    2023年04月08日
    瀏覽(228)
  • Webstorm+Nodejs+webpack+vue-cli+Git搭建vue環(huán)境

    Webstorm+Nodejs+webpack+vue-cli+Git搭建vue環(huán)境

    此筆記歸納整理webstorm搭建vue項目,僅作記錄使用。 ??因為版權(quán)問題,就不再細(xì)說了。 ??選擇nvm的安裝路徑: ??選擇node的安裝路徑: ?? Win鍵+R鍵 ,輸入cmd,然后回車,打開命令行界面 ??進(jìn)入命令提示符窗口,輸入以下命令,顯示版本號,則安裝成功。 ??在

    2024年02月15日
    瀏覽(92)
  • 「Vue|網(wǎng)頁開發(fā)|前端開發(fā)」01 快速入門:用vue-cli快速寫一個Vue的HelloWorld項目

    「Vue|網(wǎng)頁開發(fā)|前端開發(fā)」01 快速入門:用vue-cli快速寫一個Vue的HelloWorld項目

    本文主要介紹如何用vue開發(fā)的標(biāo)準(zhǔn)化工具vue-cli快速搭建一個符合實際業(yè)務(wù)項目結(jié)構(gòu)的hello world網(wǎng)頁項目并理解vue的代碼文件結(jié)構(gòu)以及頁面渲染流程。 Windows 系統(tǒng)的 node.js 安裝十分簡易,沒有環(huán)境安裝經(jīng)驗的伙伴可以參考文章:Windows系統(tǒng)下安裝node.js 我們需要先創(chuàng)建一個用于放

    2024年02月12日
    瀏覽(24)
  • 怎樣創(chuàng)建vue項目(分別基于vue-cli和vite兩種的創(chuàng)建方式)

    怎樣創(chuàng)建vue項目(分別基于vue-cli和vite兩種的創(chuàng)建方式)

    1、安裝node.js 1、首先需要安裝node.js,推薦下載地址:Node.js 2、檢查是否安裝成功,使用打開黑窗口的快捷鍵window+R,輸入cmd,在黑窗口輸入node -v,如果輸出版本號,就說明安裝node環(huán)境成功, 2、vue-cli搭建Vue開發(fā)環(huán)境 Vue CLI:命令行界面,俗稱腳手架,Vue CLI 是一個基于webpa

    2024年02月02日
    瀏覽(98)
  • 今天實習(xí)第三天,vue(vue-cli部分,webpack部分,vue-router部分,elementUI部分)

    今天實習(xí)第三天,vue(vue-cli部分,webpack部分,vue-router部分,elementUI部分)

    01.創(chuàng)建第一個vue-cli。這里用的是node.js。早上的時候,就需要把node.js安裝上去 02.node.js安裝 第一步.去官網(wǎng)下載node.js https://nodejs.org/en 第二步.運行官網(wǎng)下載的node.js的msi文件(記住所有的node.js文件的安裝包都是msi文件的形式),一直都是next。最后檢查是否安裝成功,使用wind

    2024年02月16日
    瀏覽(45)
  • IDEA搭建vue-cli | vue-router | 排錯思路、Webpack、Axios、周期、路由、異步、重定向

    IDEA搭建vue-cli | vue-router | 排錯思路、Webpack、Axios、周期、路由、異步、重定向

    ??wei_shuo的個人主頁 ??wei_shuo的學(xué)習(xí)社區(qū) ??Hello World ! Vue 是一套用于構(gòu)建 用戶界面 的漸進(jìn)式 JavaScript 框架。 與其它大型框架不同的是,Vue 被設(shè)計為可以自底向上逐層應(yīng)用。Vue 的核心庫只關(guān)注 視圖層 ,不僅易于上手,還便于與第三方庫或既有項目 整合 。另一方面,當(dāng)

    2024年04月13日
    瀏覽(27)
  • 前端10年進(jìn)化 Node.js、模塊化、CommonJS、AMD、CMD、Webpack、Vue-cli、Electron-vue

    模塊化的概念在軟件開發(fā)領(lǐng)域已經(jīng)存在很長時間,但在?JavaScript?中的模塊化發(fā)展相對較晚。以下是對您提出的問題的回答: 提出時間:JavaScript?中的模塊化概念相對較早地提出于?CommonJS?規(guī)范。CommonJS?是一種?JavaScript?模塊化規(guī)范,最早在?2009?年由?Ryan?Dahl?和其他社區(qū)成

    2024年02月11日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包