Bootstrap

第六章 前端工程化


(如果没有了解前面的知识可以去我主页看看 第四-五章的内容来学习)随着项目的逐渐复杂庞大,传统的前端开发模式显得臃肿、效率低、可重用性差。为了适应前端的快速发展,统一的工程化开发模式逐渐成为主流,前端工程化是指通过使用各种工具和技术,将前端开发过程中的重复、繁琐、易错的工作自动化和规范化,从而提高开发效率、代码质量和团队协作能力。随着 Web 应用的复杂性和前端开发的日益重要性,前端工程化已经成为现代前端开发的核心要素之一。

6.1 前端工程化的意义

6.1.1 WEB 发展历程

  • WEB 1.0 时代,即从 1991 年到 2004 年,是万维网革命的第一阶段,通常称为只读网络,侧重阅读内容,所以仅编写 HTML 静态网页即可。
  • WEB 2.0 时代,从 2004 年至今,是万维网革命的第二阶段,通常称为读写网络,或社交网络。人们可以登录网站贡献内容,参与互动,此时需要编写 JSP 之类的动态网页。
  • WEB 3.0 ,是互联网潜在的下一个阶段,让用户不必在不同中心化的平台创建多种身份,而是打造一个去中心化的通用数字身份体系,通行于各个互联网平台。

  目前有些平台宣传 WEB3.0 已经开始了,但是并没统一官方的说法,所以我们现在依然处于 WEB2.0 为主的时代。

6.1.2 前后端分离

前后端分离是一种软件架构模式,它旨在将Web应用的前端和后端进行解耦,使两者可以独立开发、部署和维护。
一、前后端分离的特点

  1. 松耦合:前后端分离使得前端和后端可以独立开发和演化。前端团队可以专注于用户界面的设计和交互逻辑,后端团队可以专注于业务逻辑和数据处理。这种松耦合的设计使得团队之间的沟通更加灵活,并且可以更快地进行迭代和更新。
  2. 提高开发效率:前后端分离允许前端和后端团队并行开发,提高了开发效率。前端和后端开发者可以使用不同的技术栈和工具,根据各自的需求和喜好进行开发。
  3. 可复用性:后端提供接口服务,前端通过调用接口获取数据。这种接口的设计使得后端的业务逻辑和数据可以被多个前端应用程序共享和复用。
  4. 可扩展性:前后端分离使得系统的不同部分可以独立扩展。例如,在流量增长时,可以通过增加后端服务器来提高系统的性能和吞吐量,而无需影响前端应用的逻辑和用户体验。
  5. 更好的用户体验:前端应用可以通过异步加载、缓存数据等技术来提高页面加载速度和响应性能。同时,通过提供API接口,可以更灵活地进行数据处理和呈现,为用户提供更加交互和丰富的体验。

二、前后端分离的实现方式
6. 完全分离:前端和后端完全独立,通过API进行数据交互。前端负责用户界面的展示和部分业务逻辑,后端负责处理数据存储、业务逻辑和接口的实现。
7. 部分分离:前端与后端部分分离,前端可能会使用一些模板引擎(如JSP、Thymeleaf等)来生成动态页面,而不是完全依赖后端提供的接口。
8. 前后端分离加服务器端渲染(SSR):前端使用一种框架(如Next.js、Nuxt.js等)来实现服务器端渲染,将前端代码部分运行在服务器端生成HTML页面,然后将页面发送给客户端。后端仍然负责处理数据存储、业务逻辑和接口的实现。
9. 前后端分离加无服务器架构(Serverless):前端使用静态网站生成器(如Gatsby、Hugo等)生成静态网页,并将网页部署到内容分发网络(CDN)上。后端使用无服务器函数(如AWS Lambda、Azure Functions等)来处理业务逻辑和接口的实现。

三、前后端分离的优缺点
优点:

  • 前后端团队可以并行工作,提高开发效率。
  • 前后端代码独立,易于维护和升级。
  • 后端业务逻辑和数据可以被多个前端应用程序共享和复用。
  • 系统可扩展性好,可以独立扩展前后端部分。

缺点:

  • 部署和维护的复杂度增加,需要独立部署前端和后端两个系统。
  • 安全性问题需要注意,前端通过API调用后端接口获取数据,需要确保数据传输的安全性。
  • 跨域问题需要特别处理,前端和后端可能存在跨域访问的问题。

6.1.3 前端工程化

