前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vue菜鸡实践

vue菜鸡实践

作者头像
刘嘿哈
发布2022-10-25 14:04:27
3310
发布2022-10-25 14:04:27
举报
文章被收录于专栏:js笔记

利用vue-cli创建vue demo

代码语言:javascript
复制
vue create demo
// 根据提示,创建成功后
// cd demo
// npm run serve

根目录创建vue.config.js文件 基本配置,configureWebpack属性,值是对象时的配置

代码语言:javascript
复制
const path = require('path')
const resolve = src => path.join(__dirname, src)
const port = 7777 
module.exports = {
    publicPath: '/best-parctice',
    devServer: {
        port //修改dev默认端口
    },

    configureWebpack:{
        name:'tom is cat',
        //加个别名
        resolve:{
            alias:{
                comps:resolve('src/components')
            }
        }
    },
}

基本配置,configureWebpack属性,值是函数时的配置

代码语言:javascript
复制
const path = require('path')
const resolve = src => path.join(__dirname, src)
const port = 7777 
module.exports = {
    publicPath: '/best-parctice',
    devServer: {
        port //修改dev默认端口
    },

    // configureWebpack:{
    //     name:'tom is cat',
    //     //加个别名
    //     resolve:{
    //         alias:{
    //             comps:resolve('src/components')
    //         }
    //     }
    // },
    // 除了上面方式,还可以是个函数
    configureWebpack:config=> {
        // config就是传入的webpack配置对象
        // 可以直接加工,也可以返回一个对象,最终都会和传入的baseconfig merge        
        if(process.env.NODE_ENV='develoment'){
            config.name='vue 项目最基础实践'
        }else{
            config.name="vue牛逼实践"
        }
        config.resolve.alias.comps=resolve('src/components')
    },
}

// 牛人总是姿势多,chainWebpack,链式配置,近来使用最多的,可能看着高大尚一些,

代码语言:javascript
复制
 // 链式配置 看着牛逼一些,类似jquey链式调用
    chainWebpack(config){
        // 使用 svg icon ,配置 svg-sprite-loader    
        // 找到svg 默认的处理规则,将某个目录排除处理里的范围
        config.module.rule('svg')
            .exclude.add(resolve('src/icons'))
        // 新加一个icons的处理规则,用svg-sprite-loader处理,将上面那个目录添加  到这个规则的处理范围内
        config.module.rule('icons')
            .test(/\.(svg)(\?.*)?$/)
            .include.add(resolve('src/icons')).end()
            .use()
                .loader('svg-sprite-loader')
                .options({
                    symbolId:'icon-[name]'
                })
    }

查看当前webpack配置详情

代码语言:javascript
复制
vue inspect --icons svg //看看效果

按照配置创建文件,src根目录创建icons/svg/文件夹,里面存储svg后缀的文件

image.png

阿里矢量图库随便下载一个小图

