Vue中import from的來源--省略尾碼與載入文件夾

来源:https://www.cnblogs.com/eternityz/archive/2020/02/07/12273031.html
-Advertisement-
Play Games

Vue使用import ... from ...來導入組件,庫,變數等。而from後的來源可以是js,vue,json。這個是在webpack.base.conf.js中設置的: 這裡的extensions指定了from後可導入的文件類型。 而上面定義的這3類可導入文件,js和vue是可以省略尾碼的 ...


Vue使用import ... from ...來導入組件,庫,變數等。而from後的來源可以是js,vue,json。這個是在webpack.base.conf.js中設置的:

module.exports = {
  resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      '@': resolve('src')
    }
  }
...
}

這裡的extensions指定了from後可導入的文件類型。

而上面定義的這3類可導入文件,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'

則編譯出錯。

那麼,若test.vue,test.js同時存在於同一個文件夾下,則import的導入優先順序是:

js>vue

from後的來源除了文件,還可以是文件夾:

import test from './components'

該情況下的邏輯是:

if(package.json存在 && package.main欄位存在 && package.main指定的js存在) {
    取package.main指定的js作為from的來源,即使該js可能格式或內容錯誤
} else if(index.js存在){
    取index.js作為from的來源
} else {
    取index.vue作為from的來源
}

因此若from的來源是文件夾,那麼在package.json存在且設置正確的情況下,會預設載入package.json;若不滿足,則載入index.js;若不滿足,則載入index.vue。

註意載入文件夾的形式,與上面省略尾碼的形式是完全相同的。所以一個省略尾碼的from來源,有可能是.vue,.js,或者文件夾。

例:

查看Vue-Element-Admin的源碼,其中有個Layout.vue:

20181102164039187

裡面調用import導入了3個組件:

import { Navbar, Sidebar, AppMain } from './components'

這裡,from的路徑'./components'就是個文件夾。

於是,按照前面的規則,首先查看文件夾下是否有package.json:

20181102164039207

並沒有package.json。

package.json不存在,那麼查找index.js。index.js是存在的,於是載入。

打開index.js:

export { default as Navbar } from './Navbar'

export { default as Sidebar } from './Sidebar'

export { default as AppMain } from './AppMain'

可以看到3個export,都沒有尾碼,所以其類型vue,js和文件夾都是有可能的。

同一級目錄下,存在AppMain.vue和Navbar.vue,沒有同名js,所以可以判斷出這兩個都是載入的vue文件,即:

export { default as Navbar } from './Navbar.vue'

export { default as AppMain } from './AppMain.vue'

而Sidebar只有一個文件夾,所以是載入的文件夾。打開Sidebar文件夾:

優先找package.json。不存在。

然後找index.js,不存在。

最後找index.vue,存在。

於是:

export { default as Sidebar } from './Sidebar'

相當於:

export { default as Sidebar } from './Sidebar/index.vue'

這樣,Layout.vue就通過載入一個文件夾,獲得了3個vue組件。

站在巨人的肩膀上摘蘋果:

原文:https://blog.csdn.net/fyyyr/article/details/83657828


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 屬性分為固有屬性property和自定義屬性attribute 固有屬性查看 固有屬性可以通過ele.property 來獲取,自定義屬性不行 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document ...
  • 操作節點的方法 appendChild() insertBefore() replaceChild() cloneNode() normalize() splitText() sppendChild() 追加子元素 .firstElementChild() 第一個子元素節點 返回值是被操作的那個子節 ...
  • Vue之計算屬性Computed和屬性監聽Watch,Computed和Watch的區別 ...
  • 如何使用css隱藏滾動條 如何隱藏滾動條,同時仍然可以在任何元素上滾動?首先,如果需要隱藏滾動條併在內容溢出時顯示滾動條,只需要設置overflow:auto樣式即可。想要完全隱藏滾動條只需設置overflow:hidden即可,但是這樣一來將導致元素內容不可滾動。時至今日,還沒有任何一條CSS規則 ...
  • 根據下標更改時 常規更改 splice方法 實例 例子 1 在本例中,我們將創建一個新數組,並向其添加一個元素: 輸出: 例子 2 在本例中我們將刪除位於 index 2 的元素,並添加一個新元素來替代被刪除的元素: 輸出: 例子 3 在本例中我們將刪除從 index 2 ("Thomas") 開始 ...
  • import: html文件中,通過script標簽引入js文件。 而vue中,通過import xxx from xxx路徑的方式導入文件,不光可以導入js文件。 “xxx”指的是為導入的文件起一個名稱,不是指導入的文件的名稱,相當於變數名。 “xxx路徑”指的是文件的相對路徑. src下有com ...
  • 今天再重新配置老項目node打包環境的時候遇到了一個問題。 在打包的時候報: (這裡需要強調一下,安裝環境的使用一定要 save dev或者是 save,否則欲哭無淚啊) 很明顯,這是node一些包的版本對應不上的問題。。。 站在巨人的肩膀上摘蘋果: 原文:https://blog.csdn.net ...
  • vue ls NPM Yarn Usage Vue storage API. Global Context API Vue.ls.get(name, def) Vue.ls.set(name, value, expire) Vue.ls.remove(name) Vue.ls.clear() Vue ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...