前端工程化(Front-end Engineering)是指通过一系列工具、流程和技术手段,将前端开发工作进行系统化、规范化、自动化的过程。

  1. 模块化(Modularity)
    • 将前端代码按照功能或业务逻辑拆分成多个独立的模块,每个模块负责单一的功能。
    • 模块化有助于代码复用,便于维护和升级。
    • 在ES6之前,JavaScript没有模块系统,社区制定了一些模块加载方案,如Commonjs、AMD和CMD等。现在ES6已经在语言层面上规定了模块系统。
  2. 组件化(Componentization)
    • 组件化进一步细化模块化的思想,把界面元素抽象成一个个独立的组件。
    • 组件之间通过接口进行通信,提高了代码的可重用性,也方便了团队成员之间的协作。
    • 组件化是在设计层面上对于UI的拆分,每个组件都是一个功能完备的结构单元,包括模板(HTML)、样式(CSS)和逻辑(JS)。
  3. 自动化(Automation)
    • 利用构建工具如Webpack、Gulp、Grunt等,自动完成一些重复性的任务,如代码压缩、合并文件、版本管理等。
    • 自动化可以节省开发者的精力,专注于核心业务逻辑的编写。
  4. 工程化工具(Tooling)
    • 包括代码编辑器、版本控制系统(如Git)、任务运行器、打包工具、测试框架等。
    • 这些工具共同作用于整个开发流程,提供了一套完整的解决方案。
  5. 持续集成/持续部署(CI/CD)
    • 通过自动化的方式实现代码的测试、构建和部署,确保代码的质量,并快速地发布到生产环境。
  6. 规范与约定(Standards and Conventions)
    • 制定统一的编码规范和最佳实践,使得团队成员在编写代码时遵循相同的规则。
    • 这有助于代码的一致性和可读性。
  7. 性能优化(Performance Optimization)
    • 通过对资源的懒加载、代码分割、图片压缩等方式提升网站的加载速度和用户体验。
  8. 监控与分析(Monitoring and Analytics)
    • 通过前端监控工具收集应用的运行数据,对异常进行报警,并分析用户行为,帮助改进产品。

6.2 前端工程化的工具和技术

6.2.1 Node.js

Node.js是一个基于Chrome V8引擎的开源JavaScript运行时环境,它允许开发者在服务器端运行JavaScript代码。以下是对Node.js的详细介绍:
一、Node.js的特点

  1. 轻量级:Node.js采用事件驱动、非阻塞I/O的编程模型,能够高效地处理大量并发连接,同时占用的系统资源较少。
  2. 高效性:Node.js使用Chrome V8引擎作为JavaScript解释器,可以快速解析和执行JavaScript代码。
  3. 可扩展性:Node.js具有丰富的模块和插件,开发者可以方便地扩展其功能。
  4. 跨平台:Node.js可以在Windows、Linux、macOS等操作系统上运行,为开发者提供了更多的灵活性。

二、Node.js的作用

  1. 服务器端编程:Node.js允许开发者使用JavaScript编写服务器端程序,如Web服务器、API接口等。
  2. 数据接口编写:Node.js可以方便地编写数据接口,为前端提供数据支持。
  3. 网页资源提供:Node.js可以处理并返回网页资源,如HTML、CSS、JavaScript等文件。
  4. 前端工程化基础:Node.js是前端工程化的基础,为学习Vue、React等现代前端框架提供了必要的环境。

三、Node.js的核心模块
Node.js拥有丰富的核心模块,以下是一些常用的模块:

  1. fs模块:用于读写文件。它提供了封装了与本机文件系统交互的方法和属性。
  2. path模块:用于路径处理。它可以帮助开发者处理文件和目录的路径问题。
  3. http模块:用于创建Web服务。通过http模块,开发者可以轻松地搭建Web服务器。
  4. events模块:用于事件处理。它提供了事件驱动编程的基础设施。

四、Node.js的运行机制

  1. 单线程事件驱动:Node.js通过单线程的事件循环来处理所有的异步操作。这种设计避免了多线程编程中的复杂性,并且能够减少上下文切换的开销。
  2. 非阻塞I/O:Node.js使用非阻塞I/O模型来处理I/O操作。当执行I/O操作时,Node.js不会阻塞其他代码的执行,而是会将这些操作交给事件循环去处理,随后通过回调函数或者Promise来处理结果。
  3. 事件循环:事件循环是Node.js的核心机制之一,用于处理和调度异步任务。当Node.js启动时,会初始化事件循环,并处理事件队列中的任务。

五、Node.js的安装与环境搭建

  1. 下载安装:可以从Node.js官方网站下载适合操作系统的安装包进行安装。安装过程中,建议安装在非中文路径下,并避免勾选自动安装其他配套软件。
  2. 验证安装:安装完成后,可以在命令行中输入node -v和npm -v来验证是否安装成功。如果输出相应的版本号,则说明安装成功。
  3. 配置环境变量(可选):在某些情况下,可能需要配置Node.js的环境变量,以便在命令行中更方便地使用Node.js和npm。
  4. 安装全局依赖(可选):可以根据需要安装全局的Node.js模块和依赖包,如使用npm install -g 命令来安装全局模块。

六、Node.js的应用场景
Node.js的高并发处理能力和非阻塞I/O模型使其成为构建实时应用和需要高吞吐量的服务的理想选择。以下是一些常见的应用场景:

  1. Web服务器:Node.js可以高效地处理Web请求和响应,适合构建高性能的Web服务器。
  2. 实时应用:如在线游戏、聊天应用等需要实时交互的应用场景,Node.js能够提供低延迟的响应。
  3. API接口服务:Node.js可以方便地编写和部署API接口服务,为前端或其他客户端提供数据支持。
  4. 命令行工具:Node.js还可以用于开发命令行工具,提高开发效率和自动化水平。

综上所述,Node.js是一个功能强大且灵活的JavaScript运行时环境,适用于多种应用场景。通过学习和掌握Node.js,开发者可以更加高效地开发服务器端程序和前端工程化项目。

