小编典典

src目录外部的create-react-app导入限制

javascript

我正在使用create-react-app。我正在尝试从文件夹中的文件中调用公用文件夹中的图片src/components。我收到此错误消息。

./src/components/website_index.js找不到模块:您试图导入属于项目src/目录之外的../../public/images/logo/WC-BlackonWhite.jpg。不支持src/以外的相对导入。您可以将其移动到src /中,也可以从项目的node_modules /中向其添加符号链接。

import logo from '../../public/images/logo_2016.png'; <img className="Header-logo" src={logo} alt="Logo" />

我读过很多东西,说您可以导入路径,但这仍然对我不起作用。任何帮助将不胜感激。我知道有很多这样的问题,但是它们都告诉我要导入徽标或图像,因此很明显我在全局图中缺少某些内容。


阅读 1113

收藏
2020-04-25

共1个答案

小编典典

这是create-react-
app开发人员添加的特殊限制。的实现是ModuleScopePlugin为了确保文件位于中src/。该插件可确保从应用程序源目录的相对导入不会到达其外部。

您只能在eject运行create-react-app项目后才能禁用此功能。

大多数功能及其更新都隐藏在create-react-app系统的内部。如果您这样做eject,将不再具有某些功能及其更新。因此,如果您还没有准备好管理和配置用于配置Webpack的应用程序等,请不要进行eject操作。

按照现有规则播放(移至src)。但现在你可以知道如何删除限制:
eject和删除ModuleScopePlugin从的WebPack配置文件


create-react-app v0.4.0开始,NODE_PATH环境变量允许为绝对导入指定路径。并且由于不赞成使用v3.0.0NODE_PATH,而建议将其设置baseUrljsconfig.jsontsconfig.json

绝对进口允许使用import App from 'App'代替import App from './App'相对于在基本URL指定的值。

此功能对monorepos或其他配置问题特别有用,但不适用于从public文件夹导入图像或其他任何内容。

public文件夹的内容将放置在build文件夹中,并通过相对URL提供。另外,所有导入的内容都将由webpack处理,也将放置在build文件夹中。

如果您从public文件夹中导入某些内容,则该内容可能会在该build文件夹中重复出现,并且可以通过两个不同的URL(或使用不同的加载方式)使用,这最终会使软件包下载大小变大。

从src 文件夹 导入 是可取的,并且具有很多优点。一切将通过webpack打包到捆绑包中,并具有 最佳大小和最佳装载效率 。


有中间解决方案,即重新布线系统,它允许您以编程方式修改webpack配置。但除去该ModuleScopePlugin插件是不是一个很好的解决方案; 最好添加完全可用的类似于的其他目录src

当前,除根文件夹create-react-app外,不支持其他目录src。这可以使用react-app-rewire-alias完成

2020-04-25