前端【VUE】05-vue【工程化开发和脚手架vue-cli、项目运行流程、组件化、组件注册】

工程化开发

  

 

脚手架Vue CLI

  基本介绍: Vue CLI 是 Vue 官方提供的一个全局命令工具。
  可以帮助我们快速创建一个开发Vue 项目的标准化基础架子。【集成了webpack配置】
  好处: 1. 开箱即用,零配置  2. 内置babel 等工具 3. 标准化

  修改npm源: npm config set registry https://registry.npmmirror.com

1. 全局安装(一次) :yarn global add @vue/clinpm i  @vue/cli  -g  和  npm i -D @vue/cli-service
2. 查看 Vue 版本:  vue  --version
3. 创建项目架子:    vue  create  vue-dome -m npm   // 此处-m npm 表示指定项目使用npm作为包管理器
4. 启动项目:      yarn  serve  或 npm run serve(找package.json)

 脚手架目录文件介绍

  

如何覆盖脚手架下的webpack配置:

  1. 注意:我们在项目无法找到webpack.config.js文件,因为vue把它隐藏 了 。
  2. 如果需要覆盖webpack的配置,可以修改vue.config.js文件,覆盖webpack配置vue.config.js文件
 1 const { defineConfig } = require('@vue/cli-service')
 2 module.exports = defineConfig({
 3   transpileDependencies: true,
 4   // 修改端口号
 5   devServer: {
 6     port: 4090
 7   },
 8   // 关闭代码检查,初学者建议添加,vue语法较严格,不添加可能有不必要报错提示
 9   lintOnSave: false
10 })

 项目运行流程

  

组件化开发& 根组件

  

 

App.vue 文件(单文件组件)的三个组成部分

  

App.vue 根组件

 1 <template>
 2   <div class="App">
 3     <div class="box" @click="fn"></div>
 4   </div>
 5 </template>
 6 
 7 <script>
 8 // 导出的是当前组件的配置项
 9 // 里面可以提供 data(特殊) methods computed watch 生命周期八大钩子
10 export default {
11   created () {
12     console.log('我是created')
13   },
14   methods: {
15     fn () {
16       alert('你好')
17     }
18   }
19 }
20 </script>
21 
22 <style lang="less">
23 /* 让style支持less
24    1. 给style加上 lang="less"
25    2. 安装依赖包 less less-loader
26       yarn add less less-loader -D (开发依赖)
27 */
28 .App {
29   width: 400px;
30   height: 400px;
31   background-color: pink;
32   .box {
33     width: 100px;
34     height: 100px;
35     background-color: skyblue;
36   }
37 }
38 </style>

main.js

 1 // 文件核心作用:导入App.vue,基于App.vue创建结构渲染index.html
 2 // 1. 导入 Vue 核心包
 3 import Vue from 'vue'
 4 
 5 // 2. 导入 App.vue 根组件
 6 import App from './App.vue'
 7 
 8 // 提示:当前处于什么环境 (生产环境 / 开发环境)
 9 Vue.config.productionTip = false
10 
11 // 3. Vue实例化,提供render方法 → 基于App.vue创建结构渲染index.html
12 // 写法1
13 new Vue({
14   el: '#app',
15   render: h => h(App)
16 })
17 
18 // 写法2
19 new Vue({
20   // el: '#app', 作用:和$mount('选择器')作用一致,用于指定Vue所管理容器
21   // render: h => h(App),
22   render: (createElement) => {
23     // 基于App创建元素结构
24     return createElement(App)
25   }
26 }).$mount('#app')

普通组件的注册使用-局部注册

  局部注册:只能在注册的组件内使用
    ①创建.vue 文件(三个组成部分)
    ②在使用的组件内导入并注册

 

1、components目录下

  components/HmFooter.vue

 1 <template>
 2   <div class="hm-footer">
 3     我是hm-footer
 4   </div>
 5 </template>
 6 
 7 <script>
 8 export default {
 9 
10 }
11 </script>
12 
13 <style>
14 .hm-footer {
15   height: 100px;
16   line-height: 100px;
17   text-align: center;
18   font-size: 30px;
19   background-color: #4f81bd;
20   color: white;
21 }
22 </style>

  components/HmHeader.vue

 1 <template>
 2   <div class="hm-header">
 3     我是hm-header
 4   </div>
 5 </template>
 6 
 7 <script>
 8 export default {
 9 
10 }
11 </script>
12 
13 <style>
14 .hm-header {
15   height: 100px;
16   line-height: 100px;
17   text-align: center;
18   font-size: 30px;
19   background-color: #8064a2;
20   color: white;
21 }
22 </style>

  components/HmMain.vue

 1 <template>
 2   <div class="hm-main">
 3     我是hm-main
 4   </div>
 5 </template>
 6 
 7 <script>
 8 export default {
 9 
10 }
11 </script>
12 
13 <style>
14 .hm-main {
15   height: 400px;
16   line-height: 400px;
17   text-align: center;
18   font-size: 30px;
19   background-color: #f79646;
20   color: white;
21   margin: 20px 0;
22 }
23 </style>

2、根组件App.vue

 1 <template>
 2   <div class="App">
 3     <!-- 头部组件 -->
 4     <HmHeader></HmHeader>
 5     <!-- 主体组件 -->
 6     <HmMain></HmMain>
 7     <!-- 底部组件 -->
 8     <HmFooter></HmFooter>
 9 
