VUE3学习 第九章 webpack 构建Vue3项目、vue3性能优化、Vue3 Web Components、Vue3 响应式原理

本文详细讲解了如何手动使用webpack构建Vue3项目,包括初始化项目、性能优化、Web Components的使用以及Vue3的响应式原理。在性能优化部分,提到了谷歌浏览器的性能分析、Vite配置、PWA技术以及VueUse自定义hooks的应用。同时,介绍了Vue3中响应式原理的改变,对比了Vue2和Vue3的响应式差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、webpack 构建 Vue3项目(纯手写 不用cli)

为什么要手写webpack 不用cli (脑子有病)并不是 其实是为了加深我们对webpack 的了解方便以后灵活运用webpack 的技术

1. 初始化项目结构(跟cli 结构保持一致)

  1. 创建 publi 文件夹
    下面创建 index.html 文件 然后初始化一下 ! 然后改一下 title 标签的内容名称,一般与项目名称一样即可
  2. 创建 src 文件夹
    src文件夹 下面 创建 App.vue main.ts 文件
  3. npm init -y 创建 package.json 文件
    创建的 package.json文件 需要添加 dev 和 build 打包命令(注意: package.json 文件中 不能写 // 注释 打包会报错
  "scripts": {
   
   
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack-dev-server",
    "build": "webpack"
  },
  1. tsc --init 创建 tsconfig.json 文件 (如果没有 tsc 可以用 npm i -g typescript)
  2. 创建 webpack.config.js 文件
  3. 安装 webpack 和 webpack-cli 依赖 以及 webpack 启动 dev-server 等。
npm add webpack
npm add webpack -li // 注意 安装 3以上的版本
npm add webpack-dev-server  // 启动dev 的环境
npm add html-webpack-plugin // webpack  html模板插件
  1. 写好 webpack.config.js 文件后 就可以打包了 npm run build
const {
   
    Configuration } = require('webpack') // 本来 没有智能提示的  不过可以通过注解的形式,就可以有智能提示了
const path = require('path') // 引入nodejs 的path
const htmlWebpackPlugin = require('html-webpack-plugin') // 引入 html 模板插件 配置模板


const {
   
    CleanWebpackPlugin } = require('clean-webpack-plugin') // 清空dist文件使用的插件
const {
   
    VueLoaderPlugin } = require('vue-loader/dist/index'); // 这个插件是 为了 webpack 能够去识别 template 组件的

const FriendlyErrorsWebpackPlugin = require("friendly-errors-webpack-plugin"); // 美化打包样式的


/**
 *  @type {Configuration}
 */
const config = {
   
    // 本来这里是没有智能提示的
    mode: "development", // 指定 打包模式   开发环境打包出来的代码是不会压缩的   如果需要压缩的  需要用生产模式 production
    entry: "./src/main.ts", // 入口文件 注意 如果是TS写的 就是 main.ts
	module: {
   
   
		rules: [  // 放在 rules 中 都是处理文件的
			{
   
   
				test: /\.vue$/, //解析vue 模板
                use: "vue-loader"
			}
		]
	},
	output: {
   
    // 出口
        filename: '[hash].js', // 打完包后的文件名
        path: path.resolve(__dirname, 'dist') // 拼接一下 dirname 输出位置
    },
	resolve: {
   
   
        alias: {
   
   
            "@": path.resolve(__dirname, './src') // 别名
        },
        extensions: ['.js', '.json', '.vue', '.ts', '.tsx'] //识别后缀
    },
    stats:"errors-only", //取消提示  
    devServer: {
   
     // 一些端口 跨域之类的配置
        proxy: {
   
   },
        port: 9001,
        hot: true,
        open: true,
    },
    externals: {
   
     // 性能优化的
        vue: "Vue" //CDN 引入
    },
    plugins: [  // 放在 plugins 中 都是插件
        new htmlWebpackPlugin({
   
   
            template: "./public/index.html" // 指定一下模板的位置
        })new CleanWebpackPlugin(), //打包清空dist
        new VueLoaderPlugin(), //解析vue
        new FriendlyErrorsWebpackPlugin({
   
   
            compilationSuccessInfo:{
   
    //美化样式
                messages:['You application is running here http://localhost:8080']
            }     
        })

    ]
}

module.exports = config
  1. 装一下 vue npm add vue(直接创建的最新的版本) 然后 去main.ts 入口文件中引入 (注意 因为是手写的 所以需要去 pubilc 下 添加一个 id等于 app 的 div 作为挂载点)
import {
   
    createApp } from 'vue';
import App from './App.vue'   // 如果 ts 无法识别 vue文件  需要去声明一下  在 src 下面 创建一个 env.d.ts 的文件


createApp(App).mount('#app') // 挂载点  由于是手写的  所以需要去 pubilc文件下的html文件的body中创建一个 div 给个 id 叫app 作为挂载点 到时候会渲染到这个地方
// src 下 env.d.ts 声明文件
declare module "*.vue" {
   
   
  import {
   
    DefineComponent } from "vue"
  const component: DefineComponent<{
   
   }, {
   
   }, any>
  export default component
}
  1. 这时 直接 打包会报错 因为webpack 无法解析 template 所以需要添加新的插件 (安装完以后 需要去 webpack.config.js 中配置使用,具体看上面的代码)
    如果之后还有可能会报错,应该是我们还没支持ts功能,但是 app.vue的模板中 有 lang=“ts” 删了就好了
	npm add vue-loader@next
	npm add @vue/compiler-sfc
  1. 此时还需要一个插件,因为dist中的文件不会自动删除,所以每次打包dist里面都会添加文件 所以需要一个 npm add clean-webpack-plugin 下载好后 直接去webpack.config.js 中注册使用就可以了
  2. 此时已经可以使用 npm run dev 去热更新写代码了
  3. 然后 可以去 webpack.config.js 配置 resollve
    比如: alias 可以去修改 文件名的别名
    extensions 可以自动添加文件名的后缀
resolve: {
   
   
        alias: {
   
   
            "@": path.resolve(__dirname, './src') // 别名
        },
        extensions: ['.js', '.json', '.vue', '.ts', '.tsx'] //识别后缀
    },
  1. 由于 webpack 不支持 css 和 style 所以 需要继续下载 load 去解析, 下载好后 去 webpack.config.js 中 rules中配置
	npm add css-loader
	npm add style-loader

     		{
   
   
                test: 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值