我正在使用create-react-app。我试图从我的src/components内部的文件中调用我的公共文件夹中的图像。我收到这个错误信息。

./src/components/website_index.js模块未找到:你试图 import ../../public/images/logo/WC-BlackonWhite.jpg 在项目src/目录之外。国外的相对进口 Src /不支持。您可以将它移动到src/,或者添加一个 从项目的node_modules/到它的符号链接。

从“../../public/images/logo_2016.png”导入logo; <img className="Header-logo" src={logo} alt=" logo" />

我读过很多东西,说你可以做一个导入的路径,但这仍然不是为我工作。任何帮助都将不胜感激。我知道有很多这样的问题,但他们都告诉我导入标志或形象,所以很明显,我在大局中遗漏了一些东西。


当前回答

安装这两个包

npm i --save-dev react-app-rewired customize-cra

package.json

"scripts": {
    - "start": "react-scripts start"
    + "start": "react-app-rewired start"
},

config-overrides.js

const { removeModuleScopePlugin } = require('customize-cra');

module.exports = function override(config, env) {
    if (!config.plugins) {
        config.plugins = [];
    }
    removeModuleScopePlugin()(config);

    return config;
};

其他回答

react-app-rewired包可以用来删除插件。这样你就不用弹射了。

按照npm包页面上的步骤(安装包并翻转包中的调用)。Json文件),并使用类似于这个的config-override .js文件:

const ModuleScopePlugin = require('react-dev-utils/ModuleScopePlugin');

module.exports = function override(config, env) {
    config.resolve.plugins = config.resolve.plugins.filter(plugin => !(plugin instanceof ModuleScopePlugin));

    return config;
};

这将从使用的WebPack插件中删除ModuleScopePlugin,但保留其余部分,并消除了弹出的必要性。

最好的解决方案是fork react-scripts,这实际上在官方文档中提到过,参见:ejection的替代方案

这是create-react-app开发者添加的特殊限制。它在ModuleScopePlugin中实现,以确保文件驻留在src/中。该插件确保从应用程序的源目录导入的相对文件不会到达应用程序的外部。

除了使用eject和修改webpack配置,没有任何官方方法可以禁用此功能。

但是,大多数功能及其更新都隐藏在创建-反应-应用程序系统的内部。如果你让弹出你将没有更多的新功能和它的更新。因此,如果你还没有准备好管理和配置应用程序,包括配置webpack等-不要做弹出操作。

发挥现有的规则-移动资产到src或使用基于公共文件夹url没有导入。


然而,有许多非官方的解决方案,而不是驱逐 Rewire允许你以编程方式修改webpack配置而不弹出。但是删除ModuleScopePlugin插件并不好——这失去了一些保护,并且没有添加src中可用的一些特性。ModuleScopePlugin被设计为支持多个文件夹。

更好的方法是添加完全工作的附加目录,类似于src,也受ModuleScopePlugin保护。这可以使用react-app-alias来完成


无论如何,不要从公共文件夹导入-这将在构建文件夹中复制,并将通过两个不同的url(和不同的加载方式)可用,这最终会恶化包的下载大小。

从src文件夹导入是更可取的,它有很多优点。所有东西都将通过webpack打包到包中,以块的最佳大小和最佳的加载效率。

这对我来说很有效,不需要安装/更改任何东西

上下文:当我试图使用yarn运行构建生成一个构建时,我得到了这个错误

我所做的事情之间的工作和失败的纱线运行建立

我将ant设计更新到最新的稳定版本(v4.23.5)。

注:我非常相信这与这个版本无关。我提一下只是为了补充一些细节。

这个回答解决了我的问题。但是我没有更改任何访问src目录之外内容的导入。 更改包括更新的包。json,纱线。lock,新的Antd实现(主要是道具的变化)。 为什么构建命令坏了/为什么答案是工作的没有意义。

解决办法

因为所有的变化都与包装有关。json, yarn.lock。我删除了node_modules并清洁安装了所有的包。

Run

yarn

or

npm install

我认为Lukas Bach的解决方案使用react-app-rewired来修改webpack配置是一个很好的方法,但是,我不会排除整个ModuleScopePlugin,而是将可以从src导入的特定文件列入白名单:

config-overrides.js

const ModuleScopePlugin = require("react-dev-utils/ModuleScopePlugin");
const path = require("path");

module.exports = function override(config) {
  config.resolve.plugins.forEach(plugin => {
    if (plugin instanceof ModuleScopePlugin) {
      plugin.allowedFiles.add(path.resolve("./config.json"));
    }
  });

  return config;
};