首页 > 其他分享 >Vue3的学习---9

Vue3的学习---9

时间:2024-08-27 16:27:25浏览次数:4  
标签:npm 学习 vue cli index js --- Vue Vue3

9. Vue-cli脚手架

9.1 搭建Vue-Cli脚手架

Vue-cli是一个官方提供的脚手架工具,用于快速搭建Vue.js项目。它集成了项目初始化、开发服务器、构建工具、代码检查等功能,使得开发者可以更高效地进行Vue.js应用的开发。

Vue-cli官网:https://cli.vuejs.org/zh/

Vue CLI的主要功能包括:

  1. 项目初始化:通过命令行快速生成一个新的Vue项目结构,包括基本的目录结构、配置文件和依赖包。
  2. 开发服务器:内置了一个开发服务器,支持热重载(Hot Module Replacement),可以在开发过程中实时预览代码更改。
  3. 构建工具:集成了Webpack,可以对项目进行打包和优化,生成用于生产环境的静态文件。
  4. 代码检查:支持ESLint等代码检查工具,帮助开发者保持代码风格一致性和减少潜在的错误。
  5. 插件系统:提供了丰富的插件,可以扩展项目的功能,如添加路由、状态管理等。

9.1.1 安装npm

npm 是 Node.js 的包管理器,用于安装、共享和管理项目中使用的代码包(也称为模块或依赖项)。

从node官网(https://nodejs.org/zh-cn)下载并安装node,安装步骤很简单,只需要一直点next就行了。安装完成后,打开命令行工具输入命令node - v,如果出现对应的版本号就说明安装成功了。

C:\Users\Administrator>node -v
v20.17.0

输入命令npm -v,显示出npm的版本信息。

C:\Users\Administrator>npm -v
10.8.0

上述两个显示没有问题,则说明npm 安装成功。

9.1.2 全局安装 vue-cli

全局安装vue-cli(相当于在本机的npm仓库中有了vue-cli)

// 安装最新@vue/cli版本
npm install -g @vue/cli
// 安装指定版本@vue/cli版本
npm install -g @vue/[email protected]

其他命令:

// 查看远程仓库中的@vue/cli版本号:
npm view @vue/cli versions --json
// 卸载旧版本的vue-cli
npm uninstall vue-cli -g

9.1.3 创建vue-cli工程

  1. 打开终端: 打开你的终端或命令提示符。

  2. 创建新项目: 使用以下命令创建一个新的 Vue 项目:

    vue create my-project
    

    这里的 my-project 是你的项目名称,你可以根据需要更改。

  3. 选择预设或手动配置: 在运行上述命令后,Vue CLI 会提示你选择一个预设或手动配置项目。你可以选择默认预设(通常包含 Babel 和 ESLint),或者选择手动配置以自定义项目设置。

    • 默认预设:直接按回车键选择默认预设。

    • 手动配置:使用方向键选择“手动选择功能”,然后按回车键。接下来,你可以选择你需要的功能(如 Babel、TypeScript、Router、Vuex、CSS 预处理器等),并进行相应的配置。

  4. 等待安装完成: 选择配置后,Vue CLI 会自动下载所需的依赖包并设置项目结构。

  5. 进入项目目录: 安装完成后,进入项目目录:

    cd my-project
    
  6. 启动开发服务器: 使用以下命令启动开发服务器:

    npm run serve
    

    启动后,你可以在浏览器中访问 http://localhost:8080 查看你的 Vue 项目。

9.2 Vue-cli工程目录结构及运行分析

目录结构

my-project
├── node_modules       # 项目依赖包
├── public             # 静态资源目录
│   ├── favicon.ico    # 网站图标
│   └── index.html     # 主页面模板
├── src                # 源代码目录
│   ├── assets         # 静态资源(如图片、样式文件等)
│   ├── components     # 公共组件
│   ├── App.vue        # 根组件
│   ├── main.js        # 入口文件
│   ├── router         # 路由配置
│   │   └── index.js
│   ├── store          # Vuex 状态管理
│   │   └── index.js
│   └── views          # 页面组件
├── .browserslistrc    # 目标浏览器配置
├── .eslintrc.js       # ESLint 配置
├── .gitignore         # Git 忽略文件配置
├── babel.config.js    # Babel 配置
├── package.json       # 项目配置文件
├── README.md          # 项目说明文件
└── vue.config.js      # Vue 配置文件(可选)

运行分析

  1. 初始化项目

    • 使用 vue create my-project 命令创建项目。
    • 选择预设或手动配置项目选项。
  2. 安装依赖

    • 进入项目目录,运行 npm installyarn install 安装项目依赖。
  3. 开发环境运行

    • 运行 npm run serveyarn serve 启动开发服务器。
    • 开发服务器会监听文件变化,自动重新编译和刷新浏览器。
  4. 构建生产环境

    • 运行 npm run buildyarn build 进行生产环境构建。
    • 构建结果会输出到 dist 目录,包含优化后的静态资源文件。
  5. 运行分析

    • 入口文件 (src/main.js):项目入口,初始化 Vue 实例,引入路由和状态管理。
    • 根组件 (src/App.vue):项目的根组件,包含路由出口和全局样式。
    • 路由配置 (src/router/index.js):定义应用的路由规则。
    • 状态管理 (src/store/index.js):使用 Vuex 进行状态管理。
    • 静态资源 (publicsrc/assets):存放静态文件,如图片、样式文件等。
  6. 9.3 修改VueCli工程启动端口

在vue.config.js中修改

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  devServer: {
    port: 8081      // 修改启动端口
  }
})