6.2.2 NPM 包管理器

NPM(Node Package Manager)是Node.js平台的默认包管理工具,它允许用户安装、共享、分发代码,并管理项目依赖关系。以下是对NPM包管理器的详细介绍:

一、NPM的基本功能

  1. 存放第三方包的代码库:NPM提供了一个庞大的代码库,用户可以从中下载并使用各种第三方包。
  2. 管理本地安装包机制:NPM可以管理项目中的本地安装包,包括安装、更新、卸载等操作。
  3. 定义包依赖关系的标准:通过package.json文件,NPM可以定义和管理项目中的依赖关系。

二、NPM的安装与配置

  1. 安装Node.js:由于NPM默认随Node.js一起安装,因此首先需要安装Node.js。用户可以从Node.js官网下载安装包并进行安装。
  2. 查看版本:安装完成后,可以通过命令node -v查看Node.js版本,通过命令npm -v查看NPM版本。
  3. 初始化项目:在项目根目录中,使用npm init命令可以初始化一个package.json文件,该文件包含项目的元数据和依赖项信息。
  4. 配置镜像源:为了解决网络速度与可访问性问题,用户可以配置NPM的镜像源。例如,可以使用淘宝的NPM镜像源来加速下载。

三、NPM的使用

  1. 安装包
    • 本地安装:将JS库安装在当前目录下,并生成node_modules文件夹和package-lock.json文件。例如,使用npm install express命令可以安装express模块。
    • 全局安装:将库安装到全局目录下,适合总是被全局加载的公共模块。使用-g选项可以全局安装包。例如,使用npm install -g create-react-app命令可以全局安装create-react-app。
  2. 卸载包
    • 卸载本地包:使用npm uninstall 命令可以卸载本地安装的包。
    • 卸载全局包:使用npm uninstall -g 命令可以卸载全局安装的包。
  3. 更新包
    • 使用npm update命令可以更新项目中的所有包到最新版本。
    • 也可以指定要更新的包,例如使用npm update express命令可以更新express模块。
  4. 查看包
    • 使用npm list命令可以查看当前项目中已安装的所有包。
    • 使用npm list -g --depth=0命令可以查看全局安装的所有包。
  5. 发布包
    • 用户可以将自己编写的包或命令行程序上传到NPM服务器供别人使用。首先需要在NPM上注册一个账号,然后使用npm publish命令发布包。

四、NPM的版本管理
在NPM中,可以使用不同的版本号表示方式来安装特定版本的包:

  1. 指定版本号:例如npm install [email protected],只安装指定版本的包。
  2. 波浪号(~):例如npm install ~3.5.2,安装指定大版本和次要版本的最新包,但不改变大版本号和次要版本号。
  3. 插入号(^):例如npm install ^3.5.2,安装指定大版本的最新包,但不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为和波浪号相同。

五、NPM的其他功能

  1. 定义脚本:在package.json文件中,用户可以定义各种脚本。例如,使用npm run start命令可以运行定义的start脚本。
  2. 配置文件:.npmrc文件用于配置NPM的各种设置,如注册表地址、缓存目录等。用户可以在项目根目录中创建一个.npmrc文件,并添加所需的配置。

综上所述,NPM是一个功能强大的包管理工具,它为用户提供了便捷的方式来安装、管理、更新和发布代码包。通过合理使用NPM,用户可以更有效地管理和维护自己的Node.js项目。

6.2.3 Babel 转换器

Babel是一个广泛使用的JavaScript转码器,它可以将ES6(ECMAScript 2015)及更高版本的代码转换为向后兼容的ES5代码,从而确保代码可以在老版本的浏览器或JavaScript环境中执行。以下是对Babel转换器的详细介绍:

一、Babel的基本功能

  1. 代码转换:Babel的主要功能是将ES6+的代码转换为ES5代码。这包括新的语法结构(如箭头函数、类、模板字符串等)和新的API(如Promise、Symbol等)的转换。
  2. 插件和预设:Babel通过插件和预设(presets)来支持不同的转换需求。预设是一组插件的集合,它们共同实现了对特定ECMAScript版本的支持。
  3. 兼容性:Babel的目标是提供最大的兼容性,使开发者能够使用最新的JavaScript特性,而不必担心现有环境的限制。

二、Babel的安装与配置

  1. 安装Babel:
    • 首先,需要全局或本地安装Babel的核心包@babel/core。这可以通过npm(Node Package Manager)来完成。
    • 例如,使用npm install --save-dev @babel/core命令可以在本地项目中安装Babel核心包。
  2. 配置Babel:
    • Babel的配置文件通常是.babelrc,它位于项目的根目录下。
    • .babelrc文件用于设置转码规则和插件。它的基本格式是一个JSON对象,包含presets和plugins两个字段。
    • 例如,要配置Babel以支持ES6+的转换,可以安装@babel/preset-env预设,并将其添加到.babelrc文件的presets字段中。
  3. 安装其他必要的包:
    • 根据需要,可能还需要安装其他Babel相关的包,如@babel/cli(用于命令行转码)、@babel/polyfill(用于填充不支持的新特性)等。

