在开发RN项目时,常常会要使用这样的方式(../../../)来引入组件,感受很是繁琐,若是项目结构层级比较多,引入的头部更加分不清. 那有没有一种方案和vue项目同样,通过配置后简写路径,在引入的时候,直接使用,例如vue项目中 @ 符号表示 src目录. 通过百度后,发现仍是有这种相似的配置. 但尝试过网上的几种方案,都没起做用,主要是因为个人项目是基于 RN(0.59.5) + TypeScript搭建的。 javascript
例如你想引入utils里面的文件,不想../../../..,这样引入,而是想@utils/.....这样引入,那么你就能够在utils文件中放一个package.json,里面以下: html
该方案,我尝试以后没有成功,项目中的 ts文件有规则校验,会有错误提示,找不到该模块。 若是不是用TypeScript构建的项目,我想是能够的。 vue
这种方案,网上搜索是最多的. 网上所描述的具体实现,这里不撰写了,反正我按照网上的步骤配置,没有成功。估计也是只适合于ES6构建的项目。 java
以上两种方案,参考 react-native 相对项目路径导入组件, 感谢暖暖的风儿 给我提供了些思路 react
在文件的顶部,嵌套一个多行注释,把@providesModule放在注释里,@providesModule后添加类名,之后就直接使用类名就能导入了。 typescript
注意,带有@providesModule的多行注释,必定要是文件的第一个多行注释。如: npm
外部使用Common json
尝试以后,ts的校验,仍是会报错. 这种方案主要是参考ReactNative之解决文件导入路径问题, 这篇文章中有介绍@providesModule的原理,有兴趣的同窗,请拜读。 react-native
由于项目是用TypeScript构建的,在尝试几种错误思路后,而后想TypeScript是否是原本就支持路径设置?确实,TypeScript是支持设置相对路径的. 网上提供的方案 缓存
在 tsconfig.json 中设置
这样在 import 的时候就不用使用一长串的 ../../../.. 这种形式了,直接使用相对短路径
采用这种方案以后,在ts文件中的校验不报错了,也能直接连接到对应的申明。但编译为javascript后,路径并无映射过去,生成apk的时候报错,提示找不到对应的模块。
至此,我已发现,只要解决此编译问题,那么就能解决了。可是发现没有这么简单,后又尝试了引入 module-alias, tsmodule-alias等插件来解决此编译问题都没有成功,估计是没有用正确。
轮番尝试以上的几种错误方案后,反复搞了一天,心累了。哎,还好没有最终放弃,在上述的第2种方案中,我引入了babel-plugin-root-import插件, 发现可使用某个符号替代路径.
npm install babel-plugin-root-import --save-dev 或 yarn add babel-plugin-root-import –dev
若是 npm 没有安装成功,就用 yarn (我是使用yarn 才安装成功)
这里,我尝试过rootPathPrefix 用 @ , 在编译的时候会报错。因此不得不放弃使用@ (有些强迫症,想要用@, 由于vue项目中就是@表示src目录)
已有项目,记得执行此命令清理缓存,这点很是重要,我在调试的过程当中,变动过几回符号的配置,若是变动配置后没有执行该命令,则配置不起做用
在 tsconfig.json 中设置
注意:变动设置以后,最好重启下VSCode
至此,咱们在项目中引入文件能够用如下优雅的方式
项目是使用 TypeScript + Dva构建的RN项目,该问题网上给出的一些方案都是基于 ES6构建的RN项目,因此以前的解决方案,都不适应。再加上我学习TypeScript 和 RN的时间不长,不少理论知识学习不到位。因此花了比较长的时间。我正在搭建基于TypeScript + Dva + RN + React-Navigation 的App开发框架,欢迎有兴趣的同窗一块儿交流。后续,也会把我搭建的项目框架,进行开源, 目前还只实现了一些基础建设,哈哈~~。
如下是我项目框架的目录: