Vue單文件組件與腳手架工程化開發

一、Vue與VueComponent原型關系解析

1. 原型鏈關系圖解

在Vue中,組件實例(VueComponent)與Vue實例之間存在特殊的原型鏈關系:

VueComponent.prototype.__proto__ === Vue.prototype

這種設計使得所有組件都能訪問Vue原型上定義的方法和屬性。

2. 原理驗證示例

// 在Vue原型上添加方法
Vue.prototype.$sayHello = function() {console.log('Hello from Vue prototype!')
}// 創建組件
const Company = Vue.extend({created() {this.$sayHello() // 可以調用Vue原型上的方法}
})// 使用組件
new Vue({el: '#app',components: { Company },template: '<Company/>'
})

關鍵點

  • 組件實例可以訪問Vue原型上的屬性和方法

  • 這種設計實現了Vue功能的擴展性

  • 這也是為什么能在組件中使用this.$routerthis.$store等全局屬性的原因

二、單文件組件

1. 文件結構與命名規范

推薦的單文件組件結構:

MyComponent.vue
├── <template>    // 組件模板
├── <script>      // 組件邏輯
└── <style>       // 組件樣式

命名建議

  • 文件名使用PascalCase(首字母大寫)

  • 與組件名保持一致

  • 多單詞命名使用大駝峰

  • 避免與HTML元素沖突

2. 組件導出方式對比

2.1 分別暴露
<script>
export const Company = {data() {return { name: "Vue Inc." }}
}
</script>

使用方式:

import { Company } from './Company.vue'
2.2 統一暴露
<script>
const Company = {data() {return { name: "Vue Inc." }}
}
export { Company }
</script>
2.3 默認暴露(推薦)
<script>
export default {name: 'Company',data() {return { name: "Vue Inc." }}
}
</script>

使用方式:

import Company from './Company.vue'

最佳實踐

  • 優先使用默認暴露

  • 始終指定name選項

  • 保持組件名稱與文件名一致

三、Vue腳手架工程化

1.1 配置國內鏡像
// 淘寶鏡像
npm config set registry https://registry.npm.taobao.org
// 阿里鏡像
npm config set registry https://registry.npmmirror.com/
1.2 安裝Vue CLI
npm install -g @vue/cli
1.3 創建項目
vue create my-project
cd my-project
npm run serve

2. 項目結構

my-project
├── public/            # 靜態資源
│   ├── index.html     # 主入口HTML
│   └── favicon.ico   # 網站圖標
├── src/
│   ├── assets/        # 靜態資源
│   ├── components/    # 組件目錄
│   ├── App.vue        # 根組件
│   └── main.js        # 應用入口
├── .gitignore         # Git忽略配置
├── babel.config.js    # Babel配置
└── package.json       # 項目配置

3. 核心文件解析

3.1 public/index.html
<!DOCTYPE html>
<html lang=""><head><meta charset="utf-8"><!-- 針對IE瀏覽器的一個特殊配置,讓IE瀏覽器以最高的渲染級別渲染頁面 >=IE8 --><meta http-equiv="X-UA-Compatible" content="IE=edge"><!-- 開啟移動端的理想視口 --><meta name="viewport" content="width=device-width,initial-scale=1.0"><!-- 配置頁簽圖表,BASE_URL指的public路徑 --><link rel="icon" href="<%= BASE_URL %>favicon.ico"><!-- 配置網頁標題 從package.json中獲取標題--><title><%= htmlWebpackPlugin.options.title %></title></head><body><!-- 當瀏覽器不支持js,以下代碼會出現在頁面上 --><noscript><strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><!-- 容器 --><div id="app"></div><!-- built files will be auto injected --></body>
</html>
3.2 src/main.js
import Vue from 'vue'
import App from './App.vue'Vue.config.productionTip = falsenew Vue({render: h => h(App)
}).$mount('#app')
3.3 src/App.vue
<template><div id="app"><Company/></div>
</template><script>
import Company from './components/Company.vue'export default {name: 'App',components: { Company }
}
</script><style>
/* 全局樣式 */
</style>

四、Vue完整版與運行時版本區別

1. 核心差異對比

特性vue.js (完整版)vue.runtime.js (運行時版)
模板解析器包含不包含
體積較大較小(約輕30%)
使用方式支持template選項必須使用render函數
適用場景直接HTML引用構建工具配合使用

2. 使用示例對比

完整版使用方式
new Vue({el: '#app',template: '<div>{{ message }}</div>',data: {message: 'Hello Vue!'}
})
運行時版使用方式
new Vue({el: '#app',render(h) {return h('div', this.message)},data: {message: 'Hello Vue!'}
})

3. 腳手架中的配置

在vue.config.js中可以配置使用的版本:

module.exports = {configureWebpack: {resolve: {alias: {'vue$': 'vue/dist/vue.esm.js' // 使用完整版}}}
}

五、高級配置與優化建議

1. 自定義腳手架配置

創建vue.config.js進行個性化配置:

module.exports = {// 基本路徑publicPath: process.env.NODE_ENV === 'production' ? '/production-sub-path/' : '/',// 輸出目錄outputDir: 'dist',// 靜態資源目錄assetsDir: 'static',// 是否啟用eslintlintOnSave: process.env.NODE_ENV !== 'production',// 生產環境sourceMapproductionSourceMap: false,// 開發服務器配置devServer: {port: 8080,proxy: {'/api': {target: 'http://localhost:3000',changeOrigin: true}}}
}

2. 性能優化建議

  1. 代碼分割

const Company = () => import('./components/Company.vue')

  1. 第三方庫CDN引入:?

module.exports = {configureWebpack: {externals: {vue: 'Vue','vue-router': 'VueRouter'}}
}

Gzip壓縮

npm install compression-webpack-plugin --save-dev

圖片優化

module.exports = {chainWebpack: config => {config.module.rule('images').use('image-webpack-loader').loader('image-webpack-loader').options({ bypassOnDebug: true })}
}

六、總結與最佳實踐

1. 組件開發黃金法則

  1. 單一職責原則:每個組件只做一件事

  2. 明確接口:通過props和events定義清晰的組件API

  3. 可復用設計:考慮組件的通用性

  4. 命名一致性:保持文件名、組件名和注冊名一致

2. 工程化實踐建議

  1. 項目結構

src/
├── components/      # 基礎組件
├── views/           # 路由組件
├── store/           # Vuex相關
├── router/          # 路由配置
├── api/             # 接口封裝
└── utils/           # 工具函數
  1. 代碼規范

    • 使用ESLint + Prettier統一代碼風格

    • 添加JSDoc注釋

    • 編寫組件文檔(可使用Storybook)

  2. 測試策略

    • 單元測試:Jest + Vue Test Utils

    • E2E測試:Cypress

  3. 學習路徑推薦

通過本文的系統學習,您已經掌握了Vue單文件組件和腳手架工程化開發的核心知識。接下來可以通過實際項目實踐來鞏固這些概念,逐步提升Vue開發技能水平。

  1. 掌握單文件組件開發

  2. 熟悉Vue CLI工程化配置

  3. 學習Vue Router和Vuex

  4. 了解服務端渲染(Nuxt.js)

  5. 探索Vue 3新特性

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89112.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89112.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89112.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

架構設計之計算高性能——單體服務器高性能

架構設計之計算高性能——單體服務器高性能 高性能是每個程序員共同的追求&#xff0c;無論是開發系統&#xff0c;還是僅僅只是寫一段腳本&#xff0c;都希望能夠達到高性能的效果&#xff0c;而高性能又是軟件系統設計中最復雜的一步。無論是開發千萬級并發的電商系統&#…

Unity燈光面板環境設置

在Unity中&#xff0c;環境設置&#xff08;Environment Lighting&#xff09; 是燈光面板&#xff08;Lighting Window&#xff09;的核心功能之一&#xff0c;用于控制場景的全局光照效果&#xff0c;包括天空盒、環境光、反射和霧效等。這些設置直接影響場景的整體氛圍和真實…

MySQL語句優化案例

1.案例in查詢條件很慢其中in中共115個select id,detail_id,request,response,utime,ctime from response_detaill where detaill_id in (26371986, 26372242, 26371984, 26371990, 26400150, 26371988, 26371994, 26371992,26371998, 26371996, 26371970, 26371968, 2637197…

能行為監測算法:低成本下的高效管理

AI監控智慧公司管理&#xff1a;降本增效的實踐與突破一、背景&#xff1a;經濟壓力下的管理轉型需求在經濟下行周期&#xff0c;企業面臨人力成本攀升、管理效率低下、安全風險頻發等多重挑戰。傳統監控依賴人工巡檢&#xff0c;存在響應滯后、誤判率高、數據孤島等問題&#…

當前(2024-07-14)視頻插幀(VFI)方向的 SOTA 基本被三篇頂會工作占據,按“精度-速度-感知質量”三條線總結如下,供你快速定位最新范式

當前&#xff08;2024-07-14&#xff09;視頻插幀&#xff08;VFI&#xff09;方向的 SOTA 基本被三篇頂會工作占據&#xff0c;按“精度-速度-感知質量”三條線總結如下&#xff0c;供你快速定位最新范式。感知質量最佳&#xff1a;CVPR 2024 ? PerVFI ? 關鍵詞&#xff1a;…

開源 python 應用 開發(七)數據可視化

最近有個項目需要做視覺自動化處理的工具&#xff0c;最后選用的軟件為python&#xff0c;剛好這個機會進行系統學習。短時間學習&#xff0c;需要快速開發&#xff0c;所以記錄要點步驟&#xff0c;防止忘記。 鏈接&#xff1a; 開源 python 應用 開發&#xff08;一&#xf…

基于深度學習的情感分析模型:從文本數據到模型部署

前言 情感分析&#xff08;Sentiment Analysis&#xff09;是自然語言處理&#xff08;NLP&#xff09;領域中的一個重要應用&#xff0c;它通過分析文本數據來判斷文本的情感傾向&#xff0c;例如正面、負面或中性。隨著社交媒體的興起&#xff0c;情感分析在市場調研、品牌管…

使用python 實現一個http server

下面是一個使用 Python 內置庫 http.server 的簡單 HTTP 服務器實現。不需要安裝任何第三方庫&#xff0c;非常適合做演示或開發測試用。 from http.server import HTTPServer, BaseHTTPRequestHandlerclass SimpleHTTPRequestHandler(BaseHTTPRequestHandler):def do_GET(self…

Redis技術筆記-主從復制、哨兵與持久化實戰指南

目錄 前言 一、Redis主從復制 &#xff08;一&#xff09;Redis主從復制介紹 &#xff08;二&#xff09;基本環境準備 &#xff08;三&#xff09;工作原理 &#xff08;四&#xff09;結構模式 &#xff08;五&#xff09;一主一從&#xff08;無密碼&#xff09; 配置…

sundog公司的SilverLining SDK庫實現3d動態云層和下雨、下雨、雨夾雪效果

OSG系列文章目錄 文章目錄OSG系列文章目錄前言一、3d動態云與下雨、下雪效果不能同時出現二、3d動態云與下雨、下雪效果不能同時出現的原因三、解決辦法&#xff1a;前言 先看下效果&#xff1a;下雨 效果&#xff1a;下雪 效果&#xff1a;雨夾雪 &#x1f324;? Sundo…

Python:簡易的 TCP 服務端與客戶端示例

下面是一個完整的 TCP 服務端與客戶端示例&#xff0c;適用于 Python 3&#xff0c;使用 socket 模塊&#xff0c;并正確處理了中文傳輸與異常情況&#xff0c;支持基本的多輪通信。TCP 服務端&#xff08;server_tcp.py&#xff09;import socket HOST 127.0.0.1 # 監聽本地…

文心一言 4.5 開源深度剖析:中文霸主登場,開源引擎重塑大模型生態

> 百度用一場徹底的開源風暴,宣告中文大模型進入性能與普惠并重的新紀元——這里沒有技術黑箱,只有開發者手中躍動的創新火花。 2025年,當全球大模型競賽進入深水區,百度文心一言4.5的開源如同一顆重磅炸彈,徹底打破了“閉源即領先”的固有認知。這一次,中國團隊不…

解決“Windows 無法啟動服務”問題指南

錯誤1067&#xff1a;進程意外終止一、重啟計算機有時系統出現臨時性的服務故障&#xff0c;重啟計算機就可以有效解決問題。需要注意的是&#xff0c;在重啟之前&#xff0c;需要保存好所有未保存的工作&#xff0c;以免數據丟失。重啟完成后&#xff0c;再次嘗試啟動相關服務…

銀河麒麟(Kylin) - V10 GFB高級服務器操作系統ARM64部署昇騰910b訓練機以及Docker安裝

銀河麒麟(Kylin) - V10 GFB高級服務器操作系統ARM64部署昇騰910b訓練機以及Docker安裝 原因 項目需要使用Deepseek-r1-distill-qwen-32b來做訓練&#xff0c;在此記錄 測試環境 服務器配置 型號&#xff1a;G5680V2 CPU&#xff1a;CPU 4Kunpeng 920-5250 NPU&#xff1a;NP…

消息中間件(Kafka VS RocketMQ)

目錄 一、概要介紹 二、架構與原理 三、消費模式 1、Kafka—純拉模式 2、RocketMQ—拉模式 3、RocketMQ—推模式 4、模式對比 四、特殊消息 1、順序消息 2、消息過濾 3、延遲消息 4、事務消息 5、廣播消息 五、高吞吐 六、高可用 七、高可靠 一、概要介紹 Apa…

MyBatis級聯查詢深度解析:一對多關聯實戰指南

MyBatis級聯查詢深度解析&#xff1a;一對多關聯實戰指南在實際企業級開發中&#xff0c;單表操作僅占20%的場景&#xff0c;而80%的業務需求涉及多表關聯查詢。本文將以一對多關系為例&#xff0c;深入剖析MyBatis級聯查詢的實現原理與最佳實踐&#xff0c;助你掌握高效的數據…

搜索框的顯示與隱藏(展開與收起)

效果如下直接上代碼v-if"showAll || 0 < 3" 的意思是&#xff1a;如果 showAll 為 true&#xff0c;或者 0 小于 3&#xff0c;這個表單項就會顯示。<el-form :inline"true" class"demo-form-inline" size"default" label-width…

01 啟動流程實例

前言本文基于 Activiti 7.0.0.GA 源碼&#xff0c;研究 Activiti 如何啟動一個流程實例。審批流程圖如下圖&#xff0c;在此流程圖中&#xff0c;存在兩個UserTask節點&#xff0c;第一個節點是主管審批&#xff0c;第二個節點是產品經理審批&#xff0c;兩個節點中間有一個排他…

LeetCode--47.全排列 II

解題思路&#xff1a;1.獲取信息&#xff1a;給定一個可包含重復數字的序列&#xff0c;按任意順序返回所有不重復的全排列提示信息&#xff1a;1 < nums.length < 8-10 < nums[i] < 102.分析題目&#xff1a;相較于46題&#xff0c;它多限制了一個條件&#xff0c…

vue3 服務端渲染時請求接口沒有等到數據,但是客戶端渲染是請求接口又可以得到數據

原因是: 服務端請求 后端接收到 請求 ‘Content-Type’: ‘application/x-www-form-urlencoded; charsetUTF-8’ 直接返回錯誤的code 200000 增加 data: {} 服務端請求 后端接收到 請求 ‘Content-Type’: ‘application/json; charsetUTF-8’ 服務端請求就可以得到數據 expo…