vue脚手架搭建


在这里插入图片描述

说明

Vue 脚手架是一套用于构建 Vue.js 单页应用 (SPA) 的工具链,它可以帮助我们快速搭建 Vue.js 项目架构。Vue 脚手架提供了一系列的命令行工具,可以轻松地创建、开发、构建和测试 Vue.js 应用。其中最常用的 Vue 脚手架工具是 Vue CLI,它是官方提供的一个用于快速搭建基于 Vue.js 的开发环境和项目结构的命令行工具。通过 Vue CLI,我们可以便捷地创建一个新的 Vue.js 项目,并配置 webpack、babel、ESLint、jest 等构建工具和测试框架。

  1. Vue脚手架是Vue官方提交的标准化的开发工具(开发平台)
  2. 文档地址
  3. 最新的版本是:4.x
  4. 拓展:
    Vue(1.x,2.x,3.x) ---------核心技术版本
    Vue CLI(1.x,2.x,3.x,4.x)--------平台版本
    CLI的全称为:command line interface (命令行接口工具)

具体步骤

  1. 为防止下载缓慢请配置 npm 淘宝镜像:

npm config set registry https://registry.npm.taobao.org

  1. 第一步(仅第一次执行)全局安装 @vue/cli

npm install -g @vue/cli

  1. 第二步:切换到你要创建项目的目录,然后使用命令创建项目

vue create xxxx

  1. 第三步:启动项目

npm run serve

具体步骤如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目结构

├── node_modules
├── public
│ ├── favicon.ico: 页签图标
│ └── index.html: 主页面
├── src
│ ├── assets: 存放静态资源
│ │ └── logo.png
│ │── component: 存放组件
│ │ └── HelloWorld.vue
│ │── App.vue: 汇总所有组件
│ │── main.js: 入口文件
├── .gitignore: git 版本管制忽略的配置
├── babel.config.js: babel 的配置文件
├── package.json: 应用包配置文件
├── README.md: 应用描述文件
├── package-lock.json:包版本控制文件

项目运行的过程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

render函数

  1. vue.js与vue.runtime.xxx.js的区别:
    (1).vue.js是完整版的Vue,包含:核心功能+模板解析器。
    (2).vue.runtime.xxx.js是运行版的Vue,只包含:核心功能;没有模板解析器。

  2. 因为vue.runtime.xxx.js没有模板解析器,所以不能使用template配置项,需要使用render函数接收到的createElement函数去指定具体内容。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改默认配置

  1. Vue 脚手架隐藏了所有 webpack 相关的配置,若想查看具体的 webpakc 配置,请执行:

vue inspect > output.js

  1. 使用vue.config.js可以对脚手架进行个性化定制,详情见:https://cli.vuejs.org/zh
    在这里插入图片描述
  2. vue.config.js文件内写好的配置和webpack里面已经写好的配置合并,并且以这个配置为主,替换掉wenpack里面默认的配置,这样很巧妙的不会对脚手架里面已经配置好的核心文件造成破坏。
    在这里插入图片描述
  3. vue.config.js代码如下
module.exports = {
  pages: {
    index: {
      //入口
      entry: 'src/main.js',
    },
  },
	lintOnSave:false, //关闭语法检查
}

ref属性

  1. 作用:被用来给元素或子组件注册引用信息(id的替代者)(用于给节点打标识)
  2. 应用在html标签上获取的是真实DOM元素,应用在组件标签上是组件实例对象(vc)
  3. 使用方式:
    1. 打标识:<h1 ref="xxx">.....</h1><School ref="xxx"></School>
    2. 获取:this.$refs.xxx
  4. 例子:
<template>
	<div>
		<h1 v-text="msg" ref="title"></h1>
		<button ref="btn" @click="showDOM">点我输出上方的DOM元素</button>
		<School ref="sch"/>
	</div>
</template>

<script>
	//引入School组件
	import School from './components/School'

	export default {
		name:'App',
		components:{School},
		data() {
			return {
				msg:'欢迎学习Vue!'
			}
		},
		methods: {
			showDOM(){
				console.log(this.$refs.title) //真实DOM元素
				console.log(this.$refs.btn) //真实DOM元素
				console.log(this.$refs.sch) //School组件的实例对象(vc)
			}
		},
	}
</script>

在这里插入图片描述
在这里插入图片描述

props属性

  1. 功能:让组件接收外部传过来的数据

  2. 传递数据:<Demo name="xxx"/>

  3. 接收数据:

    1. 第一种方式(只接收):props:['name']

    2. 第二种方式(限制类型):props:{name:String}

    3. 第三种方式(限制类型、限制必要性、指定默认值):

      props:{
      	name:{
      	type:String, //类型
      	required:true, //必要性
      	default:'某某某' //默认值
      	}
      }
      
  4. 备注:props是只读的,Vue底层会监测你对props的修改,如果进行了修改,就会发出警告,若业务需求确实需要修改,那么请复制props的内容到data中一份,然后去修改data中的数据。

