Vue2工程化

作者: JunChow520 | 来源:发表于2018-05-22 14:38 被阅读87次

目的:建立开发、测试、部署的自动化环境

脚手架 vue-cli

vue-cli 的存在将项目环境的初始化工作和复杂度降到了最低

# 更新NPM
$ npm i npm -g

# 安装Vue-cli
$ npm i vue-cli -g

指令解析

  • 用法:vue <命令> [选项]
  • 命令:
    • init 从指定模板中生成新项目
    • list 罗列出所有可用的官方模板
    • help [cmd] 显示命令的帮助文档
  • 选项
    • -h,--help 输出用法信息
    • --V,--version 输出版本号

官方模板

$ vue list
  
Available official templates:

  ★  browserify - 拥有高级的Browserify+vueify,用于高级开发。
  ★  browserify-simple - 拥有基础功能的Browserify+vueify,用于快速原型开发。
  ★  pwa - PWA template for vue-cli based on the webpack template
  ★  simple - 用于单页应用开发的最小配置
  ★  webpack - 拥有高级功能的webpack+vue-loader,用于正式开发。
  ★  webpack-simple - 拥有基础功能的webpack + vue-loader,用于快速原型开发。

创建项目

$ vue init webpack projectName

深入工程模板

webpack-simple 模板

webpack-simple 仅配置了 BabelVue 编译器,src 目录存放 Vue 代码源程序,五个模板构建出来的src目录都是一样的。只是在 webpack 模板中多了 components 目录,用于存放共用组件。目录结构和文件的组织应在开发前就进行约定。

规范约定

  • 公共组件components、指令directives、过滤器filters将分别存放于src目录下
  • 以使用场景命名Vue的页面文件
  • 当页面文件具有私有组件、指令、过滤器时,建立与页面同名的目录,页面文件更名为index.vue,将页面与相关的依赖文件放在一起。
  • 目录由全小写的名次、动名词、分词命名,两个以上次组成以-分割。
  • Vue文件统一以大驼峰命名,仅入口文件index.vue采用小写。
  • 测试文件一律以测试目标文件名.spec.js命名
  • 资源文件一律以小写字符命名,两个以上的词组成以-分割。
约定 项目目录

webpack 模板

根目录
  • build 存放用于编译用的webpack配置和相关辅助工具代码
  • config 存放三大环境配置文件,用于设定环境变量和必要的路径信息。
  • test 存放E2E测试与单元测试文件以及相关的配置文件
  • static 存放项目所需要的其他静态资源文件
  • dist 存放运行npm run build指令后的生产环境输出文件,可直接部署到服务器对应的静态资源目录内,该文件夹只有在运行build之后才会生效。

构建工具

开发、测试、生产三大运行环境都需要进行构建,针对不同环境要求,配置不同。

编译开发环境

# 在开发环境下加载运行Vue项目
$ cd projectName
$ npm run dev

该指令的配置是在package.jsonscript属性中设置的,实质是由npm来引导执行入口程序dev-server.js完成加载过程。

{
  "scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
  },
}
加载过程
  1. 加载环境变量
    config目录加载index.jsdev.env.js模块,准备开发调试环境所必须的目录和全局变量。
加载环境变量
  1. 合并webpack配置

build 目录下有三个 webpack 的配置文件

webpack配置文件
  • webpack.base.conf.js 公用基本webpack配置
  • webpack.dev.conf.js 开发环境专用的webpack配置
  • webpack.prod.conf.js 生产环境专用webpack配置

使用webpack-merge的包来进行两个webpack配置之间的合并,此环境是通过将这个包将webpack.base.conf.jswebpack.dev.conf.js合并成最终的webpack配置。

  1. 配置热加载

热加载启动后当开发环境被启动并进入调试模式后,一旦修改任何源代码,浏览器中对应内容会被自动刷新,而无需手工对浏览器进行刷新。

上阶段合并的webpack配置也是通过此环境被动态加载的,当代码文件发生变化,热加载就会启动webpack进行重新编译,然后将最新的编译文件重新加载到浏览器中。

  1. 配置代理服务器

为代码增加一个模拟的服务端,可在无后盾程序支持时,直接模拟远程服务器执行请求的效果。

  1. 配置静态资源

将图片、字体、样式表、编译后的JS脚本等,生成对应的印记(Footprint)并存放到由开发服务器托管的static虚目录中,使得浏览器正常访问这些资源。每个生成的文件印记是一些哈希代码,当文件内容发生变化时,哈希代码会发生改变。使用印记是将静态文件发布到CDN或进行离线缓冲时通知浏览器文件是否发生改变的重要依据。

  1. 加载开发服务器

启动一个Express的Web服务器,将各个环境中配置好的模块进行加载,并程序能通过浏览器进行访问。

编译生产环境

$ npm run build

生产环境的构建,首先对必要资源文件进行打包加上印记,然后对脚本进行编译、压缩、包大小分割。

工程配置

