Vue中import from的來(lái)源及省略后綴與加載文件夾問(wèn)題
Vue使用import ... from ...來(lái)導(dǎo)入組件,庫(kù),變量等。而from后的來(lái)源可以是js,vue,json。這個(gè)是在webpack.base.conf.js中設(shè)置的:
module.exports = {
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'@': resolve('src')
}
}
...
}
這里的extensions指定了from后可導(dǎo)入的文件類型。
而上面定義的這3類可導(dǎo)入文件,js和vue是可以省略后綴的:
import test from './test.vue'
等同于:
import test from './test'
同理:
import test from './test.js'
等同于:
import test from './test'
json不可以省略后綴:
import test from './test.json'
省略為:
import test from './test'
則編譯出錯(cuò)。
那么,若test.vue,test.js同時(shí)存在于同一個(gè)文件夾下,則import的導(dǎo)入優(yōu)先級(jí)是:
js>vue
from后的來(lái)源除了文件,還可以是文件夾:
import test from './components'
該情況下的邏輯是:
if(package.json存在 && package.main字段存在 && package.main指定的js存在) {
取package.main指定的js作為from的來(lái)源,即使該js可能格式或內(nèi)容錯(cuò)誤
} else if(index.js存在){
取index.js作為from的來(lái)源
} else {
取index.vue作為from的來(lái)源
}
因此若from的來(lái)源是文件夾,那么在package.json存在且設(shè)置正確的情況下,會(huì)默認(rèn)加載package.json;若不滿足,則加載index.js;若不滿足,則加載index.vue。
注意加載文件夾的形式,與上面省略后綴的形式是完全相同的。所以一個(gè)省略后綴的from來(lái)源,有可能是.vue,.js,或者文件夾。
例:
查看Vue-Element-Admin的源碼,其中有個(gè)Layout.vue:

里面調(diào)用import導(dǎo)入了3個(gè)組件:
import { Navbar, Sidebar, AppMain } from './components'
這里,from的路徑'./components'就是個(gè)文件夾。
于是,按照前面的規(guī)則,首先查看文件夾下是否有package.json:

并沒(méi)有package.json。
package.json不存在,那么查找index.js。index.js是存在的,于是加載。
打開(kāi)index.js:
export { default as Navbar } from './Navbar'
export { default as Sidebar } from './Sidebar'
export { default as AppMain } from './AppMain'
可以看到3個(gè)export,都沒(méi)有后綴,所以其類型vue,js和文件夾都是有可能的。
同一級(jí)目錄下,存在AppMain.vue和Navbar.vue,沒(méi)有同名js,所以可以判斷出這兩個(gè)都是加載的vue文件,即:
export { default as Navbar } from './Navbar.vue'
export { default as AppMain } from './AppMain.vue'
而Sidebar只有一個(gè)文件夾,所以是加載的文件夾。打開(kāi)Sidebar文件夾:

優(yōu)先找package.json。不存在。
然后找index.js,不存在。
最后找index.vue,存在。
于是:
export { default as Sidebar } from './Sidebar'
相當(dāng)于:
export { default as Sidebar } from './Sidebar/index.vue'
這樣,Layout.vue就通過(guò)加載一個(gè)文件夾,獲得了3個(gè)vue組件。
總結(jié)
以上所述是小編給大家介紹的Vue中import from的來(lái)源及省略后綴與加載文件夾,希望對(duì)大家有所幫助!
相關(guān)文章
解決vue單頁(yè)面應(yīng)用中動(dòng)態(tài)修改title問(wèn)題
這篇文章主要介紹了解決vue單頁(yè)面應(yīng)用中動(dòng)態(tài)修改title問(wèn)題,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06
vue之監(jiān)聽(tīng)頁(yè)面是否以到底部
這篇文章主要介紹了vue之監(jiān)聽(tīng)頁(yè)面是否以到底部問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
vue3配置permission.js和router、pinia實(shí)現(xiàn)路由攔截的簡(jiǎn)單步驟
這篇文章主要介紹了如何在場(chǎng)景網(wǎng)站中實(shí)現(xiàn)對(duì)未登錄用戶訪問(wèn)的攔截,通過(guò)配置Pinia,創(chuàng)建一個(gè)user.js文件來(lái)存儲(chǔ)用戶數(shù)據(jù),并在main.js中進(jìn)行配置,同時(shí)通過(guò)在router目錄下創(chuàng)建permission.js文件,可以實(shí)現(xiàn)對(duì)未登錄用戶的攔截,需要的朋友可以參考下2024-11-11
vue-cli基礎(chǔ)配置及webpack配置修改的完整步驟
這篇文章主要給大家介紹了關(guān)于vue-cli基礎(chǔ)配置及webpack配置修改的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用vue-cli具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
vue elementUI table 自定義表頭和行合并的實(shí)例代碼
這篇文章主要介紹了vue elementUI table 自定義表頭和行合并的實(shí)例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05

