При работе с create-react-app разработчики часто сталкиваются с ограничением импорта, которое не позволяет импортировать файлы, расположенные за пределами каталога src. Это ограничение введено по соображениям безопасности, поскольку разрешение импорта из произвольных мест может привести к уязвимостям. Однако существует несколько способов обойти это ограничение при необходимости. В этой статье мы рассмотрим различные подходы с примерами кода, которые помогут вам импортировать файлы из-за пределов каталога src в ваши проекты create-react-app.
Метод 1: использование относительного пути
Один простой способ импортировать файлы из-за пределов каталога src — использовать относительный путь. Предположим, у вас есть файл «utils.js», расположенный в корневом каталоге. Чтобы импортировать его в компонент, вы можете использовать следующий синтаксис:
import utils from '../../utils.js';
Здесь количество «../» в пути зависит от расположения файла относительно файла компонента. Хотя этот метод работает, его обслуживание может оказаться затруднительным при работе с глубоко вложенными каталогами.
Метод 2: настройка преобразователя модулей
Другой подход — настроить преобразователь модулей в конфигурации веб-пакета вашего проекта. Этот метод позволяет вам определять псевдонимы для определенных каталогов, что упрощает импорт файлов из-за пределов каталога src. Вот как это можно настроить:
-
Установите необходимые пакеты:
npm install --save-dev react-app-rewired npm install --save-dev customize-cra -
Создайте файл
config-overrides.jsв корневом каталоге вашего проекта со следующим содержимым:
const path = require('path');
module.exports = function override(config) {
config.resolve.alias = {
'@root': path.resolve(__dirname, './'),
};
return config;
};
- Измените раздел
scriptsв файлеpackage.jsonследующим образом:
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
...
}
Теперь вы можете импортировать файлы из-за пределов каталога src, используя псевдоним @root:
import utils from '@root/utils.js';
Метод 3: использование общедоступной папки
Общая папка в проекте create-react-app используется как статическая папка при разработке и производстве. Вы можете размещать файлы в общей папке и получать к ним прямой доступ без каких-либо ограничений на импорт. Например, если у вас есть файл с именем «data.json» в общей папке, вы можете получить его, используя следующий код:
fetch('/data.json')
.then((response) => response.json())
.then((data) => {
// process the data
});
Хотя create-react-app по умолчанию применяет ограничение на импорт за пределами каталога src, при необходимости существует несколько способов обойти это ограничение. Мы рассмотрели три подхода, используя относительные пути, настройку преобразователя модулей и использование общей папки. У каждого метода есть свои преимущества и недостатки, поэтому выберите тот, который лучше всего соответствует потребностям вашего проекта.