webpack中loader的执行顺序是从右到左执行的,因为webpack 内部采用的函数组合是 compose 这种形式,compose 函数式组合的特点就是 从右到左执行。

    函数组合是函数式编程的重要思想,分为 pipe 和 compose 两种形式。

    pipe 采用的是 从左到右的 形式。
    compose 采用的是 从右到左的形式。

    1. // 实现 compose 函数
    2. // compose 函数的特点是接受若干个函数参数,其中的每一个参数函数都只接受一个参数,
    3. // compose 函数返回一个函数,这个返回函数也只接受一个参数
    4. function compose(...funcs) {
    5. return x => {
    6. let length = funcs.length;
    7. if (!length) return x;
    8. if (length === 1) return funcs[0](x);
    9. /**
    10. * 第一次:preValue 接受的是 x 为 0 curValue 接受的是 add1 add1(0):1
    11. * 第二次:preValue 接受的是 x 为 1 curValue 接受的是 add1 add1(1):2
    12. * 第三次:preValue 接受的是 x 为 2 curValue 接受的是 mul3 mul3(1):6
    13. * 第三次:preValue 接受的是 x 为 6 curValue 接受的是 div2 div2(6):3
    14. */
    15. return funcs.reduceRight((preValue, curValue) => curValue(preValue), x);
    16. }
    17. }
    18. // test
    19. const add1 = (x) => x + 1;
    20. const mul3 = (x) => x * 3;
    21. const div2 = (x) => x / 2;
    22. const operate = compose(div2, mul3, add1, add1)
    23. console.log(operate(0));