10     <!-- 如果 HmFooter + tab 出不来 → 需要配置 vscode
11          设置中搜索 trigger on tab → 勾上
12     -->
13   </div>
14 </template>
15 
16 <script>
17 // 1、要使用普通组件,先导入组件
18 import HmHeader from './components/HmHeader.vue'
19 import HmMain from './components/HmMain.vue'
20 import HmFooter from './components/HmFooter.vue'
21 
22 export default {
23   // 指定要使用的组件, 格式:   '组件名': 导入的组件对象, 如果组件名和导入的组件对象名称一致, 则可以简写成一个
24   components: {
25     HmHeader: HmHeader, // '组件名': 组件对象
26     HmMain,             // 组件名和导入的组件对象名称一致, 简写
27     HmFooter
28   }
29 }
30 </script>
31 
32 <style>
33 .App {
34   width: 600px;
35   height: 700px;
36   background-color: #87ceeb;
37   margin: 0 auto;
38   padding: 20px;
39 }
40 </style>

普通组件的注册使用-全局注册

  全局注册:所有组件内都能使用
  组件名规范→ 大驼峰命名法,如:HmHeader

  有个组件很多页面都要使用,提取出一个单独的组件

 

components目录下

components/HmButton.vue

 1 <template>
 2   <button class="hm-button">通用按钮</button>
 3 </template>
 4 
 5 <script>
 6 export default {
 7 
 8 }
 9 </script>
10 
11 <style>
12 .hm-button {
13   height: 50px;
14   line-height: 50px;
15   padding: 0 20px;
16   background-color: #3bae56;
17   border-radius: 5px;
18   color: white;
19   border: none;
20   vertical-align: middle;
21   cursor: pointer;
22 }
23 </style>

components/HmFooter.vue

 1 <template>
 2   <div class="hm-footer">
 3     我是hm-footer
 4     <HmButton></HmButton>
 5   </div>
 6 </template>
 7 
 8 <script>
 9 export default {
10 
11 }
12 </script>
13 
14 <style>
15 .hm-footer {
16   height: 100px;
17   line-height: 100px;
18   text-align: center;
19   font-size: 30px;
20   background-color: #4f81bd;
21   color: white;
22 }
23 </style>

components/HmHeader.vue

 1 <template>
 2   <div class="hm-header">
 3     我是hm-header
 4     <HmButton></HmButton>
 5   </div>
 6 </template>
 7 
 8 <script>
 9 // import HmButton from './HmButton.vue'
10 export default {
11   // 局部注册: 注册的组件只能在当前的组件范围内使用
12   // components: {
13   //   HmButton
14   // }
15 }
16 </script>
17 
18 <style>
19 .hm-header {
20   height: 100px;
21   line-height: 100px;
22   text-align: center;
23   font-size: 30px;
24   background-color: #8064a2;
25   color: white;
26 }
27 </style>

components/HmMain.vue

 1 <template>
 2   <div class="hm-main">
 3     我是hm-main
 4     <HmButton></HmButton>
 5   </div>
 6 </template>
 7 
 8 <script>
 9 export default {
10 
11 }
12 </script>
13 
14 <style>
15 .hm-main {
16   height: 400px;
17   line-height: 400px;
18   text-align: center;
19   font-size: 30px;
20   background-color: #f79646;
21   color: white;
22   margin: 20px 0;
23 }
24 </style>

2、根组件

 1 <template>
 2   <div class="App">
 3     <!-- 头部组件 -->
 4     <HmHeader></HmHeader>
 5     <!-- 主体组件 -->
 6     <HmMain></HmMain>
 7     <!-- 底部组件 -->
 8     <HmFooter></HmFooter>
 9 
10     <!-- 如果 HmFooter + tab 出不来 → 需要配置 vscode
11          设置中搜索 trigger on tab → 勾上
12     -->
13   </div>
14 </template>
15 
16 <script>
17 export default {
18 }
19 </script>
20 
21 <style>
22 .App {
23   width: 600px;
24   height: 700px;
25   background-color: #87ceeb;
26   margin: 0 auto;
27   padding: 20px;
28 }
29 </style>

3、在main.js中注册全局组件

 1 // 文件核心作用:导入App.vue,基于App.vue创建结构渲染index.html
 2 import Vue from 'vue'
 3 import App from './App.vue'
 4 // 编写导入的代码,往代码的顶部编写(规范)
 5 import HmButton from './components/HmButton'
 6 Vue.config.productionTip = false
 7 
 8 // 进行全局注册 → 在所有的组件范围内都能直接使用, 其他组件使用直接 <HmButton></HmButton>
 9 // Vue.component(组件名,组件对象)
10 Vue.component('HmButton', HmButton)
11 
12 
13 // Vue实例化,提供render方法 → 基于App.vue创建结构渲染index.html
14 new Vue({
15   // render: h => h(App),
16   render: (createElement) => {
17     // 基于App创建元素结构
18     return createElement(App)
19   }
20 }).$mount('#app')

 

posted @ 2024-04-07 20:04  为你编程  阅读(58)  评论(0编辑  收藏  举报