React Native 有没有可能去掉导入的相对路径?

aij0ehis  于 2023-03-24  发布在  React
关注(0)|答案(3)|浏览(146)

在任何使用node.js的项目中,react,我设置了env变量:

NODE_PATH=src/

然后我可以导入

import COLORS from 'Constants/Colors'

代替

import COLORS from '../../../Constants/Colors'

我刚开始使用react-native和expo,并试图找到解决方案。
我尝试了相同的方法添加env变量,但它不起作用

oknwwptz

oknwwptz1#

你可以使用babel-plugin-module-resolver库来简化你的导入路径。它允许写别名导入而不是复杂的相对路径。

wz1wpwve

wz1wpwve2#

安装babel-plugin-module-resolver

yarn add babel-plugin-module-resolver

然后像这样在babel.config.js文件中添加相对路径

module.exports = function(api) {
  api.cache(true);
  return {
    presets: ['babel-preset-expo', 'module:metro-react-native-babel-preset' ],
    plugins: [
            [
                'module-resolver',
                {
                    alias: {
                       '@company'     : './src/company.json',
                       '@components'     : './src/components'

                }
            }
            ]
        ]
  };
};

然后你可以像这样使用绝对路径

import TextLabel from './src/components/textLabel/index.js'

import TextLabel from '@components/textLabel/index.js'
5uzkadbs

5uzkadbs3#

使用Imports属性

截至2023年3月,消除JavaScript相对路径的一个好方法是在package.json中使用imports属性。有关更多信息,请参阅此帖子:

在下面的代码中,#root是项目根。
(请投票支持这个答案,如果他们帮助你,请this post。谢谢!)

对于CommonJS风格的JavaScript:

// package.json
{
  "imports": {
    "#root/*.js": "./*.js"
  }
}

// main.js:
const Source = require('#root/path/to/Source.js');

// Source.js:
module.exports = class Source {
  // ...
}

ECMAScript风格的JavaScript:

// package.json:
{
  "type" : "module",
  "imports": {
    "#root/*.js": "./*.js"
  }
}

// main.js
import { Source } from '#root/path/to/Source.js';

// Source.js:
export class Source {
  // ...
}

优点:

  • 不需要“导入”或“要求”任何额外的包(没有Babel.js,没有Webpack,没有RequireJS)。安装NodeJS后,这个方法可以开箱即用。
  • IDE链接按预期工作(按住Ctrl键并单击类名可直接跳转到源文件。此外,移动源文件(通过拖放)将自动更新文件路径引用。在WebStorm 2022.3.2VS Code 1.76.2上进行了测试。)
  • 同时支持.mjs(ECMAScript模块系统)和.cjs(CommonJS)文件类型。请参阅reference Post on .cjs and .mjs.
  • 不需要使用保留的node_modules目录进行修改
  • 无需在操作系统级别设置任何linux文件链接

相关问题