9.4 使用Vue-cli完成ToDoList案例

ToDoList官网:http://www.todolist.com.cn/

ToDoList案例功能介绍:

  1. 输入输入框代办事项后点击添加,该事项就会出想在todo区域内,输入框内的文字消失。
  2. todo区域内的事项为代办事项,点击某一项后,该事项移入done区域。
  3. done区域内的事项为完成事项,点击某一事项后,该事项消失。

9.4.1 组件代码

AddNew:

<template>
  <div>
    <input type="text" v-model="newItem" placeholder="添加ToDo">
    <button @click="handleAdd">添加</button>
  </div>
</template>

<script>
export default {
    data() {
        return {
            newItem: ''
        }
    },
    methods: {
        handleAdd() {
            if(this.newItem === '') {
                alert('不能为空')
                return
            }
            this.$emit('submitNewItem', this.newItem)
            this.newItem = ''
        }
    }
}
</script>

<style scoped>
    input {
        width: 300px;
        height: 30px;
        border: none;
        /* outline: none;是为了防止在输入框中输入时,光标闪烁 */
        outline: none;
        border: solid 1px #999;
        border-radius: 5px;
        padding-left: 10px;
    }

    button {
        width: 80px;
        height: 36px;
        border-radius: 5px;
        margin-left: 10px;
        border: none;
        outline: none;
        background-color: #41b883;
        color: #fff;
    }
</style>

TheList:

<template>
    <div>
        <ol>
            <li v-for="(item, index) in list" :key="index" @click="judgeItem(index)">{{ item }}</li>
        </ol>
    </div>
</template>

<script>
export default {
    props: {
        list: {
            type: Array,
            required: true
        },
        listType: {
            type: Boolean,
            default: false
        }
    },
    methods: {
        judgeItem(index) {
            if (this.listType) {
                this.$emit('deleteItem', index)
            } else {
                this.$emit('judgeItem', index)
            }
        }
    }
}
</script>

<style scoped>
ol {
    margin-top: 20px;
}

ol li {
    cursor: pointer;
}
</style>

ToDoList:

<template>
    <div>
        <h1>ToDoList</h1>
        <AddNew @submitNewItem="addItem"></AddNew>
        <TheList :list="todoList" @judgeItem="toDone"></TheList>
        <hr>
        <TheList :list="doneList" @deleteItem="deleteItem" :listType="true"></TheList>
    </div>
</template>

<script>
import AddNew from '../components/AddNew.vue'
import TheList from '../components/TheList.vue'

// 注册组件
export default {
    data() {
        return {
            todoList: [],    // 待办列表
            doneList: []     // 已完成列表
        }
    },
    components: {
        AddNew,
        TheList
    },
    methods: {
        addItem(newItem) {
            this.todoList.push(newItem)
        },
        toDone(index) {
            // 将待办列表的第index项移到已完成列表,并删除原列表中的该项,splice(index, 1)[0]表示只删除一个元素
            this.doneList.push(this.todoList.splice(index, 1)[0])
        },
        deleteItem(index) {
            this.doneList.splice(index, 1)
        }
    }
}
</script>

<style>

</style>

9.5 Vue-cli的打包部署

9.5.1 Vue-cli工程为什么要打包

  1. 优化资源

打包过程会对项目中的各种资源进行优化处理,包括JavaScript、CSS、图片等。这些优化可以显著减少文件的大小,提高加载速度。例如:

  • 代码压缩:去除空格、注释和不必要的字符,减小文件体积。
  • 代码混淆:将变量名、函数名等替换为简短的字符,进一步减小文件体积。
  • Tree Shaking:移除未使用的代码,只保留实际用到的部分。
  1. 模块合并

在开发过程中,代码通常会被拆分成多个模块,以便于管理和维护。打包过程会将这些模块合并成一个或几个文件,减少HTTP请求的数量,提高加载效率。

  1. 资源哈希

打包后的文件名通常会包含哈希值,这样可以确保每次更新后文件名都不同。这有助于浏览器缓存机制,确保用户总是加载最新的文件,而不是缓存中的旧文件。

  1. 环境适配

打包过程可以根据不同的环境(开发环境、测试环境、生产环境)生成不同的配置文件。例如,可以在生产环境中启用代码压缩和混淆,而在开发环境中禁用这些优化,以便于调试。

  1. 预处理和编译

