分享更有价值
被信任是一种快乐

node.js中的module-alias怎么用

文章页正文上

这篇文章主要为大家展示了“node.js中的module-alias怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“node.js中的module-alias怎么用”这篇文章吧。首先有必要介绍一下module-alias是什么,这里有其官网链接(官网地址 https://github.com/ilearnio/module-alias)。简单点说,module-alias提供了在node环境下的路径别名功能。一般前端开发可能会比较熟悉webpackalias配置、typescriptpaths配置等,这些都是提供了陆军别名的功能。路径别名在代码开发过程中是yyds,不然你看到这种../../../../xx路径时,是肯定会抓狂的。使用webpack打包的项目webpack本身会处理源代码中路径别名的配置到打包后代码的转换过程,但是如果单纯使用typescript进行编译的项目,虽然typescript在编译过程中可以正常处理paths中路径别名的配置,但是并不会改变打包后的代码,造成在打包后的代码中仍然存在路径别名配置,看一个经过typescript编译后的代码:这里是tsconfig.json的配置内容可以看到在经过typescript编译后的代码中,仍然存在@符号,然而当代码运行的过程中,比如允许在node中,require并不能正常识别路径里的这个符号,导致找不到相应模块而抛出异常。这也是module-alias这个库存在的目的。从官网上看,这个库使用方法只需要两步,真的已经是极简状态了。1、路径别名配置:module-alias支持两种路径别名配置方式在package.json中增加_moduleAliases属性进行配置通过提供的API接口addAliasaddAliasesaddPath,增加配置2、在项目启动时首先导入该库:require(module-alias/register)即可,当然选择使用API方式的需要导入对应的函数进行处理一般我们都是使用package.json中配置路径别名 + 项目入口处require(module-alias/register)来使用这个库。module-alias通过覆写了全局对象Module上的方法_resolveFilename来实现路径别名的转换,简单来说就是通过拦截原生的_resolveFilename方法调用,进行路径别名的转换,当获取到文件的真实路径后,再调用原声的_resolveFilename方法。下面是其源代码,基本上分为两部分:路径别名转换+原生_resolveFilename调用看似简单的背后,往往也会踩坑一般我们会在node项目中使用module-alias库,因为node项目一般会从typescript转换成js代码,但是往往并不会进行打包处理,因为node项目中一般也确实不需要打包,显得有些冗余。这时候就需要module-alias上场了。但是这个项目有点不一般,我们在项目中使用了多层代码组织方式,最外层有全局的package.json, 内层包有自己的package.json, 简单说是使用了monorepo的代码组织方式,问题也就是由此而来。module-alias无法正常解析在package.json中配置的路径别名刚开始确实没想到是多层项目组织方式的问题,官网对module-alias/register使用有一段说明:但是当时确实也是没有注意到这块说明,要不然也不会踩这个坑了,下次看使用说明要仔细了,不过这么长的使用说明,大概率还是不会看的这么仔细。。。毕竟看起来这么简单的使用方法,好像似乎是不会出什么问题的吧既然踩坑了,就有必要了解一下踩坑的原因,避免反复踩坑才好。可以详细了解下module-aliasinit方法的实现。为了节省篇幅,省略了部分细节可以看重点部分,如果我们没有给base参数,module-alias默认会从../../目录和当前目录下找寻package.json文件,而且../..目录下的package.json文件的优先级比当前目录下的优先级还要高,这里的优先级设置似乎和正常的优先级逻辑有点差别,一般都会让当前目录的优先级比较高才比较符合正常逻辑,所以会导致加载的不是当前目录下的package.json文件,而导致找不到路径别名配置而出错。关于免费云主机、域名这点似乎有不少人踩坑了,还有人提了issues,但是似乎暂时并没有人回应。通过API方式注册路径别名,或者手动调用init方法,传入base参数,指定package.json文件.以上是“node.js中的module-alias怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注云技术行业资讯频道!

相关推荐: 如何使用PHP描述快速排序算法

这篇文章主要为大家展示了“如何使用PHP描述快速排序算法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用PHP描述快速排序算法”这篇文章吧。原理:快速排序使用分治策略来把待排序数据序列分为两个子序列,具体步骤…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册