前言

这个问题首先要从我们项目的require语句开始说起。
当打开我们项目的时候,我们可能会看到一大堆长相对引用,如下所示:
import component from '../../../../component/aaa.js'
你一定知道,webpack中有个叫做alias的配置属性,可以帮助我们搞全局引用配置。比如说,在webpack.config.js中配置相应的键值对,我们就可以通过require(‘util’) 这种方式,而非require(‘../../../util’)这种方式,去做引用。
项目中虽然没有用webpack,但是用到了babel,而babel有个叫做babel-plugin-module-resolver可以做类似的事情
介绍:    https://www.jianshu.com/p/beafc1470fca
npm地址: https://www.npmjs.com/package/babel-plugin-module-resolver
好,最关键的问题来了,到底是选用全局绝对引用(alias)   还是  长相对引用??? 其利弊几何??

两种方式

  • 使用全局路径,依靠babel插件实现全局引用(alias)
  • 使用相对路径,并依靠VScode自带功能提升效率

使用全局路径,依靠babel插件实现全局引用(alias)

  • 代码简洁,短小精悍

  • 无法利用VScode默认自带功能实现点击跳转,比如我们看代码时候经常需要点击一个require的链接,然后实现跳转,但是使用这种alias的时候不能实现自动跳转
  • 无法利用VScode默认自带的路径导入功能,写成alias虽然简单了,但是形式上简单,实际工程中却未必简单,这是因为,如果是采用相对路径的话,根据系统的默认自带功能,可以自动引入相对路径的,根本无需编写。如果你采用绝对路径的方式书写方法时,VScode的这一功能就爱莫能助了
  • 完全不需要考虑代码重构问题
  • RN-web和RN的代码打包方式不一致,可能产生冲突,因为RN用的是babel结合bundleJS打包的,而web是根据webpack打包的,两者在设置全局alias的时候方式可能不一样,需要测试预估风险

使用相对路径,并依靠VScode自带功能提升效率

实际上,今天的VScode已经非常强大了,上面的对比其实就讲了VScode自带功能,给相对路径的效率带来的巨大提升:
  • VScode默认自带相对路径跳转功能,实现相对路径点击跳转。这是个非常有用的功能,当你在A文件中,看到它引用了一个B文件下的类,你可以直接跳转到B文件,让代码阅读变得非常方便
  • VScode默认自带相对路径导入功能,如果是采用相对路径的话,根据系统的默认自带功能,你敲出方法名的时候,会逐个字母筛选并显示提示,同时选择对应方法的时候,文件上方会自动引入那个模块的相对路径。
  • 文件路径修改时候,VScode自带一键更新路径功能,所以重构什么的so easy!
  • 思路保守,不会发生不可预测的问题

额。。。。。。 好像除了写起来不太好看之外,没有什么明显的缺点,哈哈哈哈

折中方案, 以及进一步的利弊分析

OK,那我们能不能既让代码好看,同时还使用方便简单呢??

其实我想过这么一种方案:

1.通过加入alias的功能,让代码简洁漂亮,不像长相对路径那样那么冗长
2.通过IDE插件,如VScode插件,让代码编写的流畅性和相对路径一样
 
但是这种方式的缺点显而易见:
  • 插件生态问题:我们团队不可能大家都用VScode, 而且本来VScode就不一定有这种插件,而其他IDE的社区就更差了,我认为能通过插件达到效果的希望不大
  • 就算真的有这些插件,使用起来似乎也不太方便,VScode的扩展插件的代码是不能上传到github的,要自己下载,而同步的话又需要额外的插件,这样,新人加进来就不能做到开箱即用了。我们之间团队的协调还不能做到完全一致,可能新人进来没人引导他下载这些VScode插件
  • 好吧,就算前2种都没问题,但其实还是有问题,因为我们没办法完全禁掉相对路径引用,所以结果就是相对引用和绝对引用并存的状态,这时候风格就很乱,不统一

结论

就用相对路径吧!! 难看就难看呗,咱们追求的是实用主义