Vue CLI支持各种预处理器和编译器,例如Sass、Less、TypeScript等。打包过程会将这些预处理和编译后的代码转换为浏览器可以识别的标准JavaScript和CSS。

  1. 静态资源处理

打包过程还会对项目中的静态资源(如图片、字体等)进行处理,确保它们能够正确地被引用和加载。

  1. 代码分割

打包工具可以实现代码分割(Code Splitting),将代码分割成多个小块,按需加载。这可以显著提高首屏加载速度,优化用户体验。

9.5.2 Vue-cli工程打包配置

  1. 在vue.config.js文件中添加如下配置:

    module.exports = defineConfig({
      transpileDependencies: true,
      // 打包的基本目录,使用相对路径
      publicPath: './',
      // 输出目录
      outputDir: 'dist',
      // 静态资源目录
      assetsDir: 'assets'
    })
    
  2. 在命令行中进入到工程目录,运行如下命令:

    npm run build
    

标签:npm,学习,vue,cli,index,js,---,Vue,Vue3
From: https://www.cnblogs.com/yishengwanwuzhao/p/18382965

相关文章

  • FreeRTOS+CubeMX入门(二)--使用cubemx生成FreeRTOS工程
    目录CubeMX创建FreeRTOS入门实例基础配置第一个项目-驱动OLED中断配置文件的简单认识主函数代码简单分析编写业务函数实验效果CubeMX创建FreeRTOS入门实例该笔记记录使用CubeMX创建FreeRTOS工程的粗略讲解,快速构建一个工程,对FreeRTOS有一个初步认识选择CubeID......
  • AT_code_festival_2017_qualc_d - Yet Another Palindrome Partitioning 题解
    YetAnotherPalindromePartitioning题解题目大意给出一个字符串,求把这个字符串划分成最少的小段,使每个小段都可以经过字母重组后为回文串。题目分析如果暴力的话,需要DFS段数、每一段的左节点、右节点,以及判断是否为回文串,时间复杂度在\(O(|S|^{|S|})\)左右。但是本......
  • springboot+vue基于青少年篮球俱乐部管理系统设计与实现【程序+论文+开题】-计算机毕
    系统程序文件列表开题报告内容研究背景随着青少年体育运动的蓬勃发展,篮球作为一项广受欢迎的体育项目,其俱乐部数量在全国范围内迅速增长。然而,传统的管理方式往往依赖于人工记录和纸质文档,不仅效率低下,还容易出错,难以满足俱乐部日常运营中运动员信息管理、比赛组织、报名流......
  • springboot+vue基于驾校信息管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着社会的快速发展和汽车保有量的持续增长,驾驶技能已成为现代人不可或缺的生活技能之一。驾校作为培养驾驶员的重要机构,其管理模式与效率直接影响到学员的学习体验与培训质量。传统驾校管理模式存在信息不透明、流程繁琐、资源分配不......
  • springboot+vue基于大学生考研服务系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着高等教育的普及和就业竞争的日益激烈,越来越多的大学生选择继续深造,通过研究生入学考试(简称考研)来提升自己的学术水平和职业竞争力。然而,考研之路并非坦途,它要求考生不仅要有扎实的专业知识,还需具备高效的学习方法和良好的备考策略......
  • springboot+vue基于超市会员积分管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着零售行业的快速发展与数字化转型的深入,超市作为消费者日常购物的重要场所,其管理模式和服务水平直接影响着顾客满意度与忠诚度。在众多提升顾客忠诚度的策略中,会员积分管理系统凭借其个性化、差异化的服务优势,逐渐成为超市吸引并留......
  • 基于python的保险业务数据可视化分析系统【python-爬虫-大数据定制】
    精彩专栏推荐订阅:在下方专栏......
  • 立创泰山派学习08--SDK编译
    1、下载SDK2、更新repo,同步代码./repo/repo/reposync-lj123、配置编译环境 4、builde.sh脚本常用的指令参数build.sh脚本参数功能说明运行指令help查看脚本帮助说明./build.sh--helplunch选择板级配置文件./build.shlunchall编译整个SDK,包括......
  • vue ant-design上传文件,暂存后在其他页面提交数据(file格式转base64后保存数据,其他页面
    longlongtimenoupdate,huuuuu~最近做一个看起来简单但是功能有点繁琐的东西就是再A页面上传文件,然后B页面确定上传后调用接口,我不知道我这个逻辑对不对哈,有毛病求指教首先用的ant-design框架上传文件<a-uploadlist-type="text":multiple="false":file-list="fileList"......
  • 从零开始学习C++之递归
    递归注:此算法与函数有关,如不了解请移步。在wikipedia中,递归的解释是这样的:在C++中,递归就是指在函数中调用函数本身;递归的作用类似于分治,将一个大问题分解为很多小问题进行求解。但是递归的时间复杂度极高,因为要解决很多小问题,所以时间复杂度高达\(O(2^n)\)。使用递......