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);
        });
      })
    }
     
     
  • 相关阅读:
    VS 2008潜在强大的功能:提取EXE文件中的ICO等资源
    园友们注意:淘宝网上QQ会员 4钻 3元 等都为骗子行为
    Comet Async Process Request Handler
    WCF(Sender) to MSMQ to WCF(Receiver)
    ASP.NET Web Form GridView DetailsView Query Edit
    WCF NetTcp AsyncQueue Service
    Xml CDATA 序列化
    Sync Invoke Remoting Async Invoke
    .Net 4.0 Remoting ConcurrentQueue
    Socket Async Receive Data to LinkedList Buffer (telnet proxy server)
  • 原文地址:https://www.cnblogs.com/miaSlady/p/11492074.html
Copyright © 2011-2022 走看看