模块引用方式利弊辨析: 全局绝对引用(alias) && 长相对引用的更多相关文章

  1. CSS样式表引用方式

    最近讲课中,有些学员对调用样式表老是有含糊不清?大体说来有四种方式: 1.外部文件引用方式;(推荐使用) 2.使用@import引用外部CSS文件; 3.内部文档头方式也叫内嵌法调用; 4.直接插入式 ...

  2. Java 8 的新特性和Java 的4种引用方式

    一.接口的增强 Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下: interface Formula { double ca ...

  3. python 模块被引用多次但是里面的全局表达式总共只会执行一次

    python 模块被引用多次但是里面的全局表达式总共只会执行一次

  4. Android多Module下的Application引用方式

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 Android开发时,Application一般都放在APP中,Lib模块如果想引用Application则需要在APP中进行传递, ...

  5. 转载:Java的四种引用方式

    原文:https://www.cnblogs.com/huajiezh/p/5835618.html Java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指 ...

  6. arcgis api for js自定义引用方式

    (1)常规模式 ​ 即arcgis js常见的模块引用方式,采用 require-function 模式,function的参数与require一一对应即可(dojo/domReady!比较特殊,无需 ...

  7. CSS 选择器及各样式引用方式

    Css :层叠样式表 (Cascading Style Sheets),定义了如何显示HTML元素. 目录 1. 选择器的分类:介绍ID.class.元素名称.符合.层次.伪类.属性选择器. 2. 样 ...

  8. MyBatis mapper文件中的变量引用方式#{}与${}的差别

    MyBatis mapper文件中的变量引用方式#{}与${}的差别 #{},和 ${}传参的区别如下:使用#传入参数是,sql语句解析是会加上"",当成字符串来解析,这样相比于$ ...

  9. css的两种引用方式 link和@import

    学习web开发的最大乐趣就是不断的发现自己以前不曾见过的东西,这些东西对于我来说是那么的新鲜有趣. 比如说今天偶尔研究别人的网站,就发现了有趣的东东. 当点开此网页的css时(这个css文件命名方式就 ...

随机推荐

  1. 虚拟链路(virtual-link)

    第四部分,虚拟链路配置.我们都知道,在ospf多区域中,所有与主干区域(ospf0)相连接的其他区域可以相互学系路由信息,但是,如果是非主干区域和非主干区域相连,就不能相互学习路由信息,这时候,我们可 ...

  2. 【Web技术】281- 滴滴开源小程序框架 Mpx2.0

    滴滴Mpx框架负责人@hiyuki,滴滴出行网约车webapp乘客团队的负责人,也是滴滴开源的小程序框架Mpx的负责人和核心作者 Mpx是一款致力于提高小程序开发体验和效率的增强型小程序框架,目前在滴 ...

  3. JS中的深拷贝和浅拷贝

    浅拷贝 浅拷贝是拷贝第一层的拷贝 使用Object.assign解决这个问题. let a = { age: 1 } let b = Object.assign({}, a) a.age = 2 co ...

  4. 【Java Web开发学习】Spring环境profile

    [Java Web开发学习]Spring 环境profile 转载:http://www.cnblogs.com/yangchongxing/p/8890702.html 开发.测试.生产环境往往是不 ...

  5. Python3之Django的Cookie与Session的使用

    一.Cookie的使用 1.设置Cookie url.set_cookie("tile","zhanggen",expires=value,path='/' ) ...

  6. django基础之day04,必知必会13条,双下划线查询,字段增删改查,对象的跨表查询,双下划线的跨表查询

    from django.test import TestCase # Create your tests here. import os import sys if __name__ == " ...

  7. Microsemi Libero使用技巧——使用命令行模式下载程序

    前言 在工程代码编译完成之后,如果需要给某个芯片下载程序时,或者是工厂量产烧录程序时,我们不需要把整个工程文件给别人,而只需要把生成的下载文件给别人,然后使用FlashPro就可以单独下载程序文件了. ...

  8. C#线程学习笔记九:async & await入门二

    一.异步方法返回类型 只能返回3种类型(void.Task和Task<T>). 1.1.void返回类型:调用方法执行异步方法,但又不需要做进一步的交互. class Program { ...

  9. layui2.5 开关在confirm确认了之后在关/开

    <!--默认选中--> <div class="layui-form-item layui-form"> <div class="layui ...

  10. JavaScript-----15.简单数据类型和复杂数据类型

    1. 简单数据类型和复杂数据类型 简单数据类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型 值类型:在存储时变量中存储的是值本身:string number Boolean undefined ...