zoukankan      html  css  js  c++  java
  • 如何改造vue-cli,将mockjs嵌入到webpack

    最近准备开发一款 web app,是前后端并行开发的场景,因此需要 mock 一些数据,但是 vue 官网上发现没有跑在webpack上的例子。

    案例数据来自网上。

    一、安装 vue 脚手架并初始化 webpack 项目

        //全局安装 vue-cli
        npm install vue-cli -g
        //创建一个基于 webpack 模板的新项目
        vue init webpack mock-server-demo
        //切换至mock-server-demo目录
        cd mock-server-demo

    二、安装依赖

        //我们使用axios来发起http请求
        npm install axios --save
        //安装依赖mockjs
        npm install mockjs --save-dev

    三、在项目根路径下创建mock文件夹

           3-1  新建一个 index.js 文件,公共一个 get  请求

           3-2  新建一个 util.js 文件,用来读取指定的 json 文件

           3-3  新建一个 userInfo.json 文件,用来保存随机生成的一些数据

    //index.js
    const Mock = require('mockjs');//mockjs 导入依赖模块
    const util = require('./util');//自定义工具模块
    //返回一个函数
    module.exports = function(app){
        //监听http请求
        app.get('/user/userinfo', function (rep, res) {
            //每次响应请求时读取mock data的json文件
            //util.getJsonFile方法定义了如何读取json文件并解析成数据对象
            var json = util.getJsonFile('./userInfo.json');
            //将json传入 Mock.mock 方法中,生成的数据返回给浏览器
            res.json(Mock.mock(json));
        });
    }
    
    
    //util.js
    const fs = require('fs');//引入文件系统模块
    const path = require('path');//引入path模块
    
    module.exports = {
        //读取json文件
        getJsonFile:function (filePath) {
            //读取指定json文件
            var json = fs.readFileSync(path.resolve(__dirname,filePath), 'utf-8');
            //解析并返回
            return JSON.parse(json);
        }
    };
    
    //userInfo.json
    {
        "error":0,
        "data":{
            "userid": "@id()",
            "username": "@cname()",
            "date": "@date()",
            "avatar": "@image('200x200','red','#fff','avatar')",
            "description": "@paragraph()",
            "ip": "@ip()",
            "email": "@email()"
        }
    }

    四、使用 webpack-dev-server 搭建 web server ,响应 http 的请求

    webpack 官网中说 webpack-dev-server 能够用于快速开发应用程序。web server不需要自己搭建或者另外安装依赖,在webpack-dev-server中已经封装好了,我们只需要直接那过来用就可以了。在路径 build/webpack.dev.conf.js 文件中的 devServer 属性中新添加一个before 钩子函数,用来监听来自web的http请求。

     

    官网链接:https://www.webpackjs.com/configuration/dev-server/#devserver

    devServer 是一个对象,有很多个属性,用不同的属性来改变其行为。通俗的讲,devServer  就是开发过程中的一个服务器

    //devServer 为我们提供了开发过程中的服务器
    devServer: {
        contentBase: path.join(__dirname, 'dist'),
        compress: true,
        port: 9000
      }
    
    //想要提供静态文件时使用,目的是告诉服务器从哪里提供内容,默认情况下,使用当前目录作为提供内容的目录
    devServer.contentBase  
    
    //devServer.after,在服务内部的所有其他中间件之后, 提供执行自定义中间件的功能。
    devServer: {
        after: function(app) {
          // 做些有趣的事
        }
      }
    
    //devServer.allowedHosts,此选项允许你添加白名单服务,允许一些开发服务器访问。
    devServer: {
        allowedHosts: [
          'host.com',
          'subdomain.host.com',
          'subdomain2.host.com',
          'host2.com'
        ]
      }
    
    //devServer.before,在服务内部的所有其他中间件之前, 提供执行自定义中间件的功能。
    devServer: {
        before: function(app) {
          app.get('/some/path', function(req, res) {
            res.json({ custom: 'response' });
          });
        }
      }
    
    //devServer.compress,一切服务都启用 gzip 压缩:
    devServer: {
        compress: true
      }
    
    //devServer.host 指定使用一个 host。默认是 localhost。如果你希望服务器外部可访问,本机IP访问,指定如下:
    devServer: {
        host: '0.0.0.0'
      }
    
    //devServer.hot,启用 webpack 的模块热替换特性
    devServer: {
        hot: true
      }
    
    //devServer.lazy 当启用 lazy 时,dev-server 只有在请求时才编译包(bundle)。这意味着 webpack 不会监视任何文件改动。我们称之为惰性模式。
    devServer: {
        lazy: true
      }
    
    //devServer.historyApiFallback 当使用 HTML5 History API 时,任意的 404 响应都可能需要被替代为 index.html
    devServer:{
        historyApiFallback: true
    }
    
    //devServer.https  默认情况下,dev-server 通过 HTTP 提供服务。也可以选择带有 HTTPS 的 HTTP/2 提供服务:
    devServer:{
        https: true
    }
    
    //devServer.port 指定要监听请求的端口号:
    devServer:{
        port: 8080
    }
    
    //devServer.proxy 在 localhost:3000 上有后端服务的话,你可以这样启用代理:
    devServer:{
        proxy: {
            "/api": "http://localhost:3000"
        }
    }
    //请求到 /api/users 现在会被代理到请求 http://localhost:3000/api/users

    五、在浏览器中发起请求,获取数据,在 App.vue 文件中使用 axios 发起http请求

      5-1   在 src 目录下新建 vue-axios 文件夹,给 Vue 添加 axios 原型,在调用时直接写  this.axios ,非常方便

    import Vue from 'vue'
    import axios from 'axios'
    
    const http = {
        install(){
            Vue.prototype.axios = axios;
        }
    };
    
    export default http

      5-2   在 main.js 中将 vue-axios 绑定到 Vue 实例上

    import axios from './vue-axios'
    Vue.use(axios)

      5-3  在 App.vue 上调用方法

    export default {
      name: 'App',
      data(){
        return {
          userInfo:{}
        }
      },
      created(){
        this.getUserInfo();
      },
      methods:{
        getUserInfo(){
          // this.userInfo = null;
          this.axios.get('/user/userinfo')
          .then(({data})=>{
            if(data.error === 0){
              this.userInfo = data.data;
            }else{
              this.userInfo = {};
            }   
          });
        }
      }
    }

    GET:  http://localhost:8080/user/userinfo  200

    测试 ok

    六、报错解决:

      6.1  You may use special comments to disable some warnings.  由于vue对语法的限制过于严格,所以第一次编译运行项目时一直失败,查找原因解决办法:在 build/webpack.base.conf.js 文件中,注释或者删除掉:module->rules中有关eslint的规则

  • 相关阅读:
    YII中表单验证
    YII中的表单挂件
    YII数据库操作(CURD操作)
    YII中的session和cookie
    YII中面包屑制作(当前位置:网站首页 >> 会员登陆)
    ios NSFileManager 用法详解
    iOS沙盒路径的查看和使用
    iOS7改变状态栏文字颜色
    iOS常用第三方库 -转
    Linux下mysql新建账号及权限设置各种方式总结
  • 原文地址:https://www.cnblogs.com/baiyygynui/p/12578455.html
Copyright © 2011-2022 走看看