mixin混入

  1. 功能:可以把多个组件共用的配置提取成一个混入对象

  2. 使用方式:

    第一步定义混合:

    {
        data(){....},
        methods:{....}
        ....
    }
    
  3. mixin.js文件

    export const hunhe = {
    	methods: {
    		showName(){
    			alert(this.name)
    		}
    	},
    	mounted() {
    		console.log('你好啊!')
    	},
    }
    export const hunhe2 = {
    	data() {
    		return {
    			x:100,
    			y:200
    		}
    	},
    }
    
    

    第二步使用混入:

    ​ 1. 全局混入:Vue.mixin(xxx)

    main.js文件

     //引入Vue
    import Vue from 'vue'
    //引入App
    import App from './App.vue'
    
    //引入混合
    import {hunhe,hunhe2} from './mixin'
    
    //关闭Vue的生产提示
    Vue.config.productionTip = false
    
    //全局使用混入
    Vue.mixin(hunhe)
    Vue.mixin(hunhe2)
    
    //创建vm
    new Vue({
    	el:'#app',
    	render: h => h(App)
    })
    

    ​ 2. 局部混入:mixins:['xxx']

    <template>
     <div>
     	<h2 @click="showName">学校名称:{{name}}</h2>
     	<h2>学校地址:{{address}}</h2>
     </div>
    </template>
    
    <script>
     //引入混合
     // import {hunhe,hunhe2} from '../mixin'
    
     export default {
     	name:'School',
     	data() {
     		return {
     			name:'XXX',
     			address:'hangzhou',
     			x:123
     		}
     	},
      //使用混合
     	// mixins:[hunhe,hunhe2],
     }
    </script>
    
  4. 注意:如果混合文件和当前页面文件配置冲突,以当前页面配置为主(比如data中的数据,methods中的方法等)。但是生命周期钩子函数例外,不管是写在混合文件还是写在当前文件,都会执行到。

插件

  1. 功能:用于增强Vue

  2. 本质:包含install方法的一个对象,install的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据。

  3. 定义插件:

    对象.install = function (Vue, options) {
        // 1. 添加全局过滤器
        Vue.filter(....)
    
        // 2. 添加全局指令
        Vue.directive(....)
    
        // 3. 配置全局混入(合)
        Vue.mixin(....)
    
        // 4. 添加实例方法
        Vue.prototype.$myMethod = function () {...}
        Vue.prototype.$myProperty = xxxx
    }
    
  4. 使用插件:Vue.use()

  5. 例子:
    第一步: 在src中创建一个plugin.js插件文件,如下:

    export default {  //是一个对象,一个包含install方法的对象,install的第一个参数是Vue构造函数。
    	install(Vue,x,y,z){
    		console.log(x,y,z)
    		//全局过滤器
    		Vue.filter('mySlice',function(value){
    			return value.slice(0,4)
    		})
    
    		//定义全局指令
    		Vue.directive('fbind',{
    			//指令与元素成功绑定时(一上来)
    			bind(element,binding){
    				element.value = binding.value
    			},
    			//指令所在元素被插入页面时
    			inserted(element,binding){
    				element.focus()
    			},
    			//指令所在的模板被重新解析时
    			update(element,binding){
    				element.value = binding.value
    			}
    		})
    
    		//定义混入(全局)
    		Vue.mixin({
    			data() {
    				return {
    					x:100,
    					y:200
    				}
    			},
    		})
    
    		//给Vue原型上添加一个方法(vm:Vue实例对象和vc:组件实例对象就都能用了)
    		Vue.prototype.hello = ()=>{alert('你好啊')}
    	}
    }
    

    第二步:在main.js中引入插件,如下:

      //引入Vue
     import Vue from 'vue'
     //引入App
     import App from './App.vue'
     //引入插件
     import plugins from './plugins'
     //关闭Vue的生产提示
     Vue.config.productionTip = false
     
     //应用(使用)插件,通过Vue.use()应用插件
     Vue.use(plugins,1,2,3)
     //创建vm
     new Vue({
     	el:'#app',
     	render: h => h(App)
     })
    

第三步:在页面中使用插件

<template>
	<div>
	    <!-- 使用全局过滤器 -->
		<h2>学校名称:{{name | mySlice}}</h2>
		<h2>学校地址:{{address}}</h2>
		 <!-- vc获取Vue原型上面的方法-->
		<button @click="test">点我测试一个hello方法</button>
		  <!-- 使用全局自定义指令 -->
		<input type="text" v-fbind:value="name">
	</div>
</template>

<script>
	export default {
		name:'School',
		data() {
			return {
				name:'XXX123456',
				address:'hangzhou',
			}
		},
		methods: {
			test(){
				this.hello()
			}
		},
	}
</script>

scoped样式

  1. 作用:让样式在局部生效,防止冲突。
  2. 写法:<style scoped>

安装 less

  1. 先查看一下项目对应的webpack的版本
    在这里插入图片描述
  2. 再查看一下目前webpack和less-loader都有哪些版本
    在这里插入图片描述
    在这里插入图片描述
  3. 上述项目中webpack的版本是4.x。故而less-loader,不可以直接安装(比如:npm i less-loader),会报语法错误,直接安装的话安装的是最新版本的,比如8.x或者9.x。这两个版本都是配合webpack5.x使用的。建议安装7.x版本的less-loader配合4.x版本的webpack一起使用。(npm i less-loader@7)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值