三、Babel的使用

  1. 命令行转码:
    • 使用@babel/cli提供的命令行工具,可以轻松地将JavaScript文件转换为ES5代码。
    • 例如,使用npx babel src --out-dir lib命令可以将src目录中的所有文件转换为ES5代码,并将结果输出到lib目录中。
  2. 配置文件中使用:
    • 在webpack等构建工具中,可以通过配置Babel loader来使用Babel进行代码转换。
    • 这通常涉及到在构建配置文件中添加相应的Babel loader配置。
  3. 与其他工具集成:
    • Babel可以与许多其他工具和框架集成,如React、Vue等。这些框架通常提供了特定的Babel预设或插件来支持其特定的语法和特性。

四、Babel的工作原理

  1. 解析:Babel首先会将JavaScript代码解析为抽象语法树(AST)。AST是一种树状的数据结构,它表示了代码的语法结构。
  2. 转换:接着,Babel会遍历AST,并根据配置的插件和预设对AST进行转换。转换过程可能包括添加、删除或修改AST节点。
  3. 生成:最后,Babel会将转换后的AST重新生成JavaScript代码。这个过程中会保留原始代码的语义,但语法结构可能已经发生了变化。

五、Babel的常见问题与解决方案

  1. 兼容性问题:由于JavaScript环境的多样性,Babel可能无法在所有环境中都完美工作。为了解决这个问题,可以使用@babel/polyfill来填充不支持的新特性。此外,还可以根据需要配置特定的Babel插件来解决特定的兼容性问题。
  2. 性能问题:Babel的转换过程可能会增加构建时间。为了优化性能,可以尽量减少不必要的转换和插件的使用。此外,还可以使用缓存和其他优化技术来加速构建过程。
    综上所述,Babel是一个功能强大的JavaScript转码器,它可以帮助开发者使用最新的JavaScript特性而不必担心现有环境的限制。通过合理配置和使用Babel,可以大大提高代码的兼容性和可维护性。

6.2.4 Webpack 构建工具

Webpack是一个现代JavaScript应用程序的静态模块打包器(module bundler),以下是关于Webpack构建工具的详细介绍:

一、主要作用
Webpack的主要作用是将多个松散的模块,包括JavaScript、CSS、图片、字体等资源,按照指定的规则和依赖关系打包成一个或多个优化后的静态资源文件,以便在浏览器中高效加载和运行。

二、主要特点

  1. 模块化:Webpack支持多种模块化规范,如CommonJS、AMD、ES6模块化等,可以将不同类型的文件(如JavaScript、CSS、图片等)视作模块。
  2. 加载器(Loader):Webpack通过加载器(Loader)对模块的源代码进行转换,转换成Webpack工具能处理的JavaScript代码。例如,可以使用css-loader和style-loader来处理CSS文件,使用url-loader或file-loader来处理图片资源。
  3. 插件机制:Webpack具有强大的插件机制,可以通过插件扩展其功能,如添加新的模块转换、压缩、打包方式等。
  4. 代码拆分和按需加载:Webpack支持代码拆分和按需加载,可以根据需要动态加载模块,提高页面加载速度。
  5. 优化:Webpack可以对打包后的文件进行各种优化,如压缩、混淆、去除无用代码等,以减小文件体积并提高加载速度。

三、使用步骤

  1. 初始化Node项目:使用npm init -y命令初始化一个Node项目。
  2. 安装Webpack:使用npm install webpack webpack-cli --save-dev命令安装Webpack及其命令行工具。
  3. 创建入口文件:在项目的src目录下创建一个入口文件(如index.js),并在其中编写需要使用的代码,包括引入相应的模块。
  4. 配置Webpack:创建一个webpack.config.js配置文件,用于配置Webpack的各种参数,如入口文件、输出文件、加载器、插件等。
  5. 打包:使用webpack命令或npm run build(如果在package.json中配置了相应的脚本)来打包项目,生成优化后的静态资源文件。

四、配置文件示例
以下是一个简单的webpack.config.js配置文件示例:

const path = require('path');
 
module.exports = {
  mode: 'production', // 设置构建模式为生产模式或开发模式
  entry: './src/index.js', // 入口文件
  output: {
    filename: 'bundle.js', // 输出文件名
    path: path.resolve(__dirname, 'dist') // 输出路径
  },
  module: {
    rules: [
      {
        test: /\.css$/i, // 匹配CSS文件
        use: ['style-loader', 'css-loader'], // 使用style-loader和css-loader处理CSS文件
      },
      {
        test: /\.(png|jpg|gif)$/i, // 匹配图片文件
        use: [
          {
            loader: 'url-loader', // 使用url-loader处理图片文件
            options: {
              limit: 8192, // 图片大小小于8KB时,将其转换为DataURL嵌入到代码中
              name: 'images/[name].[ext]' // 输出文件的路径和文件名格式
            }
          }
        ]
      }
      // 可以添加更多规则来处理其他类型的文件
    ]
  },
  // 可以添加更多配置选项,如插件、解析选项等
};