webpack是一个模块打包的工具,作用是把相互依赖的模块处理成静态资源。

webpack模块打包

webpack的目标是

  • 将依赖树按需分割
  • 将初始加载时间控制在较低水平
  • 每个静态资源都应成为一个模块
  • 将第三方库继承到项目中形成一个模块
  • 定制模块打包器的每个部分
  • 适用于大型项目

webpack的特点

  • 代码分割

在webpack的依赖树中有2中类型的依赖:同步依赖、异步依赖。异步依赖会成为一个代码分割点,并组成新代码块。在代码块组成的树被优化之后,每个代码块都会保存在一个单独的文件中。

  • 加载器

webpack 原生只能处理js,加载器的作用是把其他代码转换成js代码,如此一来所有种类的代码都能组成一个模块。也就是说,在代码内可通过import将webpack打包的资源以模块的方式引入到程序中。

vue中常用加载器,以NPM库形式提供。

  • vue-loader 加载与编译*.vue文件

  • vue-style-loader 加载*.vue文件中的样式

  • style-loader 将样式插入到页面的<style>标签内

  • css-loader 加载*.css样式表文件

  • less-loader 加载与编译*.less文件

  • babel-loader 将ES6编译成浏览器兼容的ES5

  • file-loader 直接加载文件

  • url-loader 加载URL指定的文件,多用于字体和图片的加载。

  • json-loader 加载*.json文件为JS实例

  • 智能解析

webpack智能解析器能处理第三方库,允许依赖中出现表达式。

require("./components/"+name+".vue")
  • 插件系统

基本用法

webpack 打包依赖配置文件webpack.config.js,此配置文件可以指定所有在源代码编译过程中的工作。

  • 样式表的引用

希望某些页面或组件在应用时才自动加载特定的样式

import Vue from 'vue'
//引用指定的样式源文件
import './app/assets/less/dark.less'
export default {

}

在 webpack 的配置中加入 less-loader,webpack在打包是会自动将less转换为CSS,并将CSS动态代码生成到JS文件中。当Vue组件被加载到页面并实例化后,将在DOM内插入此特定行内样式<style>以实现动态样式的应用。

对于*.css同样是适用,如导入第三方库中必需的样式表。

import 'uikit/dist/css/components/tabs.css'
  • 字体的引用

以前在样式表中先定义好字体样式并指定加载位置,然后页面引用样式表。使用webpack后,在配置文件内加入一个url-loader。

{
  test:/\.(woff2?|eot|ttf|otf)(\?,*)/,
  loader:'url'
}
  • 使用别名取代路径引用

  • 配置多入口程序

前后台需要多个与main.js类似的程序入口

#build/webpack.base.conf.js
module.exports = {
  entry:{
    app:'./src/main.js',
    admin:'./src/admin.js'
  }
}

vue-cli的webpack模板使用HtmlWebpackPlugin插件,生成HTML入口页面并自动将生成后的JS文件和CSS文件的引用地址写入到页面内人<script>标签中。这就需要在build/webpack.dev.config.js文件内的plugins配置项内多配置一个HtmlWebpackPlugin插件,用于生成admin.html入口页。

# build/webpack.dev.config.js
plugins:[
  
]

相关文章

  • Vue2工程化

    目的:建立开发、测试、部署的自动化环境 脚手架 vue-cli vue-cli 的存在将项目环境的初始化工作和复杂...

  • 前端工程化 —— 概述及脚手架工具

    目录 工程化概述工程化主要解决的问题工程化的表现工程化 != 某个工具一些成熟的工程化集成 脚手架工具脚手架的本质...

  • 4. vue3 项目实践

    1. vue2 中的 data 2. vue2 methods 3. vue2 中的 router 4. vue2...

  • 前端工程化探索——editorconfig

    title: 前端工程化探索——editorconfigcategory: Webtag: [前端工程化]date...

  • 《前端工程化开发一》

    10分钟学会前端工程化(webpack4.0) 目录 一、概要 1.1、前端工程化 1.1.1、前端工程化的任务 ...

  • Vue2实践揭秘.epub

    【下载地址】 《Vue2实践揭秘》以Vue2的实践应用为根基,从实际示例入手,详细讲解Vue2的基础理论应用及高级...

  • Vue3相对Vue2的源码环境搭建的不同

    Vue2于Vue3的对比 Vue2所有的属性都放在this对象上,对TypeScript支持不友好 Vue2大量的...

  • 前端工程化探索——Babel补遗

    title: 前端工程化探索——Babel补遗category: Webtag: [前端工程化,Babel]dat...

  • 2019-07-04

    对前端工程化的理解 目录 前端-GUI 软件 构建工程化的几个阶段 工程化需要考虑的几大因素 一.GUI软件 现如...

  • vue3静态标记

    vue2与vue3都有静态标记区别在于vue2只能标记全量的静态比如 {{name}} 在vue2中 只要有某一...

网友评论

本文标题:Vue2工程化

本文链接:https://www.haomeiwen.com/subject/anuhjftx.html