Vue3.0+TS

Vue3+TS Day09 - webpack-dev-serv

2021-12-02  本文已影响0人  望穿秋水小作坊

一、webpack 搭建本地服务器

1、为什么 webpack 要搭建本地服务器?

image.png

2、要监听代码的改变,并且自动打包方式一【watch 模式】

image.png

3、要监听代码的改变,并且自动打包且刷新浏览器【方式二】

image.png

4、什么是 webpack-dev-server 里面的 HMR?Vue 怎么支持 HMR 的?

image.png image.png image.png

5、HMR 的原理?

image.png image.png

6、webpack-dev-server 的一些其他配置项?借助哪个属性可以解决跨域问题?

image.png image.png image.png image.png

二、webpack 的 resolve 模块

1、我们 import 或者 require 的时候,为什么下面写法都能找到对应的文件?

import axios from "axios";
import { sum } from "@/js/math";
const {priceFormat} = require("./js/format.js");
image.png image.png

2、关于【enhanced-resolve】一些比较常用的配置?

image.png

三、webpack 的 webpack.config.js 文件分离

1、在 webpack.config.js 文件 中,有些配置是【开发环境】的,有些配置是【生产环境】的如何进行分离?

  "scripts": {
    "build": "webpack --config ./config/webpack.prod.config.js",
    "serve": "webpack serve --config ./config/webpack.dev.config.js"
  },
const path = require('path');

// plugins
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { DefinePlugin } = require('webpack')
const { VueLoaderPlugin } = require('vue-loader/dist/index');

module.exports = {
  entry: "./src/main.js",
  output: {
    path: path.resolve(__dirname, "./build"),
    filename: "bundle.js",
    // assetModuleFilename: "img/[name]_[hash:6][ext]"
  },
  resolve: {
    extensions: [".js", ".json", ".mjs", ".vue", "ts"],
    alias: {
      "@": path.resolve(__dirname, "../src")
    }
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          "style-loader",
          "css-loader",
          "postcss-loader"
        ]
      },
      {
        test: /\.less$/,
        use: [
          "style-loader",
          "css-loader",
          "less-loader"
        ]
      },
      {
        test: /\.(jpe?g|png|gif|svg)$/,
        type: "asset",
        generator: {
          filename: "img/[name]_[hash:6][ext]"
        },
        parser: {
          dataUrlCondition: {
            maxSize: 100 * 1024
          }
        }
      }, {
        test: /\.(eot|ttf|woff2?)$/,
        type: "asset/resource",
        generator: {
          filename: "font/[name]_[hash:6][ext]"
        }
      }, {
        rules: [
          {
            test: /\.m?js$/,
            use: {
              loader: "babel-loader"
            }
          }
        ]
      }, {
        test: /\.vue$/,
        loader: "vue-loader"
      }
      // {
      //   test: /\.(jpe?g|png|gif|svg)$/,
      //   use: {
      //     loader: "url-loader",
      //     options: {
      //       // outputPath: "img",
      //       name: "img/[name]_[hash:6].[ext]",
      //       limit: 10 * 1024
      //     }
      //   }
      // }
      // {
      //   test: /\.(eot|ttf|woff2?)$/,
      //   use: {
      //     loader: "file-loader",
      //     options: {
      //       // outputPath: "font",
      //       name: "font/[name]_[hash:6].[ext]"
      //     }
      //   }
      // }
    ]
  },
  plugins: [

    new HtmlWebpackPlugin({
      title: "webpack 案例",
      template: "./public/index.html"
    }),
    new DefinePlugin({
      BASE_URL: "'./'",
      __VUE_OPTIONS_API__: true,
      __VUE_PROD_DEVTOOLS__: false
    }),
    new VueLoaderPlugin()
  ]
}

const { merge } = require('webpack-merge');

const commonConfig = require('./webpack.comm.config');

module.exports = merge(commonConfig, {
    // 设置模式
    // development 开发阶段,会设置 development
    // production 准备打包上线的时候,设置 production
    mode: "development",

    // 设置 source-map,建立 js 映射文件,方便调试代码和错误
    devtool: "source-map",
    devServer: {
        hot: true,
        proxy: {
            "/cip": {
                target: "https://www.cip.cc/",
                pathRewrite: {
                    "^/cip": ""
                },
                secure: false,
                changeOrigin: true
            }
        }
    }
})
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const { merge } = require('webpack-merge');

const commonConfig = require('./webpack.comm.config');

module.exports = merge(commonConfig, {
    mode: "production",
    plugins: [
        new CleanWebpackPlugin(),
        new CopyWebpackPlugin({
            patterns: [
                {
                    from: "public",
                    globOptions: {
                        ignore: [
                            '**/.DS_Store',
                            '**/index.html'
                        ]
                    }
                }
            ]
        }),
    ]
})
上一篇 下一篇

猜你喜欢

热点阅读