五、与其他构建工具的比较
与Webpack类似的构建工具还有Gulp和Grunt等。它们都可以自动化执行一系列任务,如文件压缩、代码合并、文件打包、代码转换等。但Webpack主要侧重于模块打包和资源管理,支持代码拆分和按需加载,可以优化页面加载速度。而Gulp和Grunt则更侧重于任务执行和自动化构建,支持实时监控文件变化并自动执行任务。

综上所述,Webpack是一个功能强大的模块打包工具,可以帮助开发者提高项目的加载速度、优化模块的加载顺序、支持不同的模块格式以及压缩模块文件等。通过合理配置和使用Webpack,可以大大提高前端开发的效率和项目的可维护性。

6.3 使用 vue-cli 脚手架开发 Vue 项目

6.3.1 安装 vue-cli 脚手架

安装Vue CLI脚手架需要先确保Node.js和npm(Node Package Manager)已经正确安装在系统上。以下是Vue CLI脚手架的详细安装步骤:

一、安装Node.js和npm

  1. 下载Node.js:
    • 访问Node.js的官方网站(https://nodejs.org/),下载适用于你操作系统的Node.js安装包。
  2. 安装Node.js:
    • 双击下载的安装包,按照提示完成安装。在安装过程中,建议选择自定义安装路径,并确保将Node.js添加到系统的PATH环境变量中。
  3. 验证安装:
    • 打开命令行窗口(在Windows上可以是CMD或PowerShell),输入node -v和npm -v命令,检查Node.js和npm的版本号是否显示。如果显示版本号,则说明安装成功。

二、配置npm(可选)

  1. 创建全局模块和缓存目录:

    • 在Node.js的安装目录下(或你希望存放全局模块的目录),创建两个文件夹:node_global和node_cache。这两个文件夹分别用于存放npm的全局模块和缓存文件。
  2. 配置npm:

    • 打开命令行窗口,输入以下命令来配置npm的全局模块路径和缓存路径:
    npm config set prefix "你的node_global文件夹路径"
    npm config set cache "你的node_cache文件夹路径"
    
    • 替换命令中的路径为你实际创建的node_global和node_cache文件夹的路径。
  3. 配置环境变量:

    • 在系统的环境变量中,添加一个新的系统变量NODE_PATH,其值为node_global文件夹的路径(到node_modules的上一级目录)。
    • 在用户的PATH环境变量中,添加node_global文件夹的路径(确保npm的全局模块可以在命令行中直接运行)。

三、安装Vue CLI

  1. 安装cnpm(可选,但推荐):

    • 由于npm在国内的下载速度可能较慢,可以使用淘宝的npm镜像源(cnpm)来加速下载。打开命令行窗口,输入以下命令来安装cnpm:
    npm install -g cnpm --registry=https://registry.npmmirror.com
    
    • 安装完成后,可以使用cnpm命令来代替npm命令进行包管理。
  2. 安装Vue CLI:

    • 打开命令行窗口,输入以下命令来全局安装Vue CLI:
    cnpm install -g @vue/cli
    
    • 或者,如果你使用的是npm,可以输入:
    npm install -g @vue/cli
    
  3. 验证安装:

    • 安装完成后,输入vue --version或vue -V命令来检查Vue CLI的版本号。如果显示版本号,则说明安装成功。

四、创建Vue项目

  1. 创建新项目:

    • 打开命令行窗口,输入以下命令来创建一个新的Vue项目:
    vue create "你的项目名称"
    
    • 替换命令中的你的项目名称为你希望创建的项目名称。注意,项目名称不能包含大写字母、空格或特殊字符。
  2. 选择配置:

    • 在创建项目的过程中,Vue CLI会提示你选择一些配置选项,如是否使用路由、是否使用Vuex、是否使用ESLint等。根据你的需求进行选择。
  3. 进入项目目录并运行:

    • 创建完成后,进入项目目录:
    cd "你的项目名称"
    
    • 运行项目:
    npm run serve
    
    • 默认情况下,项目会在本地的8080端口上运行。你可以在浏览器中打开http://localhost:8080/来查看项目。

按照以上步骤,你就可以成功安装Vue CLI脚手架并创建一个新的Vue项目了。

6.3.2 创建项目

创建Vue项目通常使用Vue CLI(命令行界面)工具,它提供了一种快速启动Vue.js项目的方法。以下是如何使用Vue CLI创建Vue项目的详细步骤:

一、确保Vue CLI已安装
首先,你需要确保Vue CLI已经全局安装在你的计算机上。你可以通过运行以下命令来检查:

vue --version

如果Vue CLI没有安装,你需要先全局安装它。你可以使用npm(Node Package Manager)或yarn来安装:

npm install -g @vue/cli
# 或者使用yarn
yarn global add @vue/cli

二、创建新项目
一旦Vue CLI安装完毕,你可以使用vue create命令来创建一个新项目。在命令行中运行以下命令:

vue create my-vue-project

将my-vue-project替换为你想要的项目名称。Vue CLI会提示你进行一些配置选择,如预设、手动选择特性、是否使用Babel、TypeScript等。

三、配置选择

  1. 选择默认预设(Presets):
    • Vue CLI提供了几个预设选项,如默认(Vue 2)、默认(Vue 3)等。如果你选择默认预设,Vue CLI将使用预定义的配置来创建项目。
  2. 手动选择特性(Manually select features):
    • 如果你想要更精细地控制项目配置,可以选择手动选择特性。Vue CLI将列出一系列可选择的特性,如Babel、TypeScript、Router(Vue Router)、Vuex、CSS Pre-processors(CSS预处理器)、Linter / Formatter(代码检查/格式化工具)等。
  3. 配置细节:
    • 对于每个选择的特性,Vue CLI可能会要求你提供更多配置细节。例如,如果你选择了Router,它可能会询问你是否使用历史模式(history mode)。

四、等待项目生成
Vue CLI会根据你的选择生成项目文件。这可能需要一些时间,具体取决于你的计算机性能和选择的特性数量。

五、进入项目目录
一旦项目生成完毕,你可以使用cd命令进入项目目录:

cd my-vue-project

六、运行开发服务器
在项目目录中,你可以运行以下命令来启动开发服务器:

npm run serve
# 或者使用yarn
yarn serve

开发服务器将启动,并在本地的某个端口(通常是8080)上运行你的Vue项目。你可以在浏览器中打开http://localhost:8080来查看项目。

七、开始开发
现在,你可以开始在你的Vue项目中进行开发了。Vue CLI提供了热重载(hot-reload)功能,这意味着当你修改代码时,浏览器将自动刷新以显示更改。

八、构建生产版本
当你准备好将项目部署到生产环境时,你可以使用以下命令来构建生产版本:

npm run build
# 或者使用yarn
yarn build

这将生成一个优化后的构建,通常位于dist目录中,你可以将其部署到你的服务器上。

按照这些步骤,你就可以成功地创建一个Vue项目并开始开发了。

6.3.3 运行项目

运行Vue项目通常涉及启动一个开发服务器,以便你可以在本地查看和测试你的应用。以下是运行Vue项目的步骤,假设你已经使用Vue CLI创建了一个项目,并且已经导航到了项目的根目录:

步骤 1: 导航到项目目录
首先,你需要打开命令行界面(在Windows上可以是CMD、PowerShell或Git Bash,在macOS或Linux上通常是Terminal),并使用cd命令导航到你的Vue项目的根目录。

cd path/to/your/vue-project

将path/to/your/vue-project替换为你的Vue项目实际所在的路径。

步骤 2: 安装依赖(如果尚未安装)
如果你刚刚从版本控制系统(如Git)中克隆了项目,或者从某个地方下载了项目的源代码,你可能需要先安装项目依赖。这通常可以通过运行以下命令来完成:

npm install
# 或者使用yarn
yarn install

这些命令会读取package.json文件,并安装该文件中列出的所有依赖。

步骤 3: 启动开发服务器
一旦依赖安装完毕,你可以通过运行以下命令来启动开发服务器:

npm run serve
# 或者使用yarn
yarn serve

这些命令会启动Vue CLI提供的开发服务器,它通常会监听本地的某个端口(默认是8080),并在该端口上提供你的Vue应用。

步骤 4: 查看应用
开发服务器启动后,你应该会在命令行界面中看到一些输出信息,包括服务器正在监听的端口号。通常,这些信息会包含一个URL,如http://localhost:8080。

打开你的网络浏览器,并在地址栏中输入这个URL。你应该能够看到你的Vue应用在浏览器中运行。

步骤 5: 进行开发
现在,你可以开始在你的Vue项目中进行开发了。由于开发服务器提供了热重载(hot-reload)功能,所以当你修改代码并保存文件时,浏览器将自动刷新以显示最新的更改。

注意事项

  • 确保你的命令行界面在运行npm run serve或yarn serve命令时保持打开状态,因为关闭它会停止开发服务器。
  • 如果你更改了项目的默认端口(例如,在vue.config.js文件中),请确保在浏览器中访问正确的端口号。
  • 如果你在开发过程中遇到任何问题,可以检查命令行界面中的输出信息,以获取有关错误或警告的详细信息。这些信息通常可以帮助你诊断问题所在。

6.4 单文件组件

6.4.1 什么是单文件组件

单文件组件(Single File Components,简称SFC)是Vue.js框架中一种组织和管理代码的方式。以下是对单文件组件的详细解释:

一、定义与结构

  1. 定义:单文件组件是指将一个组件的模板(Template)、脚本(Script)和样式(Style)都整合在一个.vue后缀的文件中。
  2. 结构
    • 模板(Template):定义了组件的HTML结构,用于展示组件的内容。
    • 脚本(Script):包含了组件的逻辑代码,实现了组件的功能和交互。
    • 样式(Style):定义了组件的CSS样式,用于美化组件的外观。

二、特点与优势

  1. 模块化:单文件组件使得每个组件都成为一个独立的模块,提高了代码的可读性和可维护性。
  2. 组件化开发:符合Vue.js的组件化开发理念,能够更好地实现UI组件的复用和封装,提高开发效率。
  3. 作用域封装:在单文件组件中,样式和脚本可以被模块化,通过CSS预处理器(如Sass、Less)编写样式,通过ES6模块化规范编写脚本,避免全局变量污染和样式冲突。
  4. 热重载:Vue CLI提供了开发服务器和热重载功能,使得在修改单文件组件时,浏览器可以自动刷新,实时显示修改后的效果,极大地提高了开发效率。
  5. 代码提示:许多现代的代码编辑器(如VSCode)对Vue的单文件组件有着很好的支持,提供了代码高亮、自动补全、错误检查等功能,帮助开发者更快速地编写代码。

三、使用示例
以下是一个简单的Vue单文件组件示例:

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
  </div>
</template>
 
<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  }
}
</script>
 
