[英]Specify loader configuration from webpack config file in request
是否可以通過別名中的請求從webpack配置文件中指定加載程序? 我正在尋找這種想法的實現:
webpack配置
loaders: [
{ // loaderA - default
test: /\.js/,
loaders: ['loader-a1', 'loader-a2']
},
{ // loaderB - I want to enable this in require
test: /\.js/,
loaders: ['loader-b1', 'loader-b2']
}
]
用法
默認值-將使用['loader-a1', 'loader-a2']
require('./module');
自定義-將使用['loader-b1', 'loader-b2']
:禁用loaderA
並啟用loaderB
require('!loaderB!./module');
我的示例可以這樣寫(但不是我的答案):
weback配置
loaders: [
{
test: /\.js/,
loaders: ['loader-a1', 'loader-a2']
}
]
用法
默認
require('./module');
習慣
require('!loader-b1!loader-b2!./module');
1.按要求創建裝載機鏈可能很長且很干。 這個要求有時可能真的很長
require('!loader-b1!loader-b2!loader-b3!loader-b4!./module');
2.在需求加載器中很難使用變量
在webpack.config.js
創建變量可以輕松處理加載程序的不同用例。 在內聯require
包裝相同的案例太糟糕了
weback配置
loaders: [
{
test: /\.js/,
loaders: [
`loader-a1?${JSON.stringify({
sourceMap: DEBUG,
minimize: !DEBUG
})}`,
`loader-a2?${JSON.stringify({
sourceMap: DEBUG,
minimize: !DEBUG
})}`
]
}
]
用法
默認-在加載程序中使用變量
require('./module');
自定義-在加載程序中使用變量-看起來太糟糕了,您必須公開構建變量DEBUG
require(`!loader-b1?${JSON.stringify({ sourceMap: DEBUG, minimize: !DEBUG })}!loader-b2?${JSON.stringify({ sourceMap: DEBUG, minimize: !DEBUG })}!./module`);
我用單詞別名 。
解決方案是resolveLoader.alias
webpack配置
module: {
loaders: [
{ // loaderA - default
test: /\.js/,
loaders: ['loader-a1', 'loader-a2']
}
]
},
resolveLoader: {
alias: {
loaderB: ['loader-b1', 'loader-b2'] // I want to enable this in require
}
}
用法
默認值-將使用['loader-a1','loader-a2']
require('./module');
自定義-將使用['loader-b1','loader-b2']:禁用loaderA並啟用loaderB
require('!loaderB!./module');
它可能不是您要找的答案 ,但是您可以修飾JavaScript文件擴展名,並為每個文件定義一個加載器
loaders: [
{ // loaderA - default
test: /\(.a)?.js/,
loaders: ['loader-a1', 'loader-a2']
},
{ // loaderB - I want to enable this in require
test: /\.b.js/,
loaders: ['loader-b1', 'loader-b2']
}
]
您可能希望使擴展名之一為可選,以便它可以回退到外部庫或其他JS文件。
您還可以使用includes
屬性,該屬性將使用正則表達式,並告訴webpack僅在特定文件夾路徑中查找文件(您要使用loaderA運行)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.