标签: javascript

  • 在 js 中使用 ts 的 module alias 功能

    介绍

    js 代码中引用依赖的时候默认是使用相对路径,项目复杂后相对路径可能会用到非常多的相对层级,非常不方便,在 typescript 中可以在 tsconfig.json 配置的 compilerOptions 中配置 paths,实现别名功能:

    {
        "compilerOptions": {
            paths: {
                "@app/*": ["./src/*"]
            }
        }
    }

    在 js 中默认是没有这样的功能,但是可以通过第三方的包实现一样的绝对引用。
    这里用到名为 module-alias 的包。

    使用

    首先在项目里安装这个依赖。

    npm i --save module-alias

    然后在 package.json 中进行配置

    "_moduleAliases": {
      "@app"      : "./src", // Application's root
    }

    最后在代码头部引入依赖

    require('module-alias/register')

    原理

    这个原理也比较简单,就是劫持 nodejs 原生的 module 模块。在模块初始化的时候,根据 package.json 中的配置将别名路径转换成相对路径存在数组中,然后通过改写内部的 _nodeModulePaths _resolveFilename 两个方法,判断如果是别名开头的,就在前面的数组中找到别名对应的路径,再将路径进行拼合,还原出真实的引用路径。

    参考

  • next-route-visualizer 包介绍

    今天 github 上看到一个 next-route-visualizer 的包,可以用来绘制 next 站点路由图表。看了下代码,核心方法有三个。

    • getRoutes 获取所有路由节点信息
    • positionTree 确定路由节点的显示位置
    • createNodesAndEdges 绘制节点和边的信息

    将计算号的节点和边信息传递给 reactflow,用 reactflow 包来绘制图表。

    通过这个图表可以可视化的查看站点的结构,便于分析和构建出合理的网站信息架构,可以作为开发时候一个辅助决策的功能集成到系统中。

    有兴趣的朋友可以学习了解一下。

    参考