<style scoped>
h1 {
  color: blue;
}
</style>

在这个示例中,我们定义了一个名为HelloWorld的组件,它接受一个msg属性并在<h1>标签中展示。scoped属性可以确保样式只作用于当前组件内部,避免全局样式污染。

四、应用场景
单文件组件非常适合用于构建复杂的Vue.js应用。通过将应用拆分成多个独立的组件,开发者可以更加高效地管理和维护代码。同时,单文件组件还支持多种高级特性,如插槽(Slot)、混入(Mixin)、自定义指令等,进一步提高了开发的灵活性和可维护性。

综上所述,单文件组件是Vue.js框架中一种非常重要的组件编写方式。它通过将模板、脚本和样式整合在一个文件中,提供了一种模块化、可维护性高的开发方式。使用单文件组件可以提升开发效率、减少样式冲突、支持热重载、并且易于测试。

6.4.2 开发单文件组件

开发单文件组件(Single File Components,SFC)是Vue.js框架中的一种标准做法,它允许开发者将组件的模板(Template)、脚本(Script)和样式(Style)都整合在一个.vue文件中。这种方式使得组件更加模块化、易于维护和管理。以下是如何开发单文件组件的步骤:

1. 创建.vue文件
首先,你需要在你的Vue项目中创建一个新的.vue文件。这个文件将包含你的组件的所有代码。

