2020-09-23 React Native 路径别名

什么是路径别名

不使用路径别名:

import { CheckIcon } from '../../../src/components/icons'

使用路径别名:

import { CheckIcon } from '@icons'

节省了好多代码,简洁明了,是不是很神奇?

如何使用路径别名

使用 babel-plugin-module-resolver
babel.config.js中,配置别名

module.exports = {
  presets: ['module:metro-react-native-babel-preset'],
  plugins: [
    [
      require.resolve('babel-plugin-module-resolver'),
      {
        alias: {
          '@icons': './src/components/icons',
          '@components': './src/components/components',
        },
      },
    ],
  ],
};

这样就可以使用 @icons@components 这样的别名了;

如果配置了 eslint-plugin-importeslint插件的规则,这个插件因为不识别@icons这样的路径别名而会报错,这时候你可以装一个 eslint-import-resolver-babel-module 来避免别名路径被 eslint-plugin-import 报错;


我们还能用 root 字段来自定义我们项目的 root 目录:

module.exports = {
  presets: ['module:metro-react-native-babel-preset'],
  plugins: [
    [
      require.resolve('babel-plugin-module-resolver'),
      {
        alias: {
          '@icons': './src/components/icons',
          '@components': './src/components/components',
        },
        root: ['./src'],
      },
    ],
  ],
};

root 字段接收一个数组,可以指定多个自定义的项目 root目录, 然后

   import { projectA } from 'project';

metro 会从根目录去寻找project目录,由于根目录被指定为 babel.config.js 所在路径的 ./src,故project就等同于项目本来的根目录下的src下的project

    it('should resolve the file path', () => {
        const opts = {
          root: ['./test/testproject/src'],
        };
        const result = resolvePath('app', './test/testproject/src/app', opts);

        expect(result).toBe('./app');
      });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。