webpack配置別名alias出現的錯誤匹配

2021-09-19 10:31:27 字數 1530 閱讀 2370

@(webpack)

webpack是一款功能強大的前端構建工具,不僅僅是針對js,它也可通過各種loader來構建相關的less,html,image等各種資源,將webpack配合流程制定工具gulp結合起來,則更為方便的自定義工作流程。

[toc]

在webpack.config.js中,通過設定resolve屬性可以配置查詢「commonjs/amd模組」的基路徑,也可以設定搜尋的模組字尾名,當然,最後乙個就是我們要講的別名alias設定。

在模組開發過程中,我們可能會對可以復用的元件封裝成乙個可被git管控的模組,並在引用的過程中採用帶版本號的方式引用,這就要求我們在webpack.config.js中新增相關alias配置,如

...

module.exports = ,

output: ,

resolve:

}}

有乙個簡單的需求,即在index.js中,可這樣引用:

var slider = require('mod/slider');

var sliderv3 = require('mod/slider/0.0.3');

var sliderv1 = require('mod/slider/0.0.1');

結果和我們預想的會有不同,webpack的別名處理邏輯會使這三個變數的引用都為slider這個變數所對應的模組,要想解決這種情況,只能深入原始碼。

先貼上部分原始碼:

var aliasmap = this.aliasmap;

resolver.plugin("module", function(request, callback) ;

if(newrequest.module) return this.doresolve("module", obj, newcallback);

if(newrequest.directory) return this.doresolve("directory", obj, newcallback);

return this.doresolve(["file", "directory"], obj, newcallback);}}

}return callback();

}.call(this));

這段簡單的**所做的就是針對別名做對映,獲取到對應的模組。

之所以出現上節的問題,就是因為這句判斷

if(request.request.indexof(aliasvalue + "/") !== 0 && request.request != aliasvalue)
webpack的作者貌似有些多此一舉了,或者說是在我們的應用場景中並沒有考慮到,所以僅僅針對這個判斷進行修改就可以滿足需求。修改非常簡單,進行嚴格相等的判斷:

if(request.request != aliasvalue)

webpack別名配置

還在為檔案引入路徑的點點槓發愁?webpack在resolve解析屬性裡貼心地配置了別名功能,讓你輕鬆地找到檔案路徑。不過,對於windows使用者,奇葩的反斜槓 路徑分隔符可能會讓你抓狂,不過不用擔心,nodejs提供了乙個貼心的path模組自動糾正路徑分隔符。只需要在配置檔案裡引入path va...

webpack路徑的別名配置

如果還不知道webpack的同學,可以先自行去了一些webpack,傳送門webpack詳細入門整理 我們在使用模組化開發的時候都是使用import或者require去匯入我們的模組,但是當我們專案較大,模組較多的時候,我們用相對路徑匯入是一件麻煩的事情。那有沒有一種更簡便的方法去匹配路徑呢?這時我...

webpack中關於路徑別名

起路徑別名 對於vue cli2中,在webpack config js中 resolve 對於vue cli腳手架版本大於等於3中,在vue.config.js中 module.exports 路徑別名可以使用在import語法中,如樣式檔案的引入 import xyz 或 import xx f...