tree 订阅
Tree
信息
操作系统
未知
开发语言
开源协议
未知
Tree
Tree Structure that you can easily create by entering the values in text box and add in tree formate. It just uses the simple js file and small html file thats it. You can easily add and remove the nodes. The expanding and collapsing fecilties are provided in this tree structure.. You please look at it.
收起全文
精华内容
下载资源
问答
  • 2019-06-13 22:38:28

    前言


    在实际应用场景中,很多时候我们会用到字典集的查找。通过一个键值key,去拿到它对应的值对象。这种方法确实很高效,很快,但是这里有个问题,当字典集储存的键值很多的情况时,毫无疑问,这里会消耗掉大量的内存空间。这个在我们做基数计数的统计应用时,这个空间会膨胀地特别厉害。本节笔者将要谈论的是对于基数统计来说,使用上更为适用的1种数据结构Trie Tree以及它的衍生优化版Radix Tree。

    Trie Tree


    我们先来看第一种树结构Trie Tree,名叫字典树。Trie Tree的原理是将每个key拆分成每个单位长度字符,然后对应到每个分支上,分支所在的节点对应为从根节点到当前节点的拼接出的key的值。它的结构图如下所示。

    在这里插入图片描述

    上图中每个节点存储的值为一个数值,当然这不是绝对的,我们可以假想这可以是key值所对应的任何值对象。只是计数统计在平时使用中更为常见一些。那么问题来了,相比较于字典集的存储方式,Trie Tree将key以树型结构构造,有什么用意呢?一个最大的帮助是公共的前缀被共享了,这样可以避免被重复地存储了。而在普通的字典集结构中,这种重复key前缀都是独立被包含在每个key内的。假设当字典集中所存储的key都带有大量重复的前缀时,Trie Tree将会消耗比普通字典结构更少的空间。

    如上述所描述的,通过共享公共前缀的方式空间省了不少,但是它的查询效率如何呢?按照树的查询方式,一个查询key长度m,首先我们会将key拆分成m个字符,然后对应每个长度,从根节点依次向下,总共会进行到m次查找。因此我们可以得出,它的查询时间复杂度为O(m),随着查询key长度的增加,它所消耗的时间将会线性增长。

    往深层面来看查询时间的问题,其实本质上这是树的深度引起的问题,对于长key而言,它的key对应的节点构造的深度过深。那么如果说我们将这“棵”树构造得更紧凑一些,会如何呢?于是我们有了另外一个衍生版本树:Radix Tree(基数树)。

    Radix Tree


    Radix Tree名为基数树,它的计数统计原理和Trie Tree极为相似,一个最大的区别点在于它不是按照每个字符长度做节点拆分,而是可以以1个或多个字符叠加作为一个分支。这就避免了长字符key会分出深度很深的节点。Radix Tree的结构构造如下图所示:

    在这里插入图片描述
    从上图我们可以看到,上面每个分支可以是局部部分字符串。以简单的字符查找为例,Radix Tree的搜索查找过程如下:

    在这里插入图片描述

    针对Radix Tree的构造规则,它的节点插入和删除行为相比较于Trie Tree来说,略有不同。

    • 对于节点插入而言,当有新的key进来,需要拆分原有公共前缀分支。
    • 对于节点删除而言,当删除一个现有key后,发现其父节点只有另外一个子节点key,则此子节点可以和父节点合并为一个新的节点,以此减少树的比较深度。

    Radix Tree的insert过程如下图所示:
    在这里插入图片描述

    Trie Tree、Radix Tree的局限性


    的确Trie Tree、Radix Tree在某些应用场景可以帮助我们节省内存使用空间,但是它们也有其使用的局限性。比如这类树结构无法适用于所有的数据类型,目前来看主要适用于能够用string字符等可作为表达式查询key的场景。

    引用


    [1].https://en.wikipedia.org/wiki/Radix_tree
    [2].https://en.wikipedia.org/wiki/Trie

    更多相关内容
  • AngularJS的tree控件

    2016-02-26 14:25:53
    Angularjs,自己整理个tree的控件,非常好用
  • jsTree中文文档

    热门讨论 2015-03-14 19:50:43
    jsTree中文文档
  • 安利一款Python开发的仿Linux树形显示目录tree命令

    万次阅读 多人点赞 2021-07-27 19:39:03
    文章目录Linux与Windows的tree命令Linux的tree命令演示Windows的tree命令Python自制tree命令os模块基础代码Rich库关于tree模块的官方示例调用Tree模块实现仿Linux树形显示目录效果安装自定义tree模块 首先看看Linux...

    大家好,我是小小明,今天我要给大家分享一个用python实现的仿Linux的tree命令。

    详见:https://pypi.org/project/filestools/

    通过以下命令安装即可直接使用:

    pip install filestools -U
    

    安装后的使用示例:

    img

    对如何编码实现感兴趣的童鞋可以继续往下看。



    首先看看Linux下的tree命令效果如何:

    Linux与Windows的tree命令

    Linux的tree命令演示

    在CentOS的Linux系统下,我们可以再使用yum命令安装tree之后使用tree。安装命令:

    yum install tree
    

    然后使用tree命令的树形显示效果:

    [root@iZwz9afmmytm54pshbwmebZ 018]# tree
    .
    ├── css
    │   ├── abstract\ blue\ lights\ orange\ bokeh\ gaussian\ blur\ 1920x1200\ wallpaper_www.wallpaperhi.com_43.jpg
    │   ├── default.css
    │   ├── font
    │   │   ├── DS-DIGIB.TTF
    │   │   ├── DS-DIGII.TTF
    │   │   ├── DS-DIGI.TTF
    │   │   └── DS-DIGIT.TTF
    │   ├── jquery-ui.css
    │   ├── mobile.css
    │   ├── normalize.css
    │   └── style.css
    ├── images
    │   ├── btn01slider2.png
    │   ├── charts.png
    │   ├── logofont.png
    │   ├── logoline1.png
    │   ├── logoline2.png
    │   ├── logoline3.png
    │   └── logoline.png
    ├── index.html
    ├── js
    │   ├── common.js
    │   ├── index.js
    │   ├── jquery-1.8.3.min.js
    │   └── jquery_and_jqueryui.js
    └── less
        └── style.less
    

    加上-C参数对各种类型加上不同的颜色:

    image-20210727092657817

    加上-s参数能额外列出文件或目录的大小,-h参数用于自动修正显示单位:

    image-20210727093158585

    tree命令参数说明

    • -a 显示所有文件和目录。
    • -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
    • -C 在文件和目录清单加上色彩,便于区分各种类型。
    • -d 显示目录名称而非内容。
    • -D 列出文件或目录的更改时间。
    • -f 在每个文件或目录之前,显示完整的相对路径名称。
    • -F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号。
    • -g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
    • -i 不以阶梯状列出文件或目录名称。
    • -L level 限制目录显示层级。
    • -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
    • -n 不在文件和目录清单加上色彩。
    • -N 直接列出文件和目录名称,包括控制字符。
    • -p 列出权限标示。
    • -P<范本样式> 只显示符合范本样式的文件或目录名称。
    • -q 用"?"号取代控制字符,列出文件和目录名称。
    • -s 列出文件或目录大小。
    • -t 用文件和目录的更改时间排序。
    • -u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
    • -x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。

    Windows的tree命令

    Windows上也有tree命令,只不过没有Linux平台的tree命令强大。

    我们看看显示效果:

    D:\QMDownload\source\test>tree /F
    文件夹 PATH 列表
    卷序列号为 5A3F-F8A8
    D:.
    │  index.html
    │
    ├─css
    │  │  abstract blue lights orange bokeh gaussian blur 1920x1200 wallpaper_www.wallpaperhi.com_43.jpg
    │  │  default.css
    │  │  jquery-ui.css
    │  │  mobile.css
    │  │  normalize.css
    │  │  style.css
    │  │
    │  └─font
    │          DS-DIGI.TTF
    │          DS-DIGIB.TTF
    │          DS-DIGII.TTF
    │          DS-DIGIT.TTF
    │
    ├─images
    │      btn01slider2.png
    │      charts.png
    │      logofont.png
    │      logoline.png
    │      logoline1.png
    │      logoline2.png
    │      logoline3.png
    │
    ├─js
    │      common.js
    │      index.js
    │      jquery-1.8.3.min.js
    │      jquery_and_jqueryui.js
    │
    └─less
            style.less
    

    个人只能说勉强还行吧,也能看清楚树形结构。

    Python自制tree命令

    下面呢,我们考虑使用Python来仿制这样的命令。

    os模块基础代码

    关于Python打印树形目录结构,我已经在4年前使用Java写过一个不够完善的代码。19年国庆学python的时候才用os模块重写了一下:

    import os
    
    
    def show_dir(path, layer=0):
        listdir = os.listdir(path)
        for i, file in enumerate(listdir, 1):
            file_path = os.path.join(path, file)
            print("│  " * (layer - 1), end="")
            if (layer > 0):
                print("└─" if i == len(listdir) else "├─", end="")
            print(file)
            if (os.path.isdir(file_path)):
                show_dir(file_path, layer + 1)
    
    
    show_dir("test")
    

    结果:

    css
    ├─abstract blue lights orange bokeh gaussian blur 1920x1200 wallpaper_www.wallpaperhi.com_43.jpg
    ├─default.css
    ├─font
    │  ├─DS-DIGI.TTF
    │  ├─DS-DIGIB.TTF
    │  ├─DS-DIGII.TTF
    │  └─DS-DIGIT.TTF
    ├─jquery-ui.css
    ├─mobile.css
    ├─normalize.css
    └─style.css
    images
    ├─btn01slider2.png
    ├─charts.png
    ├─logofont.png
    ├─logoline.png
    ├─logoline1.png
    ├─logoline2.png
    └─logoline3.png
    index.html
    js
    ├─common.js
    ├─index.js
    ├─jquery-1.8.3.min.js
    └─jquery_and_jqueryui.js
    less
    └─style.less
    

    还行,但是对于很深的目录缺点也很明显,例如出现这样的显示情况:

    image-20210727141128884

    Rich库的使用示例

    要自行完全实现Linux的树形目录比较复杂,所幸python有个第三方库rich中的Tree模块能支持彩色和树形输出。

    安装命令:

    pip install rich
    

    详细使用方式可以参考官方文档:https://rich.readthedocs.io/en/stable/

    Tree模块的使用示例:https://github.com/willmcgugan/rich/blob/master/examples/tree.py

    这个官方的代码示例就是专门用来树形显示目录的,我们可以复制粘贴到jupyter中稍微改改玩一下。

    上述代码底部修改的部分:

    directory = os.path.abspath("test")
    tree = Tree(
        f":open_file_folder: [link file://{directory}]{directory}",
        guide_style="bold bright_blue",
    )
    walk_directory(pathlib.Path(directory), tree)
    print(tree)
    

    image-20210727150956128

    显示效果比Linux的tree命令更秀。不过这个脚本兼容性较差,Windows控制台并不支持显示图标之类的,导致会出现乱码:

    image-20210727153021906

    调用Tree模块实现仿Linux树形显示目录效果

    由于官方自带案例秀过头了兼容性不太好,所以我们自行编码:

    """
    小小明的代码
    CSDN主页:https://blog.csdn.net/as604049322
    """
    __author__ = '小小明'
    
    import os
    import sys
    
    import rich
    from rich.text import Text
    from rich.tree import Tree
    
    
    def get_file_size(file):
        size = os.path.getsize(file)
        if size == 0:
            return "空文件"
        num = 0
        while size > 1024:
            size /= 1024
            num += 1
        unit = ["", "KB", "MB", "GB", "TB"]
        return f"{size:.2f}".rstrip(".0") + unit[num]
    
    
    def show_dir(path, tree=None):
        if tree is None:
            tree = Tree(f"[bold magenta]{os.path.abspath(path)}")
        for file in os.listdir(path):
            file_path = os.path.join(path, file)
            if (os.path.isdir(file_path)):
                parent = tree.add(f"[bold magenta]{file}")
                show_dir(file_path, parent)
            else:
                text_filename = Text(file, "green")
                text_filename.highlight_regex(r"\.[^.]+$", "bold red")
                text_filename.append(f" ({get_file_size(file_path)})", "bold blue")
                tree.add(text_filename)
        return tree
    
    
    if __name__ == '__main__':
        rich.print(show_dir(sys.argv[1]))
    

    将以上代码保存为tree.py,然后在jupyter中执行:

    from tree import show_dir
    import rich
    
    rich.print(show_dir("test"))
    

    image-20210727185354304

    在Windows控制台中的执行结果:

    python tree.py test
    

    image-20210727185323007

    将脚本上传到Linux看下Linux下的执行效果:

    image-20210727185258104

    可以看到我们自行编写的脚本已经能够同时适用于windows和Linux平台。

    这就是tree模块核心逻辑的开发,至此我们的目标就已经达成。

    展开全文
  • Linux tree命令实例详解

    千次阅读 2021-05-08 21:05:49
    关于treetree以树状格式列出目录的内容。 这是一个非常简洁实用的程序,您可以在命令行中使用它来查看文件系统的结构。描述tree是一个递归目录列表程序,它生成一个深度缩进的文件列表(如果设置了LS_COLORS环境变量...

    关于tree

    tree以树状格式列出目录的内容。 这是一个非常简洁实用的程序,您可以在命令行中使用它来查看文件系统的结构。

    描述

    tree是一个递归目录列表程序,它生成一个深度缩进的文件列表(如果设置了LS_COLORS环境变量,则会着色)并输出为tty。 如果没有参数,树将列出当前目录中的文件。 当给出目录参数时,树依次列出在给定目录中找到的所有文件和/或目录。 树然后返回列出的文件和/或目录的总数。

    默认情况下,遇到符号链接时,符号链接引用的路径将以以下格式打印在链接名称之后:

    name -> real-path

    如果给出`-l'选项并且符号链接指的是实际目录,则树将遵循符号链接的路径,就像它是真实目录一样。

    安装

    linuxidc@linuxidc:~$ sudo apt  install tree

    185c99d123e5c020284f624368512107.png

    版本

    linuxidc@linuxidc:~$ tree --version

    tree v1.7.0 (c) 1996 - 2014 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro

    980843a47e834ffaa31df1b984017578.png

    tree语法

    tree [-adfgilnopqrstuxACDFNS] [-L level [-R]] [-H baseHREF] [-T title]

    [-o file name] [--nolinks] [-P pattern] [-I pattern] [--inodes]

    [--device] [--noreport] [--dirsfirst] [--version] [--help]

    [--filelimit #] [--si] [--prune] [--du] [--timefmt format]

    [directory ...]

    选项

    --help

    输出详细的使用情况列表。

    --version

    输出tree的版本。

    -a

    打印所有文件。 默认情况下,tree不会打印隐藏文件(以点“.”开头的文件)。 在任何情况下,tree都不会打印文件系统构造`.' (当前目录)和`..'(上一个目录)。

    -d

    仅列出目录。

    -f

    打印每个文件的完整路径前缀。

    -i

    tree不会打印缩进线。 与-f选项一起使用时很有用。

    -l

    跟随目录的符号链接,就像它们是目录一样。 避免了导致递归循环的链接。

    -x

    仅保留当前文件系统,与find -xdev一样。

    -P pattern

    仅列出与通配符模式匹配的文件。 注意:您必须使用-a选项来考虑以点“。”开头的那些文件。 匹配。 有效的通配符运算符是“*”(任何零个或多个字符),“?” (任何单个字符),`[...]'(括号内列出的任何单个字符(可选 -  - 破折号)可用于字符范围:ex:[AZ])和`[^ ...]'( 任何单个字符未在括号中列出)和“|”分隔交替模式。

    -I pattern

    不要列出与通配符模式匹配的文件。

    --prune

    从输出中创建tree修剪空目录,与-P或-I一起使用时非常有用。

    --filelimit #

    不要下载包含多个#条目的目录。

    --timefmt format

    打印(隐含-D)并根据使用strftime语法的格式字符串格式化日期。

    --noreport

    忽略在tree列表末尾打印文件和目录报告。

    -p

    打印每个文件的保护(根据ls -l)。

    -s

    打印每个文件的大小以及名称。

    -u

    打印文件的用户名或UID #(如果没有可用的用户名)。

    -g

    打印文件的组名称或GID #(如果没有可用的组名称)。

    -D

    打印列出文件的上次修改时间的日期。

    --inodes

    打印文件或目录的inode编号

    --device

    打印文件或目录所属的设备编号

    -F

    根据ls -F,为目录添加一个' /',为套接字文件添加一个' =',为可执行文件添加一个' *',为FIFO添加一个' |'

    -q

    将文件名中的不可打印字符作为问号打印,而不是使用默认胡萝卜表示法。

    -N

    按原样打印不可打印的字符,而不是默认的胡萝卜表示法。

    -r

    按反向字母顺序对输出进行排序。

    -t

    按上次修改时间而不是按字母顺序对输出进行排序。

    --dirsfirst

    在文件之前列出目录。

    -n

    始终关闭着色,由-C选项覆盖。

    -C

    如果未设置LS_COLORS环境变量,则使用内置颜色默认值始终打开颜色。 用于将输出着色到管道。

    -A

    当打印压痕线时,打开ANSI线图形hack。

    -S

    打开ASCII线图形(使用linux控制台模式字体时很有用)。 此选项现在等效于`charset=IBM437',最终将被折旧。

    -L level

    目录树的最大显示深度。

    -R

    递归地遍历树的每个级别目录(请参见-L选项),并在每个目录下执行树,再次添加`-o 00Tree.html'作为一个新选项。

    -H baseHREF

    打开HTML输出,包括HTTP引用。适用于ftp站点。当使用HTML输出时,baseHREF给出基本ftp位置。也就是说,本地目录可能是“/local/ftp/pub”,但是它必须被引用为“ftp://hostname.organiz.domain/pub”(baseHREF应该是“ftp://hostname.organiz.domain”)。提示:不要使用带有此选项的ANSI行,并且在目录列表中不要给出多个目录。如果您想通过CSS样式表使用颜色,除了这个选项外,还可以使用-C选项强制输出颜色。

    -T title

    在HTML输出模式下设置标题和H1标题字符串。

    --charset charset

    设置输出HTML和绘图时使用的字符集。

    --nolinks

    关闭HTML输出中的超链接。

    -o file name

    将输出发送到文件名。

    tree 实例

    linuxidc@linuxidc:~$ tree

    显示tree中当前目录和子目录的内容。 输出采用图形形式,类似于以下示例:

    .

    ├── examples.desktop

    ├── linuxidc.com

    │  ├── linuxidc

    │  ├── linuxidc.c

    │  ├── linuxidc.com

    │  ├── linuxidc.sh

    │  └── share

    │      ├── Linux公社.txt

    │      ├── Linux公社www.linuxidc.com测试文件.txt

    │      └── www.linuxidc.com.png

    ├── linux.linuxidc.com

    ├── www.linuxidc.com

    ├── 公共的

    ├── 模板

    ├── 视频

    ├── 图片

    ├── 文档

    ├── 下载

    ├── 音乐

    └── 桌面

    ├── linuxidc.com

    ├── linux.linuxidc.com

    ├── m.linuxidc.com

    ├── www.linuxidc.com

    └── www.linuxidc.com.png

    16 directories, 9 files

    69cef9f4951f98d34b7d267236294b0c.png

    linuxidc@linuxidc:~/linuxidc.com$ tree -I 'linuxidc*|bin|lib'

    2d256abd5b8cf7909a75954859d4fe37.png

    显示树,没有以linuxidc开头,也没有包含模式中指定的'bin'或'lib'。

    linuxidc@linuxidc:~$ tree -P 'l*'

    c5f39a42a1cc3d05696ba8fd13369ee3.png

    使用大写“P”,您可以列出带有模式的文件。 此模式示例显示仅包含以l开头的目录的树或包含以l开头的文件的目录。

    linuxidc@linuxidc:~$ tree -p

    使用小写的“p”,您可以列出一个树,它也显示文件权限。

    1f06b41ef525dd5759c732950cd265f6.png

    只显示一层目录

    linuxidc@linuxidc:~$ tree -Ld 1 /home/

    或者

    linuxidc@linuxidc:~$ tree -L 1  -d /home/linuxidc

    1c23ec23050ca6c86feea0f4b98dab21.png

    查看某一个目录的文件结构

    linuxidc@linuxidc:~$ tree  /home/linuxidc

    0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • Tree Shaking概念详解

    千次阅读 多人点赞 2020-09-28 11:13:57
    Tree Shaking 值的就是当我引入一个模块的时候,我不引入这个模块的所有代码,我只引入我需要的代码,这就需要借助 webpack 里面自带的 Tree Shaking 这个功能来帮我们实现。 官方有标准的说法:Tree-shaking的本质...

    这篇文章写于两年前,前端的发展日新月异,新的构建工具已经开始崭露头角。Vite已经出来很久了,新版本也比较稳定,推荐大家学习这一款构建工具。

    Tree Shaking 指的就是当我引入一个模块的时候,我不引入这个模块的所有代码,我只引入我需要的代码,这就需要借助 webpack 里面自带的 Tree Shaking 这个功能来帮我们实现。


    官方有标准的说法:Tree-shaking的本质是消除无用的js代码。无用代码消除在广泛存在于传统的编程语言编译器中,编译器可以判断出某些代码根本不影响输出,然后消除这些代码,这个称之为DCE(dead code elimination)

    在 webpack 项目中,有一个入口文件,相当于一棵树的主干,入口文件有很多依赖的模块,相当于树枝。实际情况中,虽然依赖了某个模块,但其实只使用其中的某些功能。通过 Tree-Shaking,将没有使用的模块摇掉,这样来达到删除无用代码的目的。

    在production 模式下不用在webpack.config.js中配置

    optimization: {
    usedExports: true

    }
    当在development模式下配置tree shaking时:
    webpack.config.js

    //HtmlWebpackPlugin
    //当我们整个打包过程结束的时候,自动生成一个html文件,
    //并把打包生成的自动引入到html这个文件中;
     
    var HtmlWebpackPlugin = require('html-webpack-plugin')
    const path = require('path')
    const { CleanWebpackPlugin } = require('clean-webpack-plugin')
    const webpack = require('webpack')
    module.exports = {
        //打包模式,当为‘production’,打包后的文件会被压缩,
        //当为‘development’时打包后的文件不会被压缩,按照开发环境进行打包
        mode: 'development', //在开发者模式中SourceMap默认已经被配置在项目里了。
        // devtool: 'none', //关闭SourceMap
        //cheap:在生成SourceMap的时候,可以不带列信息,只带行信息,不要包含loader里面的SourceMap的生成,
        //只对业务代码进行SourceMap的生成
        //module:对loader里面的代码也进行一个SourceMap的生成
        //eval:eval是一种执行方式
        devtool: 'cheap-module-eval-source-map', //打开SourceMap
        // devtool: 'cheap-module-source-map', //要线上的代码可以映射
        // 打包的入口文件
        entry: './src/index2.js',
        // entry: {
        //     main: './src/index2.js'
        // },
        devServer: {
            contentBase: './dist', //我们要在哪一个目录下去启动这个服务器
            open: true, //会自动的打开一个浏览器,然后自动访问服务器的地址(localhost:8080)
            hot: true, //指是否支持热更新(hmr)
            hotOnly: true, //即使不支持hmr或者hmr有问题,也不刷新浏览器
            proxy: {
                '/api': {
                    //当访问localhost:8080/api的时,它会直接帮你转发到http://localhost:3000
                    target: 'http://localhost:3000',
                    pathRewrite: { '^/api': '' }
                }
            }
        },
        module: {
            rules: [{
                    test: /\.js$/,
                    exclude: /node_modules/,
                    loader: 'babel-loader'
                },
                {
                    test: /\.(png|jpg|gif)$/,
                    use: {
                        loader: 'url-loader',
                        options: {
                            //url-loader会把图片转化成一个base64的字符串,
                            //然后直接放到bundle.js里,而不是单独生成一个图片文件,
                            //好处:不用再额外的请求图片的地址,省了一次http请求;
                            //缺点:如果图片特别大过大,打包生成的js文件就会很大,
                            //那么加载js文件的时间就会很长,所以在一开始很长的时间里,页面上什么都显示不出来;
                            //所以,url-loader最佳的使用方式:加一个limit
                            //如果图片小于limit的值就把图片变为一个base64的字符串放到打包好的js中,
                            //若大于limit的值,就以file-loader的生成一个图片放到dist目录下。
                            limit: 8192, //好处是可以对小图片的http请求数减少,提升网页加载数度
                            name: 'images/[name].[hash].[ext]'
                        }
                    }
                },
                {
                    test: /\.(css|scss|less)$/,
     
                    //"css-loader":会帮我们分析出几个css文件之间的关系,最终把这些css文件合并成一段css;
                    //"style-loader":会把‘css-loader’生成的内容挂在到页面的head部分
                    //在webpack的配置中,loader是有先后执行顺序的,
                    //loader的执行顺序是从下到上,从右到左;
                    //“sass-loader”会先对sass代码进行翻译,翻译为css代码后给到css-loader,
                    //都处理好了之后再交给‘style-loader’挂在到页面上
                    //postcss-loader会自动添加css3的厂商前缀;比如:  transform: translate(100px, 100px)
                    use: [
                        'style-loader',
                        {
                            loader: 'css-loader',
                            options: {
                                importLoaders: 2,
                                modules: true //使得css模块化,
                            }
                        },
                        'postcss-loader',
                        'sass-loader'
                    ]
                },
                {
                    // 可以打包字体文件
                    test: /\.(eot|ttf|svg)$/,
                    use: {
                        loader: 'file-loader'
                    }
                }
            ]
        },
     
        // 打包的出口文件
        output: {
            // 打包后的文件名
            // filename: 'bundle.js',
            filename: '[name].js', //name就是entry值的key:'main','sub'
            // 打包后的文件目录为'dist'
            path: path.resolve(__dirname, 'dist'),
            publicPath: '/' //表示的是我所有的打包生成的文件之间的引用前面都加一个根路径
        },
        //plugin可以在webpack运行到某个时刻的时候,帮你做一些事情(类似生命周期函数)
        plugins: [
            // CleanWebpackPlugin可以在每次打包的时候帮我们对dist目录做一个清空
            new CleanWebpackPlugin(),
            new HtmlWebpackPlugin({
                //HtmlWebpackPlugin帮我们自动的生成一个dist目录下的html文件
                template: './src/index.html'
            }),
            //HotModuleReplacementPlugin帮我们实现HMR
            new webpack.HotModuleReplacementPlugin()
        ],
        //在开发模式下配置 tree shakeing
        optimization: {
            usedExports: true
        }
    }
    

    在 package.json 中配置:

    {
        "name": "webpack-demo",
    //@babel/polyfill和css文件不使用tree shaking
        "sideEffects": [
            "@babel/polyfill",
            "*.css"
        ],
        "version": "1.0.0",
        "description": "",
        "main": "index.js",
        "scripts": {
            "bundle": "webpack",
            "watch": "webpack --watch",
            "start": "webpack-dev-server",
            "server": "node server.js"
        },
        "author": "susie",
        "license": "ISC",
        "devDependencies": {
            "@babel/core": "^7.5.4",
            "@babel/plugin-transform-runtime": "^7.5.0",
            "@babel/preset-env": "^7.5.4",
            "@babel/preset-react": "^7.0.0",
            "autoprefixer": "^9.6.1",
            "babel-loader": "^8.0.6",
            "clean-webpack-plugin": "^3.0.0",
            "css-loader": "^3.0.0",
            "file-loader": "^4.0.0",
            "html-webpack-plugin": "^3.2.0",
            "node-sass": "^4.12.0",
            "postcss-loader": "^3.0.0",
            "sass-loader": "^7.1.0",
            "style-loader": "^0.23.1",
            "url-loader": "^2.0.1",
            "webpack": "^4.35.3",
            "webpack-cli": "^3.3.5",
            "webpack-dev-server": "^3.7.2"
        },
        "dependencies": {
            "@babel/polyfill": "^7.4.4",
            "@babel/runtime": "^7.5.4",
            "@babel/runtime-corejs2": "^7.5.4",
            "react": "^16.8.6",
            "react-dom": "^16.8.6"
        }
    }
    

    如果需要对某个模块不进行Tree Shaking

     "sideEffects": ["@babel/poly-fill"],  //该模块不进行Tree Shaking
    

    为什么某些引入模块不希望进行Tree Shaking呢?

    下面引入的style.css模块,如果也使用tree shaking,由于css文件没有导出任何模块,那么就有可能在打包的时候该引入模块就被摇晃掉了,导致bug。

    在这里插入图片描述
    在package.json中进行配置,即匹配到的任何css文件都不进行Tree Shaking

    在这里插入图片描述
    不使用Tree Shaking打包时,可以看到打包文件中exports provided: add, mins两种方法

    在这里插入图片描述在这里插入图片描述  前端的学习不是一蹴而就,不积跬步无以至千里,不积小流无以成江海。持续不断的努力才能让你我有所收获,专业的知识还得到机构去学习,培训机构的设立有其存在的必然性,你钱花对了吗?


    推荐阅读:
    5分钟学会 vue 路由守卫
    10分钟搞懂vuex
    浅谈hooks
    vue 组件设计原则
    深入解读 vue 修饰符 sync

    展开全文
  • AVLTree遍历

    千次阅读 2020-04-13 10:55:37
    //因为BF为正,因此我们将整个树进行右旋(顺时针旋转), if (height(tree.left) - height(tree.right) == 2) {//打破平衡 if (key.compareTo(tree.left.key) ){//新插入的值和将要插在某个节点下面的值进行比较 , /...
  • Vue实现一个Tree组件

    千次阅读 2020-12-26 23:20:39
    Tree组件在实际应用中非常广泛,例如省市县地域的展现.一般一些包含从属关系的数据都可以使用Tree组件来进行展示,下面通过一个实战的demo来深入学一下实现一个Tree组件所要了解的原理和实现细节.本文实现的功能包含...
  • OpenCV实现SIFT+KD tree+RANSAC图像拼接

    热门讨论 2014-09-29 22:31:22
    在VC2010环境下实现sift+kd tree+RANSAC图像拼接,本人已经成功调试。
  • 两棵el-tree的节点跨树拖拽实现

    千次阅读 热门讨论 2020-09-17 09:40:30
    在使用element-ui框架时,我们经常会用到el-tree组件。该组件支持在树上任意拖拽节点,但默认不支持将节点拖拽到树的外部,如一个外部div内,或另一棵el-tree上。 关于如何将树上的节点拖拽到一个外部容器内(如一个...
  • Tree-Shaking原理

    千次阅读 2020-02-10 22:42:25
    Tree-Shaking性能优化实践 - 原理篇 一. 什么是Tree-shaking 先来看一下Tree-shaking原始的本意 上图形象的解释了Tree-shaking 的本意,本文所说的前端中的tree-shaking可以理解为通过工具"摇"我们的JS...
  • 深入理解MySQL索引之B+Tree

    万次阅读 多人点赞 2019-01-13 21:17:25
    B+Tree是B TREE的变种,B TREE能解决的问题,B+TREE也能够解决(降低树的高度,增大节点存储数据量) B+Tree扫库和扫表能力更强。如果我们要根据索引去进行数据表的扫描,对B TREE进行扫描,需要把整棵树遍历一遍,...
  • Python Tree库绘制多叉树的用法介绍

    千次阅读 2020-09-18 21:28:18
    Python Tree库绘制多叉树的用法介绍
  • BTree和B+Tree详解

    万次阅读 多人点赞 2019-09-01 10:28:43
    BTree和B+Tree详解二叉查找树二叉树的性质平衡二叉树(AVL Tree)B-Tree(平衡多路查找树)B+TreeB+Tree和B-Tree的区别 最近想重新复习数据结构的知识,想了解B树和B+树的区别,看了挺多篇博文的,但看了还是懵懵的...
  • B-Tree和B+Tree

    千次阅读 2019-08-12 10:49:48
    目前大部分数据库系统及文件系统都采用B-Tree或其变种B+Tree作为索引结构,在本文的下一节会结合存储器原理及计算机存取原理讨论为什么B-Tree和B+Tree在被如此广泛用于索引,这一节先单纯从数据结构角度描述它们。...
  • 1.参考网站:sklearn.tree.plot_tree — scikit-learn 1.0 documentationhttps://scikit-learn.org/stable/modules/generated/sklearn.tree.plot_tree.html2. 中英文解释(自己 Parameters: 1. decision_tree:...
  • 引入selectTree组件 import { selectTree } from '@/components' export default { components: { selectTree }, data() { defaultData:{ managementStationId:'1478570186653609986', ...
  • Android中Tree的使用

    千次阅读 2022-01-29 20:31:00
    Android中Tree的使用: Tree的简单实例: 01.创建Tree //创建二叉树数据结构:节点值、左节点、右节点 data class TreeNode(var leftNode: TreeNode? = null, var value: Int? = null, var rightNode: TreeNode?...
  • SpeedTree 003

    千次阅读 2022-02-21 15:40:54
    1.树的粗细 2.树的继承关系 3.重力 4.独立显示某一部分 独立显示——选中并按下F 显示全部——选中独立显示的部分并按下 CTRL+F...speedtree中的材质栏中先新建一个材质,然后将材质包中的图片对应...
  • react实现tree组件

    千次阅读 2019-09-06 14:58:22
    return (<CreatNode handle={this.props.handle} tree={this.totree(this.props.data,0)}/>); } totree(list,parId) { let obj = {}; let result = []; //将数组中数据转为键值对结构 (这里的数组和obj会相互...
  • 【每天一个 Linux 命令】tree命令

    千次阅读 2022-01-06 22:47:01
    本文主要讲解Linux系统上的tree命令的详细使用方法。 tree 命令是一个小型的跨平台命令行程序,用于递归地以树状格式列出或显示目录的内容。它输出每个子目录中的目录路径和文件,以及子目录和文件总数的摘要。 tree...
  • jstree文档简介

    千次阅读 2018-04-26 14:32:12
    jstree中文github文档2017年04月11日 15:22:51阅读数:29839jstreeBala...bala...这段就不翻译了. jstree就是个基于JQUERY的树形控件.jsTree is jquery plugin, that provides interactive trees. It is absolutely...
  • 由于业务开发过程中有树形数据,因此需要用到tree树形组件,鉴于项目是基于vue的,前期的ui组件库选型就是element-ui,于是采用了el-tree组件。但在实际使用过程中出现了几个意外。 卡顿假死 server端返回全部数据...
  • 深入理解什么是LSM-Tree

    万次阅读 多人点赞 2019-05-21 20:03:23
    BigTable(2006年),为开源界在大数据领域带来了无数的灵感,其中在 “BigTable” 的论文中很多很酷的方面之一就是它所使用的文件组织方式,这个方法更一般的名字叫 Log Structured-Merge Tree。在面对亿级别之上的...
  • iview下拉菜单树的iview-select-tree的使用以及iview-select-tree的实现的源代码公众号前言单选效果多选效果validate验证效果iview-select-tree的集成的npm的地址集成iview-select-tree 公众号 大家可以直接微信...
  • tree shaking】Tree-shaking之副作用

    千次阅读 2021-11-23 15:18:02
    由于Tree-shaking主要依赖于ES6的模块化import和export,我们都知道ES6的module只能是顶层出现,和运行时无关,不能运行时加载,Tree-shaking主要就是依靠这个基础进行静态分析,不执行代码就从字面量对代码进行分析...
  • LayUI—tree树形结构的使用

    万次阅读 多人点赞 2019-09-01 21:46:46
    树形结构在实际开发中很长用到,...官网地址:https://www.layui.com/v1/doc/modules/tree.html 先看一下显示的效果图。 点击节点右面会显示对应部门的详情信息,可以修改。可以自定义按钮添加部门,也可以直接...
  • BTree和B+Tree区别

    千次阅读 2019-04-15 17:28:44
    在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树即由这些树逐步优化而来。 二叉查找树 二叉树具有以下性质:左子树的键值小于根的键值,右子树的键值大...
  • 官方文档:3D Fast Intersection and Distance Computation (AABB Tree) AABB Tree简介 「AABB Tree」AABB树组件提供了静态数据结构和算法,以支持对有限的3D对象集执行相交和距离查询。可以查询存储在数据结构中的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,165,469
精华内容 466,187
关键字:

tree