模块加载痛点

大家也或多或少的了解node模块的加载机制,最为粗浅的表述就是依次从当前目录向上级查询node_modules目录,若发现依赖则加载。但是随着应用规模的加大,目录层级越来越深,若是在某个模块中想要通过require方式以依赖名称或相对路径的方式引用其他模块就非常麻烦,影响开发效率和美观。

示例demo:

// 当前目录: /usr/local/test/index.js // gulp模块所在路径为 /usr/lib/node_modules var gulp = require('../../lib/gulp');
gulp.task('say',function(){ console.log('hello wolrd');
});

目前的条件下,只有采用上述中相对路径的方式引用依赖模块,可以看出上述引用的缺点:

  • 丑陋,十分繁杂

  • 容易出错,难以维护

第二个缺点是最难以接受的,在多次引用模块的情况下问题会被放大,因此急需寻找某种方案解决多层目录依赖引用,本文将会讨论笔者在开发过程中的一些尝试,并欢迎大家一起讨论其他可行性方案。

全局变量法

由于目标是解决毫无美观又难以理解的相对目录层级,那么可以尝试使用变量完成目录层级的替代。这种方案最为直接,且node加载该依赖的速度最快,无需遍历其他各级目录。但是为了更为通用,笔者常采用全局变量的方式绑定目录关系:

demo:

// 当前目录: /usr/local/test/index.js // gulp模块所在路径为 /usr/lib/node_modules global._root = '/u
        
		

网友评论