2. 编写模板(Template)
在.vue文件的标签内,你将编写组件的HTML结构。这是用户将在页面上看到的部分。

<template>
  <div class="my-component">
    <h1>{{ title }}</h1>
    <button @click="handleClick">Click Me</button>
  </div>
</template>

3. 编写脚本(Script)
<script>标签内,你将编写组件的JavaScript逻辑。这包括数据属性、计算属性、方法、生命周期钩子等。

<script>
export default {
  name: 'MyComponent',
  data() {
    return {
      title: 'Hello, Vue!'
    };
  },
  methods: {
    handleClick() {
      alert('Button clicked!');
    }
  }
};
</script>

4. 编写样式(Style)
<style>标签内,你可以为组件编写CSS样式。使用scoped属性可以确保样式只作用于当前组件。

<style scoped>
.my-component {
  border: 1px solid #ccc;
  padding: 10px;
}
 
button {
  background-color: #42b983;
  color: white;
  border: none;
  padding: 5px 10px;
  cursor: pointer;
}
</style>

5. 注册和使用组件
完成单文件组件的开发后,你需要在Vue实例或另一个组件中注册并使用它。

// 在另一个组件或Vue实例中
<template>
  <div id="app">
    <MyComponent />
  </div>
</template>
 
<script>
import MyComponent from './path/to/MyComponent.vue';
 
export default {
  name: 'App',
  components: {
    MyComponent
  }
};
</script>

6. 使用Vue CLI进行开发
如果你使用的是Vue CLI创建的项目,你可以享受到热重载、代码提示、错误检查等开发时功能。这些功能将大大提高你的开发效率。

7. 测试和调试
在开发过程中,不断测试和调试你的组件是非常重要的。你可以使用浏览器的开发者工具来检查DOM、CSS和JavaScript。此外,你还可以编写单元测试来确保你的组件按预期工作。

8. 优化和重构
随着你的项目变得越来越大,你可能需要对你的组件进行优化和重构。这包括拆分大型组件、提取公共逻辑到混入或Vuex中、使用异步组件等。

通过以上步骤,你可以成功地开发一个单文件组件,并将其集成到你的Vue应用中。单文件组件是Vue.js框架的核心特性之一,它使得组件化开发变得更加容易和高效。

6.5 vue-cli 脚手架使用 Axios 库

6.5.1 安装 Axios 库

要在Vue项目中安装Axios库,你可以按照以下步骤进行操作:

一、使用npm或yarn安装Axios

  1. 打开命令行界面:
    • 在Windows上,你可以使用CMD、PowerShell或Git Bash。
    • 在macOS或Linux上,你可以使用Terminal。
  2. 导航到Vue项目根目录:
    使用cd命令导航到你的Vue项目的根目录。例如:
cd path/to/your/vue-project

将path/to/your/vue-project替换为你的Vue项目实际所在的路径。

  1. 运行安装命令:

    • 使用npm安装Axios:
    npm install axios --save
    

    这将会把Axios添加到你的项目依赖中,并且可以在任何需要的地方使用它。–save参数会将Axios添加到package.json文件的dependencies列表中。

    • 或者,如果你使用的是yarn,可以运行:
    yarn add axios
    

二、在Vue项目中引入Axios

  1. 在需要使用Axios的组件中引入:
    你可以在任何需要发送HTTP请求的Vue组件中通过import语句引入Axios。例如:
