如何避免在create-react-app中使用相对路径导入(/../../../ redux/action/action1)

Pre*_*rem 36 npm reactjs react-native create-react-app

我一直在使用create-react-app包来创建一个反应网站.我在我的应用程序中使用相对路径来导入组件,资源,redux等.例如,import action from '../../../redux/action

我尝试过使用module-alis npm包但没有成功.我可以使用任何插件根据文件夹名称或别名导入吗?

例如,import action from '@redux/action'import action from '@resource/css/style.css'

Dan*_*mov 84

创建一个.env在项目根目录中调用的文件并写入:

NODE_PATH=src
Run Code Online (Sandbox Code Playgroud)

然后重启开发服务器.您应该能够在src没有相对路径的情况下导入任何内容.

注意我不建议调用您的文件夹,src/redux因为现在令人困惑的是redux导入是指您的应用程序还是库.相反,您可以调用您的文件夹src/app并从中导入内容app/....

我们故意不支持自定义语法,@redux因为它与节点分辨率算法不兼容.

  • 是的,它适用于create-react-app (5认同)
  • 有关奥古斯丁评论的更多信息,请访问:https://facebook.github.io/create-react-app/docs/importing-a-component#absolute-imports (5认同)
  • 当前,如果使用此方法,create-react-app将显示已弃用的警告。现在推荐的方法是使用jsConfig.json文件:`{“ compilerOptions”:{“ baseUrl”:“ src”}}` (3认同)
  • 该选项已被废弃,不应使用... (2认同)

Ben*_*ith 83

已接受答案中的方法现已被取代。Create React App 现在有一种不同的方式来设置绝对路径,如此处所述

总而言之,您可以通过执行以下操作来配置您的应用程序以支持使用绝对路径导入模块:

使用以下内容在项目的根目录中创建/编辑 jsconfig.json/tsconfig.json:

{
  "compilerOptions": {
    "baseUrl": "src"
  },
  "include": ["src"]
}
Run Code Online (Sandbox Code Playgroud)

或者:

如果您使用的是 TypeScript,则可以在项目的 tsconfig.json 文件的 compilerOptions 中配置 baseUrl 设置。

完成此操作后,您可以通过指定“src”的子目录来导入(在以下示例中,components 是 src 的子目录)例如

import Button from 'components/Button'
Run Code Online (Sandbox Code Playgroud)

  • @VigneshwaranChandrasekaran 该链接已包含在我的答案中。请参阅“...如[此处](https://create-react-app.dev/docs/importing-a-component/#absolute-imports)所述设置绝对路径的方法。” (2认同)

Abd*_*fez 6

在您尝试上面Ben Smith 的解决方案后,如果您发现 eslint 抱怨导入绝对路径,请将以下行添加到您的 eslint 配置中:

settings: {
  'import/resolver': {
    node: {
      paths: ['src'],
    },
  },
},
Run Code Online (Sandbox Code Playgroud)

如果您将自己的样板文件与文件夹的名称一起使用,请将 'src' 替换为您的文件夹。


san*_*osh 5

我们可以在 webpack 配置中使用 webpack 2 解析属性。

使用 resolve 的示例 webpack 配置:

这里的 component 和 utils 是包含 React 组件的独立文件夹。

resolve: {
        modules: ['src/scripts', 'node_modules'],
        extensions: ['.jsx', '.js'],
        unsafeCache: true,
        alias: {
            components: path.resolve(__dirname, 'src', 'scripts', 'components'),
            utils: path.resolve(__dirname, 'src', 'scripts', 'utils'),
        }
    }
Run Code Online (Sandbox Code Playgroud)

之后我们可以直接在文件中导入:

import UiUtils from 'utils/UiUtils';
import TabContent from 'components/TabContent';
Run Code Online (Sandbox Code Playgroud)

Webpack 2 解析参考

  • 不,不支持修改这些配置。您可以弹出,但随后您将失去 CRA 的许多好处。请参阅我的答案以获取支持的执行方式。 (6认同)