zoukankan      html  css  js  c++  java
  • vue3的配置和踩坑(安装、配置vue-router、px转rem、热更新、less、axios)

    一:安装

    1.vue create 工程名(注vue3: build没了、config没了,3.0的安装项目时自动下载node-model。)

    2.在根目录下创建一个vue.config.js

    function getIPAdress(){
      var interfaces = require('os').networkInterfaces();
      for(var devName in interfaces){
        var iface = interfaces[devName];
        for(var i=0;i<iface.length;i++){
          var alias = iface[i];
          if(alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal){
            return alias.address;
          }
        }
      }
    }
    module.exports = {
      // baseUrl: process.env.NODE_ENV === 'production' ? '/online/' : '/',
    	publicPath:'./',//vue-cli3.3+新版本使用
    	// eslint-loader 是否在保存的时候检查
    	lintOnSave: true,
    	//放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。
    	assetsDir: 'static',
      // outputDir: 在npm run build时 生成文件的目录 type:string, default:'dist'
      // outputDir: 'dist',
      // pages:{ type:Object,Default:undfind }
    	//生产环境是否生成 sourceMap 文件,一般情况不建议打开
      productionSourceMap: false,
      css:{
    		// 是否使用css分离插件
    		extract: true,
    		// 开启 CSS source maps,一般不建议开启
    		sourceMap: false,
    	},
      devServer: {
        port: 1818, // 端口号
        host: getIPAdress(),
        https: false, // https:{type:Boolean}
        open: true, //配置自动启动浏览器
        compress: true,//配置热更新
        proxy: {
          '/api': {
            target: 'http://image.hn8718.com:8777', //API服务器的地址
            ws: true, //代理websockets
            changeOrigin: true, // 虚拟的站点需要更管origin
            pathRewrite: {  //重写路径 比如'/api/aaa/ccc'重写为'/aaa/ccc'
              '^/api': ''
            }
          }
        },//跨域
      },
    
    }  
    

     或者:

    module.exports = {

        baseUrl: process.env.NODE_ENV === 'production' '/online/' '/',
        // outputDir: 在npm run build时 生成文件的目录 type:string, default:'dist'
        // outputDir: 'dist',
        // pages:{ type:Object,Default:undfind }
        devServer: {
            port: 8888, // 端口号
            host: 'localhost',
            https: false// https:{type:Boolean}
            open: true//配置自动启动浏览器
            // proxy: 'http://localhost:4000' // 配置跨域处理,只有一个代理
            proxy: {
                '/api': {
                    target: '<url>',
                    ws: true,
                    changeOrigin: true
                },
                '/foo': {
                    target: '<other_url>'
                }
            },  // 配置多个代理
        }
    }
    二、配置vue-router
    cnpm install vue-router --save
    1.在src增加router文件加入js

     2.进行路由配置(图+代码)

    import Vue from 'vue'
    import Router from 'vue-router'

    Vue.use(Router)

    const Routes = [
      { path: '*', redirect: '/welcome' },
      {
        path: '/welcome',
        name: '欢迎页面',
        component:() => import('@/views/demo/pages/welcome')
      },
      {
        path: '/page1',
        name: 'page1',
        component: () => import('@/views/demo/pages/page1')
      },
     
    ]

    const createRouter = () => new Router({
      routes: Routes
    })

    const router = createRouter()

    export default router;
     
    3.在main.js中引入

    4.修改app.vue

    <template>
      <div id="app">
        <router-view></router-view>
      </div>
    </template>
    
    <script>
    import HelloWorld from './components/HelloWorld.vue'
    
    export default {
      name: 'App',
      components: {
        HelloWorld
      }
    }
    </script>
    
    <style>
    #app {
      font-family: Avenir, Helvetica, Arial, sans-serif;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
      /* text-align: center;
      color: #2c3e50;
      margin-top: 60px; */
    }
    </style>
    

      

    三、px转rem
    1.cnpm install postcss-px2rem
    2.在public中添加rem.js
    // 基准大小
    const baseSize = 32
    // 设置 rem 函数
    function setRem() {
      // 当前页面宽度相对于 750 宽的缩放比例,可根据自己需要修改。
      const scale = document.documentElement.clientWidth / 750
      // 设置页面根节点字体大小
      document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px'
    }
    // 初始化
    setRem()
    // 改变窗口大小时重新设置 rem
    window.onresize = function() {
      setRem()
    }
    3.在vue.config.js中添加(图加代码)
    const px2rem = require('postcss-px2rem')
    
    const postcss = px2rem({
      remUnit: 32   //基准大小 baseSize,需要和rem.js中相同
    })
    
    module.exports = {
      css: {
        loaderOptions: {
          postcss: {
            plugins: [
              postcss
            ]
          }
        }
      }
    }
    4.在main.js中添加
    ;(function(){
      var rem = document.createElement('script');
      rem.src = './rem.js';
      document.body.appendChild(rem)
    })()
     
    四、热更新

     五、配置less

    1.cnpm install less less-loader --save-dev

    六、配置axios

    1.cnpm install axios --save

    2.为了解决跨域问题,我配置了withCredential。

    import axios from 'axios'
    import {Message} from 'element-ui'
    axios.defaults.withCredentials=true; //请求携带cookie

    var baseURL='http://192.168.0.169:8080/api';//王帅
    const instance = axios.create({
       baseURL
     })
    instance.interceptors.response.use(response => {
       if(response.data.code==401){
        // toLogin();
        return;
       }
       return response;
     })

     export let myAxiosGet = (url, params)=>{
      return new Promise((resolve, reject) => {
        instance.get(url, {params,withCredentials:true}).then(function (response) { 
          resolve(response.data)
          if(!response.data.success){
            Message({
              message: response.data.message,
              type: 'error'
            });
          }
        })
        .catch(function (err) {
          Message({
            message: '获取信息失败',
            type: 'error'
          });
          reject(err);
        })
      })
    }

    export let myAxios = (method,url, params)=>{
      return new Promise((resolve, reject) => {
        instance({
          method: method,
          url,
          data: params,
        },{
          withCredentials:true
        })
        .then(function (response) {
          resolve(response.data);
          if(!response.data.success){
            Message({
              message: response.data.message,
              type: 'error'
            });
          }
        })
        .catch(function (err) {
          Message({
            message: '获取信息失败',
            type: 'error'
          });
          reject(err);
        });
      })
    }
     
     
  • 相关阅读:
    java的类加载机制
    tomcat jar包加载顺序
    重构 改善代码的既有设计
    ecilipse Javadoc文档注释
    常用HQL(Hibernate Query Language)查询
    在hibernate中查询单个对象的方法,get()、load()、
    hibernate -- HQL语句总结
    复杂的1秒--图解Google搜索技术
    作业-树状结构设计
    left join 和 left outer join 的区别
  • 原文地址:https://www.cnblogs.com/miaSlady/p/11492074.html
Copyright © 2011-2022 走看看