vue3項目目錄結(jié)構(gòu)示例詳解
一、vue3項目的目錄結(jié)構(gòu)詳解
- node_modules:通過
npm install下載安裝的項目依賴包 - public:存放靜態(tài)資源公共資源,不會被壓縮合并
- —3DModel:存放.glb3D模型
- —favicon.ico:網(wǎng)站圖標
- —index.html:首頁入口.html文件
- src:項目開發(fā)主要文件夾
- —api
- —assets:靜態(tài)文件,存放圖片
- —components:存放組件
- —store:與vuex相關(guān)
- —styles:存放樣式
- —utils
- —views:界面組件
- —App.vue:根組件
- —main.js:入口文件
- —router.js:存放路由,實現(xiàn)界面跳轉(zhuǎn)
- .gitignore:用來配置那些文件不歸git管理
- package.json:項目配置和包管理文件(項目依賴和技術(shù))
- README.md:說明文檔,主要看項目運行的命令
- vue.config.js:項目配置信息:跨域proxy代理
二、部分主要文件詳解
1、index.html
<%= BASE_URL %>
<%= htmlWebpackPlugin.options.title %>
將vue實例掛載到id為#app的dom上
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico" rel="external nofollow" >
<link rel="stylesheet" rel="external nofollow" >
<title>
<%= htmlWebpackPlugin.options.title %>
</title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
Please enable it to continue.</strong>
</noscript>
<!-- 將vue實例掛載到id為#app的dom上 -->
<div id="app"></div>
<!-- built files will be auto injected -->
<style>
/* 公共樣式可以寫在這里 */
</style>
</body>
</html>
2、main.js(main.ts)
導入組件、路由等
vue3使用createApp這個api返回一個應用實例,并且可以鏈式調(diào)用;這也是與vue2.0不同之處,vue2.0是通過new Vue() 來創(chuàng)建一個vue實例的
createApp(App).use(store).use(router).mount(‘#app’);
import {
createApp
} from 'vue'
import App from './App.vue'
import router from './router'
import store from './store/index'
import * as Api from './api/index.js'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import 'dayjs/locale/zh-cn' //中文
import locale from 'element-plus/lib/locale/lang/zh-cn' //中文
import * as ElIcons from '@element-plus/icons-vue'
import permission from '@/constants/permission';
import UUID from 'vue-uuid';
import "vis/dist/vis.css";
var cesium = require('cesium/Cesium.js');
var widgets = require('cesium//Widgets/widgets.css');
// 創(chuàng)建實例
const app = createApp(App);
// 全局變量、屬性
app.config.globalProperties.$api = Api
app.config.globalProperties.Cesium = cesium
app.config.globalProperties.Widgets = widgets
// 添加widow對象
window.Cesium = cesium;
// 統(tǒng)一注冊Icon圖標
for (const iconName in ElIcons) {
app.component(iconName, ElIcons[iconName])
}
// 自定義指令實現(xiàn)權(quán)限控制
app.directive("permission", permission)
// app.use() 注冊全局組件
app.use(ElementPlus, {
locale
});
app.use(store);
app.use(router);
app.use(UUID);
// 應用實例掛載到#app中,一定要放在最后面
app.mount('#app');
3. package.json
a. scripts
可以使用npm run serve或yarn serve查看項目效果,就是因為有package.json中的scripts起到了作用。
能使用vue-cli-service是因為vue-cli自動安裝了cli-service這個工具
- serve : 在開發(fā)時用于查看效果的命令,視頻中演示看一下效果
- build : 打包打碼,一般用于生產(chǎn)環(huán)境中使用
- lint : 檢查代碼中的編寫規(guī)范
- b. dependencies 生產(chǎn)環(huán)境 devDependencies 開發(fā)環(huán)境
這兩個都是用來記錄安裝包信息的,
生產(chǎn)環(huán)境:就是代碼已經(jīng)上線,放到了正式的服務器上,公司開始運營去賺錢的代碼。
開發(fā)環(huán)境: 作為一個程序員,每天作的事情都是在開發(fā)環(huán)境中,編寫代碼、測試代碼、修改 Bug。也就說這些代碼沒有上線。
dependencies下的包是生產(chǎn)環(huán)境中必須用到的,當然開發(fā)環(huán)境也需要。devDependencies是只有開發(fā)環(huán)境中使用的,上線后這些包就沒用了,打包后也不會打包進去的代碼。
"name": "simulator",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"@element-plus/icons-vue": "^1.1.4",
"axios": "^0.26.1",
"cesium": "*",
"core-js": "^3.8.3",
"element-plus": "^2.1.2",
"file-loader": "^6.2.0",
"js-md5": "^0.7.3",
"node-sass": "^7.0.1",
"nprogress": "^0.2.0",
"pdfjs-dist": "^2.4.456",
"sass-loader": "^12.6.0",
"url-loader": "^4.1.1",
"vis": "^4.21.0-EOL",
"vue": "^3.2.13",
"vue-pdf": "^4.3.0",
"vue-router": "^4.0.14",
"vue-uuid": "^3.0.0",
"vue3-pdf": "^4.2.6",
"vuedraggable": "^4.1.0",
"vuex": "^4.0.2"
},
"devDependencies": {
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7",
"@babel/plugin-proposal-optional-chaining": "^7.16.7",
"@babel/plugin-proposal-private-methods": "^7.16.11",
"@types/pdfjs-dist": "^2.10.378",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"copy-webpack-plugin": "^5.1.2",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/vue3-essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "@babel/eslint-parser"
},
"rules": {
"vue/multi-word-component-names": "off",
"no-unused-vars": "off",
"no-undef": "off"
}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead",
"not ie 11"
]
}
三、其他說明
1. node版本錯誤
注意,不同的node版本,安裝依賴包可能會報錯
在vue3項目中,我使用的node版本是 v14.15.1
推薦nvm對不同的node版本進行管理
nvm :node版本管理器
2. 如何調(diào)用全局屬性
如果在其他.vue文件中你使用的是<script setup>,你會發(fā)現(xiàn)直接使用this.$api會報錯,
這里提供一個新的api:getCurrentInstance 獲取vue當前實例,掛載在全局上的東西都需要通過實例去拿
未親測過,感興趣的可以親測過告訴我可行性~
import { getCurrentInstance } from "vue";
// 拿到實例
const _this = getCurrentInstance ();
// 在實例中有個ctx上下文
_this.ctx.$api
我直接用的是<script>即vue2.0寫法編寫js代碼,則可以直接使用this.$api
3. vue文件中應用vue3.0的api
vue3.0中用setup去包含了所有的鉤子等,所有使用的鉤子都需要提前導入
總結(jié)
到此這篇關(guān)于vue3項目目錄結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)vue3項目目錄結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3中的element-plus表格實現(xiàn)代碼
這篇文章主要介紹了Vue3中的element-plus表格實現(xiàn)代碼,用組件屬性實現(xiàn)跳轉(zhuǎn)路由,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2024-05-05
vuecli3.0腳手架搭建及不同的打包環(huán)境配置vue.config.js的詳細過程
這篇文章主要介紹了vuecli3.0腳手架搭建及不同的打包環(huán)境配置vue.config.js的詳細過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01
ElementUi中select框在頁面滾動時el-option超出元素區(qū)域的問題解決
本文主要介紹了ElementUi中select框在頁面滾動時el-option超出元素區(qū)域的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-08-08
vue-cli解決IE瀏覽器sockjs-client錯誤方法
這篇文章主要為大家介紹了vue-cli解決IE瀏覽器sockjs-client錯誤方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08
vue 自定義提示框(Toast)組件的實現(xiàn)代碼
這篇文章主要介紹了vue 自定義提示框(Toast)組件的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08

