Vue 2.0 开发流程 (全)

作者: 小贤笔记 | 来源:发表于2018-08-25 20:00 被阅读126次

    该文章用 vue2.0 全家桶详细的介绍了一个项目的整个流程
    新手可以跟着做一遍
    有不对的地方请指出, 谢谢
    本项目以 饿了么APP 为例

    更多技术文章请关注微博:

    推荐阅读

    课程介绍

    实战流程

    线上生产环境

    技术分析

    课程安排

    学习目标

    学习内容

    Vue.js 简介












    Vue-cli

    安装 (必须先安装node.js 4+以上版本)

    • 安装好node后输入 node -v 可查看版本

    • npm install -g vue-cli 安装本地包,"-g"代表全局

    • vue 介绍vue用法

    • vue list 显示可用的模板

    • vue init webpack elm 插入一个工程

      • "init" 这个命令用于创建一个 package.json
      • 选择上面列表中的 webpack 方式
      • "elm" 只是起的一个名字
    • ? Project name (sell) 是否确认使用该名字? (确定按enter,否按N)按回车键

    • ? Project descripton (A Vue.js project) 随意输入一段简短介绍,用英文,输入:sell app,按回车键

    • Author 将作者添加到package.json里面(确定按enter,否按N)按回车键

    • > Runtime + Compiler: recommended for most users Runtime-only: about 6KB lighter min+gzip, but templates (or any Vue-specificHTML) are ONLY allowed in .vue files - render functions are required elsewhere

      • Vue公司的建立(使用箭头键)>运行时+编译器:大多数用户推荐运行时间:约6kb轻民+ gzip,但模板(或任何Vue具体HTML)只允许在。VUE文件渲染功能是必需的其他地方。(按enter)
    • Install vue-router? (Y/n) 安装的路由?(可安可不安,以后也可以再安,根据需求选择)(选y)

    • Use ESLint to lint your code? (Y/n)使用ESlint语法?(Y/ N)(使用ESLint语法可以规范es6格式,但要做好心理准备,除非你非常懂ESLint语法,要不就会处处报错,建议N)
      想挑战eslint的同学可参考ESLint 配置与删除

    • standard……使用ESLint的哪个模板,默认就可,直接回车

    • Setup unit tests with Karma + Mocha? (Y/n))设置单元测试?(Y / N)(选N)

    • etup e2e tests with Nightwatch? (Y/n)Nightwatch建立端到端的测试?(Y / N)(选N)

    • Should we run......选中默认: Yes, use NPM,回车键

    • To get started:可以按照下面的步骤来

      • cd elm 进入elm文件夹
      • npm run dev 启动项目
    • dir 查看当前文件夹目录

      • node_modus 安装模块
    • npm run dev 启动项目

    • 打开浏览器,输入地址localhost:8080,会弹出一个Vue的界面

    项目文件介绍

    • build webpack配置相关

    • config webpack配置相关

    • node_modules npm install安装的依赖代码库

    • src 存放项目源码

      • components 存放小组件
      • App.vue 整个vue的一个大组件
    • static 存放第三方静态资源

      • .gitkeep作用:当这个目录为空也可以把这个目录提交到git代码仓库里
    • babelrc babel的配置,因为有的浏览器不支持es6语法,所以利用babel把es6编译成es5

    • .editorconfig 编辑器的配置 (推荐缩进为4 indent_size = 4)

    • .eslintignore 忽略语法检查的目录文件

    • .eslintrc.js esint的配置文件

    module.exports = {
      //此项是用来告诉eslint找当前配置文件不能往父级查找
      root: true, 
      //此项是用来指定eslint解析器的,解析器必须符合规则,babel-eslint解析器是对babel解析器的包装使其与ESLint解析
      parser: 'babel-eslint',
      //此项是用来指定javaScript语言类型和风格,sourceType用来指定js导入的方式,默认是script,此处设置为module,指某块导入方式
      parserOptions: {
        sourceType: 'module'
      },
      //此项指定环境的全局变量,下面的配置指定为浏览器环境
      env: {
        browser: true,
      },
      // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style
      // 此项是用来配置标准的js风格,就是说写代码的时候要规范的写,如果你使用vs-code我觉得应该可以避免出错
      extends: 'standard',
      // required to lint *.vue files
      // 此项是用来提供插件的,插件名称省略了eslint-plugin-,下面这个配置是用来规范html的
      plugins: [
        'html'
      ],
      // add your custom rules here
      // 下面这些rules是用来设置从插件来的规范代码的规则,使用必须去掉前缀eslint-plugin-
      // 主要有如下的设置规则,可以设置字符串也可以设置数字,两者效果一致
      // "off" -> 0 关闭规则
      // "warn" -> 1 开启警告规则
      //"error" -> 2 开启错误规则
      // 了解了上面这些,下面这些代码相信也看的明白了
      rules: {
        // allow async-await
        'generator-star-spacing': 'off',
        // allow debugger during development
        'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
        // js语句结尾必须使用分号
        'semi': ['off', 'always'],
        // 三等号
        'eqeqeq': 0,
        // 强制在注释中 // 或 /* 使用一致的空格
        'spaced-comment': 0,
        // 关键字后面使用一致的空格
        'keyword-spacing': 0,
        // 强制在 function的左括号之前使用一致的空格
        'space-before-function-paren': 0,
        // 引号类型
        "quotes": [0, "single"],
        // 禁止出现未使用过的变量
        // 'no-unused-vars': 0,
        // 要求或禁止末尾逗号
        'comma-dangle': 0
      }
    }
    
    • .gitignore 忽略里面的目录,不会提交

    • .postcssrc.js 用到css前后处理器的配置

    • index.html 入口文件,就是首页

    • package-lock.json 是npm 5 做的一个优化,加快了npm 下载的速度。条件就是将依赖的详细信息,包括版本、下载地址等,都写在了里面。然后想要更新版本的话,就不能够去通过修改package 里面的版本依赖来实现了,只能通过npm install packageName@version 来实现。

    • package.json 项目配置文件

    { 
     "name": "vue-manage", // 项目名称 
     "version": "1.0.0", // 版本  
     "description": "Reimbursement Manage", // 描述  
     "author": "LXG", // 作者  
     "private": true, //是否私人项目  
     "scripts": { 
      "dev": "node build/dev-server.js", // npm run dev 的 dev,使用node执行 build/dev-server.js 
      "start": "node build/dev-server.js", // npm run start 跑的是同样的命令 
      "build": "node build/build.js", // npm run build 跑的是 node build/build.js // 以下脚本为单元测试用到的脚本 
      // 以下脚本为单元测试用到的脚本 
      "unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run", 
      "e2e": "node test/e2e/runner.js", 
      "test": "npm run unit && npm run e2e"
     }, 
     "dependencies": { // dependencies 设定的是项目里使用的依赖 版本前面的 "^" 表示可以安装该版本以上的版本
      "vue": "^2.2.6", 
      "vue-router": "^2.3.1", 
      "element-ui": "1.3.1", 
      "vue-datasource": "1.0.9", 
      "axios": "^0.15.3", 
      "vue-core-image-upload": "2.1.5", 
      "mockjs": "^1.0.1-beta3", 
      "babel-polyfill": "^6.23.0"
     }, 
     "devDependencies": { //devDependencies设定的是开发使用的依赖  
      "autoprefixer": "^6.7.2", // 是用于给css3属性自动加属性前缀的 
      "babel-core": "^6.22.1", // babel相关的都是用于处理es6语法的 
      "babel-loader": "^6.2.10", 
      "babel-plugin-transform-runtime": "^6.22.0", 
      "babel-preset-env": "^1.3.2", 
      "babel-preset-stage-2": "^6.22.0", 
      "babel-register": "^6.22.0", 
      "chalk": "^1.1.3", // chalk适用于格式化输出命令行信息的,比如run dev以后的start...  
      "connect-history-api-fallback": "^1.3.0", 
      "copy-webpack-plugin": "^4.0.1", 
      "css-loader": "^0.28.0", // 所有的*-loader都是 webpack的扩展,webpack是把各种资源理解为一个模块,css-loader就是读取css模块的加载器 
      "eslint": "^3.19.0", // eslint 相关是代码格式化检查工具,开启以后要严格遵照它规定的格式进行开发 (我一般把它关了,为了显示特意加上的) 
      "eventsource-polyfill": "^0.9.6", 
      "express": "^4.14.1", // express 用于启动 node http server的服务  
      "extract-text-webpack-plugin": "^2.0.0", 
      "file-loader": "^0.11.1", 
      "friendly-errors-webpack-plugin": "^1.1.3", 
      "html-webpack-plugin": "^2.28.0", // webpack 里载入和处理html的插件 
      "http-proxy-middleware": "^0.17.3", // node server 的中间件工具 
      "webpack-bundle-analyzer": "^2.2.1", 
      "cross-env": "^4.0.0", // 设定环境变量的工具,NODE_ENV变量跟它有关 
      "karma": "^1.4.1",  // karma相关的都是单元测试工具 
      "karma-coverage": "^1.1.1", 
      "karma-mocha": "^1.3.0", 
      "karma-phantomjs-launcher": "^1.0.2", 
      "karma-phantomjs-shim": "^1.4.0", 
      "karma-sinon-chai": "^1.3.1", 
      "karma-sourcemap-loader": "^0.3.7", 
      "karma-spec-reporter": "0.0.30", 
      "karma-webpack": "^2.0.2", 
      "lolex": "^1.5.2", 
      "mocha": "^3.2.0", 
      "chai": "^3.5.0", 
      "sinon": "^2.1.0", 
      "sinon-chai": "^2.8.0", 
      "inject-loader": "^3.0.0", 
      "babel-plugin-istanbul": "^4.1.1", 
      "phantomjs-prebuilt": "^2.1.14", 
      "chromedriver": "^2.27.2", 
      "cross-spawn": "^5.0.1", 
      "nightwatch": "^0.9.12", 
      "selenium-server": "^3.0.1", // 一个版本检查工具  
      "semver": "^5.3.0", // selljs是在node里跑shell命令的工具,比如‘rm -rf'  
      "shelljs": "^0.7.6", 
      "opn": "^4.0.2", // 跨平台的开启文件或者网页的工具 
      "optimize-css-assets-webpack-plugin": "^1.3.0", 
      "ora": "^1.2.0", // 命令行里自动运行的信息提示  
      "rimraf": "^2.6.0", // 跑shell命令 rm-rf 的工具  
      "url-loader": "^0.5.8", // 配合webpack的加载器  
      "vue-loader": "^11.3.4", // 配合webpack的加载器  
      "vue-style-loader": "^2.0.5", // 配合webpack的加载器  
      "vue-template-compiler": "^2.2.6", // vue-template-compiler,可能是配合离线版vue  
      "webpack": "^2.3.3", // webpack相关的用于,把图片,*.vue, *.js, 这些组合成最终的项目,webpack-dev用于跑测试服务器  
      "webpack-dev-middleware": "^1.10.0", 
      "webpack-hot-middleware": "^2.18.0", 
      "webpack-merge": "^4.1.0", 
      "babel-preset-es2015": "^6.22.0", 
      "function-bind": "^1.1.0", 
      "webpack-bundle-analyzer": "^2.2.1"  
     },  // 项目依赖的引擎版本  
     "engines": { 
      "node": ">= 4.0.0", 
      "npm": ">= 3.0.0"
     }, 
     "browserslist": [ 
      "> 1%", 
      "last 2 versions", 
      "not ie <= 8"
     ] 
    }
    
    • README.md 项目的说明文档,markdown 格式

    饿了么 外卖APP

    需求分析

    • 对设计稿进行分析
      • 页面布局
      • 效果
      • 需求


    准备

    • src 文件夹下新建一个 images 文件夹, 把需要用到的图片素材放到里面 (名字最好语义化,方便查找)
    • 设计稿标注的尺寸应是实际尺寸的2倍, 所以应在 src/main.js 文件中配置
    let w = $(window).width();
    $("html").css({fontSize: w / 375 * 100 + "px"}); // 375表示设计稿宽度为 375px
    $("body").css({fontSize: '0.12rem'});
    
    $(window).resize(() => {
        let w = $(window).width();
        $("html").css({fontSize: w / 375 * 100 + "px"});
        $("body").css({fontSize: '0.12rem'});
    });
    
    // 开发中要换算成rem单位, 比如: 设计稿 width: 100px  实际: 100/2/100=0.5rem
    

    注: 上述代码需要用到 zepto 组件, 否则会报错!!! 具体使用方法请参照 Vue 引入 zepto

    图标字体制作

    项目目录设计

    src\components 文件夹中创建组件时,最好创建几个对应模块的文件夹, 用来存放组件

    src\views 文件夹中存放开发页面, 需要路由配置

    Zepto

    UI组件 - Mint UI

    Vue-router (路由)

    • 安装 (如果配置脚手架时已经安装了router, 请跳过此步)
      npm install vue-router --save
    • src/router/index.js
    • 配置

    Vuex

    • 为什么要用Vuex?
      • 我们知道组件之间是独立的,组件之间想要实现通信,我目前知道的就只有props选项,但这也仅限于父组件和子组件之间的通信。如果兄弟组件之间想要实现通信呢?嗯..,方法应该有。抛开怎么实现的问题,试想一下,当做中大型项目时,面对一大堆组件之间的通信,还有一大堆的逻辑代码,会不会很抓狂???那为何不把组件之间共享的数据给“拎”出来,在一定的规则下管理这些数据呢? 这就是Vuex的基本思想了
    • 安装
      npm install vuex --save
    • 配置
      • src/store/index.js
    // 导入变量
    import Vue from 'vue'
    import Vuex from 'vuex'
    
    // 在模块化构建系统中,需在开头调用 Vue.use(Vuex)
    Vue.use(Vuex);
    
    // 原本直接export外部是无法识别的,加上default就可以了.但是一个文件内最多只能有一个export default
    // export可以多个,但在导入时要加{},export default则不需要
    export default new Vuex.Store({
        state: {
            count: 0
        },
        mutations: {
            increment(state) {
                state.count++
            }
        }
    })
    

    Less

    • 简介
      • Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展
    • 安装
      npm install less less-loader --save-dev
    • 配置

    Axios 数据交互

    • 安装
      npm install axios --save

    mock(模拟后台数据)

    • src/utils/mock.js



    注: 该笔记持续更新中, 请实时关注, 有不懂的请留言, 谢谢

    相关文章

      网友评论

      • b5447822e675:很不错,适合我这种新手看(●◡●)ノ

      本文标题:Vue 2.0 开发流程 (全)

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