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);
    });
  })
}

 

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM