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

IT技术 reactjs import create-react-app relative-path absolute-path
2021-04-01 04:55:08

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

我曾尝试使用module-alis npm 包,但没有成功。是否有任何插件可用于根据文件夹名称或别名(即绝对路径)导入?

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

6个回答

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

NODE_PATH=src

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

请注意,我不建议调用您的文件夹,src/redux因为现在很容易混淆reduximport 是指您的应用程序还是库。相反,您可以调用您的文件夹src/app并从app/....

我们故意不支持自定义语法,@redux因为它与 Node 解析算法不兼容。

@Mehari 你的 create-react-app 和 react-scripts 版本是什么?
2021-05-22 04:55:08
目前,如果您使用这种方法,create-react-app 会显示已弃用的警告。现在推荐的方法是使用 jsConfig.json 文件:{ "compilerOptions": { "baseUrl": "src" } }
2021-05-24 04:55:08
我可以在 react-create-app 中做到这一点吗?我试过了,但它似乎不起作用,尽管来自medium.com/@ktruong008/ 的家伙建议相同
2021-05-27 04:55:08
有关奥古斯丁评论的更多信息,请访问:facebook.github.io/create-react-app/docs/...
2021-06-06 04:55:08
这对我们本地有效,但当我们在 Jenkins 中构建时无效(我们在 Node-app 中有一个 React-app),无论如何,我们解决了这个问题,将它添加到 React 的 package.json 中:{"scripts": {"build": "NODE_PATH=./src react-scripts build"}} 现在构建也适用于我们的 Jenkins 设置。谢谢你的提示!
2021-06-10 04:55:08

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

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

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

{
  "compilerOptions": {
    "baseUrl": "src"
  },
  "include": ["src"]
}

或者:

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

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

import Button from 'components/Button'
@VigneshwaranChandrasekaran 该链接已包含在我的回答中。请参阅“...根据此处记录的设置绝对路径的方法”。
2021-06-06 04:55:08
我更喜欢这个解决方案。👍
2021-06-12 04:55:08

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

settings: {
  'import/resolver': {
    node: {
      paths: ['src'],
    },
  },
},

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

为参考干杯,并为使 eslint 与解决方案很好地协同工作而干杯。
2021-06-02 04:55:08

我们可以在 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'),
        }
    }

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

import UiUtils from 'utils/UiUtils';
import TabContent from 'components/TabContent';

Webpack 2 解析参考

不,不支持修改这些配置。您可以退出,但随后您将失去 CRA 的许多好处。请参阅我的回答以获取支持的执行方式。
2021-06-01 04:55:08
webpack.config.js 在以下路径中可用: /create-react-app/blob/master/packages/react-scripts/config/webpack.config.dev.js /create-react-app/blob/master/packages/react-scripts/config/webpack.config.prod.js
2021-06-06 04:55:08
我使用 create-react-app 包,我无法修改 webpack 配置。有没有其他方法可以做到?
2021-06-20 04:55:08

2010 年 2 月
在这上面浪费了大约一个小时。一个例子如下:

目标:导入App.cssHomePage.js

myapp\src\ App.css
myapp\src\ pages\HomePage.js

文件: jsconfig.json

{
  "compilerOptions": {
    "baseUrl": "src"
  }
}

文件: src\pages\HomePage.js

import "App.css";