import axios from 'axios';
  1. 全局引入(可选):
    如果你希望在整个Vue项目中都可以方便地使用Axios,你可以将其挂载到Vue的原型上。在项目的入口文件(通常是main.js或app.js)中,添加以下代码:
import Vue from 'vue';
import axios from 'axios';
 
Vue.prototype.$axios = axios;

这样,你就可以在任何Vue组件的methods、computed或created等选项中通过this.$axios来访问Axios了。

三、配置Axios(可选)
在项目的不同阶段,你可能需要配置Axios,比如设置基础URL、超时时间、请求头等。这些配置可以在main.js或一个单独的配置文件中完成。例如:

axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.timeout = 10000;
axios.defaults.headers.common['Authorization'] = 'Bearer token';

你也可以创建一个Axios实例来进行个性化配置:

const instance = axios.create({
  baseURL: 'https://api.example.com',
  timeout: 10000,
  headers: {'Authorization': 'Bearer token'}
});
export default instance;

然后在你的组件中导入这个实例并使用它。

四、使用Axios发送HTTP请求
Axios支持多种HTTP请求方法,如GET、POST、PUT、DELETE等。以下是一些基本的使用示例:

  • GET请求:

    axios.get('/user?ID=12345')
      .then(response => {
      console.log(response.data);
      })
      .catch(error => {
        console.error(error);
      });
    
    • POST请求:
    axios.post('/user', {
      firstName: 'Fred',
      lastName: 'Flintstone'
    })
    .then(response => {
      console.log(response.data);
    })
    .catch(error => {
      console.error(error);
    });
    
    • 并发请求:
    function getUserAccount() {
      return axios.get('/user/12345');
    }
    function getUserPermissions() {
     return axios.get('/user/12345/permissions');
    }
    axios.all([getUserAccount(), getUserPermissions()])
     .then(axios.spread((acct, perms) => {
       console.log(acct.data);
       console.log(perms.data);
     }));
    

通过以上步骤,你已经成功在Vue项目中安装并配置了Axios库,并且学会了如何在组件中使用它发送HTTP请求。

6.5.2 使用 Axios 库

使用Axios库进行HTTP请求是前端开发中常见的任务。Axios是一个基于Promise的HTTP客户端,用于浏览器和node.js。它使得发送异步HTTP请求变得简单,并且提供了许多有用的功能,如请求和响应的拦截器、自动转换JSON数据等。

以下是如何在Vue组件中使用Axios库的一些步骤和示例:

1. 安装Axios
如果你还没有安装Axios,你需要先在你的项目中安装它。这通常是通过npm或yarn完成的:

npm install axios
# 或者
yarn add axios

2. 在Vue组件中引入Axios
在你的Vue组件中,你需要通过import语句引入Axios:

<script>
import axios from 'axios';
 
export default {
  name: 'MyComponent',
  // ...其他选项
};
</script>

3. 发送HTTP请求
你可以在Vue组件的methods中定义发送HTTP请求的函数。例如,以下是一个发送GET请求的示例:

<script>
import axios from 'axios';
 
export default {
  name: 'MyComponent',
  data() {
    return {
      users: []
    };
  },
  methods: {
    fetchUsers() {
      axios.get('https://api.example.com/users')
        .then(response => {
          // 处理成功的响应
          this.users = response.data;
        })
        .catch(error => {
          // 处理错误
          console.error('There was an error!', error);
        });
    }
  },
  created() {
    // 在组件创建时调用fetchUsers方法
    this.fetchUsers();
  }
};
</script>

在这个示例中,fetchUsers方法发送一个GET请求到https://api.example.com/users,并在请求成功时将响应的数据赋值给组件的users数据属性。如果请求失败,它会在控制台中打印错误信息。

4. 使用Axios实例(可选)
如果你需要配置多个Axios实例,或者想要为特定的请求设置不同的配置(如基础URL、超时时间等),你可以创建一个Axios实例:

// 在一个单独的文件中创建Axios实例
import axios from 'axios';
 
const apiClient = axios.create({
  baseURL: 'https://api.example.com',
  timeout: 1000,
  headers: {'X-Custom-Header': 'foobar'}
});
 
export default apiClient;

然后在你的Vue组件中引入并使用这个实例:

<script>
import apiClient from './path/to/apiClient'; // 引入你创建的Axios实例
 
export default {
  name: 'MyComponent',
  data() {
    return {
      users: []
    };
  },
  methods: {
    fetchUsers() {
      apiClient.get('/users')
        .then(response => {
          this.users = response.data;
        })
        .catch(error => {
          console.error('There was an error!', error);
        });
    }
  },
  created() {
    this.fetchUsers();
  }
};
</script>

5. 处理响应和错误
在上面的示例中,我们已经展示了如何处理成功的响应和错误。在实际应用中,你可能需要更详细地处理这些情况,比如显示用户友好的错误消息、重试失败的请求等。

6. 使用拦截器(可选)
Axios提供了请求和响应拦截器,允许你在请求或响应被处理之前拦截它们。这可以用于添加认证令牌、处理全局错误等。

7. 取消请求(可选)
Axios还支持取消请求。你可以使用CancelToken来取消一个请求。

;