1 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
其實(shí)為啥是從右往左,而不從左往右,只是Webpack選擇了compose方式,而不是pipe的方式而已,在技術(shù)上實(shí)現(xiàn)從左往右也不會(huì)有難度
在Uninx有pipeline的概念,平時(shí)應(yīng)該也有接觸,比如?ps aux | grep node
,這些都是從左往右的。
但是在函數(shù)式編程中有組合的概念,我們數(shù)學(xué)中常見(jiàn)的f(g(x))
,在函數(shù)式編程一般的實(shí)現(xiàn)方式是從右往左,如
const compose = (...fns) => x => fns.reduceRight((v, f) => f(v), x);
const add1 = n => n + 1; //加1
const double = n => n * 2; // 乘2
const add1ThenDouble = compose(
? double,
? add1
);
add1ThenDouble(2); // 6
// ((2 + 1 = 3) * 2 = 6)?
這里可以看到我們先執(zhí)行的加1,然后執(zhí)行的double,在compose中是采用reduceRight,所以我們傳入?yún)?shù)的順序編程了先傳入double,后傳入add1
那么其實(shí)也可以實(shí)現(xiàn)從左往右
const pipe = (...fns) => x => fns.reduce((v, f) => f(v), x);
const add1ThenDouble = pipe(
? add1,
? double
);
add1ThenDouble(2); // 6
// ((2 + 1 = 3) * 2 = 6)
所以只不過(guò)webpack選擇了函數(shù)式編程的方式,所以loader的順序編程了從右往左,如果webpack選擇了pipe的方式,那么大家現(xiàn)在寫(xiě)loader的時(shí)候的順序就變成從左往右了
compose :?
require("style-loader!css-loader!sass-loader!./my-styles.sass");
pipe :?
require("./my-styles.sass!sass-loader!css-loader!style-loader");
添加回答
舉報(bào)