npm 包 broccoli-tree-traverser 使用教程

阅读时长 11 分钟读完

什么是 broccolo-tree-traverser

Broccoli-tree-traverser 是一个 NPM 包,它提供的是对 Broccoli 的树结构进行遍历的模块。Broccoli 是一个基于文件系统的构建工具,但是在要对项目进行 Builder 时,需要我们对整个项目生成一颗树,才可以进行各种操作。而这颗树也是我们以后会频繁操作到的。

安装方法

如何遍历树

使用 broccoli-tree-traverser 进行遍历的方法非常简单,它只提供了一个函数 accept(tree, visitor),可以传入一个木头结构和一个访问者的函数。在访问者函数中,定义节点被访问的行为。当访问者遍历到一个节点时,只要调用一下 accept(Node, visitor) 就可以遍历到当前节点的子树。这样递归进行就能遍历整个树了。因为遍历是传入 Visitor,所以 Visitor 的返回值可以决定是否需要遍历子树或是停止遍历。

-- -------------------- ---- -------
-- --------
----- --------- - ----------------------------------
----- -- - --------------
----- ---- - ----------------

-- ------------------
-------- --------------- -
    ----------------------------
    ------ -----
-

-- -----
----- ---- - -
    --------- ----
    --------- -
        -
            --------- ----
            --------- -
                -
                    --------- ------
                    --------- -
                        -
                            --------- --------
                            --------- -
                                -
                                    --------- ----------
                                    --------- -
                                        -
                                            --------- ------------
                                            ---------- -----------
                                            ----------- -----------
                                            ------------ -----
                                        -
                                    -
                                -
                            -
                        -
                    -
                --
                -
                    --------- --------
                    --------- --
                -
            -
        --
        -
            --------- --------
            --------- -
                -
                    --------- ------------
                    --------- --
                -
            -
        --
    -
-

-- ------------------
---------------------- -----------

遍历的同时修改节点

Broccoli-tree-traverser 在遍历时,可以同时进行节点的修改,在遍历访问者的拓展接口上,它还提供了一个 enter 函数,可以在进入节点时进行修改。同时,还可以用 leave 函数,在离开节点时进行修改。node 的最终状态,就是 enter 和 leave 函数重写后的结果。

-- -------------------- ---- -------
-- --------
----- --------- - ----------------------------------
----- -- - --------------
----- ---- - ----------------

-- ------------------
-------- --------------- -
    ----------------------------
    ------ -----
-

-- ----------------------------------
-------- ------------- -
    -------------- -- -------
    ------ -----
-

-------- ------------- -
    --------------- -- -------
    ------ -----
-

-- -----
----- ---- - -
    --------- ----
    --------- -
        -
            --------- ----
            --------- -
                -
                    --------- ------
                    --------- -
                        -
                            --------- --------
                            --------- -
                                -
                                    --------- ----------
                                    --------- -
                                        -
                                            --------- ------------
                                            ---------- -----------
                                            ----------- -----------
                                            ------------ -----
                                        -
                                    -
                                -
                            -
                        -
                    -
                --
                -
                    --------- --------
                    --------- --
                -
            -
        --
        -
            --------- --------
            --------- -
                -
                    --------- ------------
                    --------- --
                -
            -
        --
    -
-

-- ----------------
---------------------- ---------- -
    ------ --------
    ------ -------
---

-------------------------------- ----- ---

遍历子树,或是跳过子树的某个节点

在被访问者回调的同时,返回一个 boolean 值。如果返回 true,那么会访问子树,之后进入子树会存在一个遍历的指针;如果返回 false,那么将不会访问子树。如果使用 async/runinng.run 抛出异常,则遍历将被立即跳出。

-- -------------------- ---- -------
-- --------
----- --------- - ----------------------------------
----- -- - --------------
----- ---- - ----------------

-- ------------------
-------- --------------- -
    ----------------------------
    ------ -----
-

-- -----
----- ---- - -
    --------- ----
    --------- -
        -
            --------- ----
            --------- -
                -
                    --------- ------
                    --------- -
                        -
                            --------- --------
                            --------- -
                                -
                                    --------- ----------
                                    --------- -
                                        -
                                            --------- ------------
                                            ---------- -----------
                                            ----------- -----------
                                            ------------ -----
                                        -
                                    -
                                -
                            -
                        -
                    -
                --
                -
                    --------- --------
                    --------- --
                -
            -
        --
        -
            --------- --------
            --------- -
                -
                    --------- ------------
                    --------- --
                -
            -
        --
    -
-

-- ------------------
-- ------------------------------------ ------
-------- ----------------------- -
    ----------------------------
    -- ---------------- --- ---------- -
        ------ ------
    -
    ------ -----
-

---------------------- -------------------

总结

以上就是 broccoli-tree-traverser 的使用教程。通过简单的示例,我们了解了它在树的结构里,提供的遍历方法以及节点修改的方法,这都是在 Broccoli Builder 这样的复杂构建器中非常有用的工具。再次强调,Broccoli-tree-traverser 是一个非常不错的 NPM 包,可供开发者参考及使用。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066c89ccdc64669dde5183

纠错
反馈