代码语言:javascript
复制
<svg t="1605408690360" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1203" width="200" height="200"><path d="M392.9 259.1s-87.2 46.1-93.7 174.4c-3.2 63.2 53.6 133.8 53.6 133.8l160.1 171.4-64.7 57.1-295.3-286.5S45.7 385 137.2 282.4s193.6-60.2 193.6-60.2l62.1 36.9zM565.6 588.2l218.6 224.2-52.2 39.5-184.7-182.1z" fill="#E74291" p-id="1204"></path><path d="M900.2 559.8l-1.7-1.7c-20.2-20.2-47.2-31.4-75.9-31.5h-0.2c-28.7 0-55.5 11.1-75.6 31.2l-14 14-12.9-12.8c-1.1-1.1-2.3-2.2-3.4-3.3l31-31c74.1-74.1 73.5-195.1-1.2-269.9l-3.1-3.1c-35.1-35.1-81.8-54.4-131.6-54.4h-0.1c-49.5 0-95.8 19.2-130.5 53.9L445.3 287l-33.5-33.5c-35.9-35.9-83.8-55.8-134.8-55.8h-0.2c-51 0-98.9 19.8-134.9 55.8l-3.1 3.1c-34.8 34.8-53.9 81.3-53.7 130.9 0.1 49.6 19.4 96.2 54.4 131.1l270.1 270.8c9.8 9.8 22.9 15.3 36.7 15.3 13.8 0 26.8-5.4 36.5-15.1l78.6-78.6c0.4 0.5 0.9 0.9 1.3 1.4L696 846c10 10 23.2 15.5 37.3 15.5 14 0 27.2-5.4 37.1-15.3l130.5-130.5c42.8-42.8 42.5-112.8-0.7-155.9zM460.1 766.9c-3.7 3.7-8.6 5.7-13.9 5.7-5.3 0-10.3-2.1-14.1-5.9l-270-270.8c-28.9-28.9-44.9-67.4-45-108.5-0.1-41.1 15.6-79.5 44.4-108.2l3.1-3.1c29.9-29.9 69.8-46.4 112.2-46.4h0.2c42.5 0 82.3 16.5 112.2 46.4L434 321c6.2 6.3 16.4 6.3 22.6 0 0.6-0.6 1.1-1.3 1.6-2 0.7-0.5 1.3-1 1.9-1.6l43.4-43.5c28.6-28.7 66.9-44.5 107.9-44.5h0.1c41.2 0 80 16 109 45l3.1 3.1c62.3 62.3 62.8 163 1.2 224.6l-35.4 35.4c-14.6-7-30.8-10.7-47.5-10.7h-0.1c-29.5 0-57.1 11.4-77.9 32.2l-1.7 1.7c-20.1 20.1-31.2 47.1-31.1 75.8 0 17 4 33.3 11.3 48l-82.3 82.4zM878.3 693L747.8 823.5c-3.8 3.8-9 6-14.4 6-5.5 0-10.8-2.2-14.7-6.1L585.3 689.7c-14.2-14.2-22-33.1-22.1-53.3-0.1-20.1 7.7-39 21.8-53.1l1.7-1.7c14.7-14.7 34.4-22.8 55.3-22.8h0.1c20.9 0 40.6 8.1 55.3 22.9l24.2 24.2c6.2 6.2 16.4 6.3 22.6 0 0.3-0.3 0.6-0.7 0.9-1 0.3-0.3 0.7-0.6 1-0.9l23.4-23.4c14.1-14.1 32.9-21.8 53-21.8h0.2c20.2 0 39.2 7.9 53.4 22.1l1.7 1.7c30.5 30.5 30.8 80.1 0.5 110.4z" fill="#4C3441" p-id="1205"></path><path d="M692.3 367.2c-6.4 0-12.4-3.8-14.9-10.1-0.1-0.2-10.4-25.5-29.1-36.4-19-11.1-35.7-9.2-35.9-9.2-8.7 1.3-16.9-4.7-18.2-13.5-1.3-8.7 4.7-16.9 13.5-18.2 2.8-0.4 28-3.6 56.7 13.2 28.3 16.6 42.1 50.9 42.7 52.3 3.2 8.2-0.8 17.5-9 20.8-1.9 0.7-3.9 1.1-5.8 1.1z" fill="#4C3441" p-id="1206"></path></svg>

components目录中创建一个组件SvgIcon.vue

代码语言:javascript
复制
<template>
  <svg :class="svgClass" aria-hidden="true" v-on="$listeners">
    <use :xlink:href="iconName"/>
  </svg>
</template>

<script>
  export default {
    name: "SvgIcon",
    props: {
      iconClass: {
        type: String,
        required: true
      },
      className: {
        type: String,
        default: ""
      }
    },
    computed: {
      iconName() {
        return `#icon-${this.iconClass}`
      },
      svgClass() {
        if (this.className) {
          return "svg-icon " + this.className
        } else {
          return "svg-icon"
        }
      }
    }
  }
</script>

<style scoped>
  .svg-icon {
    width: 1em;
    height: 1em;
    vertical-align: -0.15em;
    fill: currentColor;
    overflow: hidden;
  }
</style>

利用node.js读文件,自动加载icons/svg目录下所有的svg文件,并且注册全局组件

代码语言:javascript
复制
import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon.vue'
// 自动加载svg目录中的svg文件
// context()返回的函数是指定上下文路径的require函数
// 遍历当前目录./svg目录下的所有.svg后缀文件,不深度遍历
const req = require.context('./svg', false, /\.svg$/)
// keys方法返回文件名集合
req.keys().forEach(req)
// 注册全局组件SvgIcon
Vue.component('SvgIcon',SvgIcon)

main.js中,引入上面创建的js文件,让他在打包时执行

代码语言:javascript
复制
import Vue from 'vue'
import App from './App.vue'
import router from './router'
// 这句话
import './icons/index.js'
Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

配完试一下

代码语言:javascript
复制
<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">
      <svg-icon iconClass="aiqing"></svg-icon>
      Home</router-link>
      |
      <router-link to="/about">
      <svg-icon iconClass="gou"></svg-icon>
      
      About</router-link>
    </div>
    <router-view />
  </div>
</template>

很骚气,以后想加别的icon,直接把svg文件往icons/svg目录中扔就ok了

环境变量的配置

根目录创建.env.development和.env.production

代码语言:javascript
复制
abc='只能在服务器端获取'
VUE_APP_ABC='可穿梭在服务器和浏览器之间的变量'

可在启动项目脚本中指定模式名称,webpack会读取对应的.env.[name]文件

代码语言:javascript
复制
vue-cli-service serve --mode dev
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 利用vue-cli创建vue demo
  • 环境变量的配置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档