Как я могу добавить CopyWebpackPlugin в приложение create-response-app без извлечения?

Я создаю приложение для реагирования и Я хочу скопировать все файлы изображений из исходного пункта назначения в пункт назначения сборки. Я следую некоторым руководствам, и пока мне удалось использовать react-app-wired и CopyWebpackPlugin.

Я не получаю ошибок и файлы не копируются.

Это мой config-overrides.js

const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = function override(config, env) {
   if (!config.plugins) {
    config.plugins = [];
  }
  config.plugins.push(
    new CopyWebpackPlugin(
    [
      {
        from: 'src/images',
        to: 'public/images'
      }
    ])
  );
  return config;
};

Это мой package.json

{
  "name": "public",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "axios": "^0.18.0",
    "copy-webpack-plugin": "^4.5.2",
    "css-loader": "^1.0.0",
    "prop-types": "^15.6.2",
    "react": "^16.4.2",
    "react-app-rewired": "^1.5.2",
    "react-axios": "^2.0.0",
    "react-dom": "^16.4.2",
    "react-router-dom": "^4.3.1",
    "react-scripts": "1.1.4",
    "react-slick": "^0.23.1",
    "slick-carousel": "^1.8.1",
    "typeface-montserrat": "0.0.54",
    "webfontloader": "^1.6.28"
  },
  "scripts": {
    "build-css": "node-sass-chokidar src/ -o src/",
    "watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive",
    "start-js": "react-app-rewired start",
    "start": "npm-run-all -p watch-css start-js",
    "build-js": "react-app-rewired build",
    "build": "npm-run-all build-css build-js",
    "test": "react-app-rewired test --env=jsdom",
    "eject": "react-scripts eject"
  },
  "devDependencies": {
    "npm-run-all": "^4.1.3",
    "style-loader": "^0.22.1"
  }
}

Моя структура папок

src/images src/images/file.jpg src/images/slider/1.png src/images/slider/2.png public/images (empty) so far

Просто вам, возможно, придется сделать что-то вроде продвинутых руководств ant.design/docs/react/use-with-create-react-app

user158 20.08.2018 09:08

Вопросы: 1. Вам нужно использовать для этого плагин webpack? нельзя ли добавить скрипт к build в package.json? 2. Вы используете CRA или rewired-app? В заголовке вопроса указано CRA, а в коде указано react-app-rewired. 3. CRA должен по умолчанию поместить все образы в build/static/media. Этот путь вам не подходит?

dubes 24.08.2018 10:07

Просто смотрел видеоурок несколько дней назад, может быть, это поможет (не уверен, понадобится ли вам членство для просмотра этого видео)? egghead.io/lessons/…

konekoya 24.08.2018 10:23

@dubes Я думаю, вам нужно сделать import image1 from './component/file.jpg, чтобы это работало, чтобы он сжимался и прикреплял к нему случайное имя

TheBlackBenzKid 24.08.2018 12:33

Я обнаружил, что после извлечения проекта из create-react-app гораздо проще справиться с подобными особенностями конфигурации, так что это может быть лучшим выходом. create-react-app предназначен только как отправная точка, а не как каноническая конфигурация React для проекта на протяжении всей его жизни.

nnyby 29.08.2018 06:01

Центральное восходящее обсуждение пользовательских конфигураций в целом, по-видимому, находится на github.com/facebook/create-react-app/issues/6303 BTW.

Ciro Santilli 新疆再教育营六四事件法轮功郝海东 27.04.2021 19:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
9
6
7 143
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Определенно не рекомендуется изменять файл node_modules/react-scripts/config/webpack.config.dev.js, так как он сломается при обновлении этого конкретного пакета. Также, скорее всего, вы проигнорируете node_modules в вашей системе контроля версий, что означает, что эта конфигурация не будет передана разработчикам или скопирована.

Хотя я лично не пробовал, вы можете использовать что-то вроде этого: https://github.com/timarney/react-app-rewired, чтобы переопределить конфигурацию Webpack.

Вы можете посмотреть руководство здесь: https://medium.com/@timarney/but-i-dont-wanna-eject-3e3da5826e39

Спасибо за ответ, я обновил свой вопрос и до сих пор мне удалось подготовить архитектуру плагина и подготовку файлов, но файлы не копируются или не возникают ошибки.

TheBlackBenzKid 24.08.2018 10:03
Ответ принят как подходящий

Предположим, вы просто хотите переместить файлы с -/src/<somewhere> на ./<somewhereElse> во время строить.

Вы можете просто добавить дополнительный шаг к своему сценарию build в package.json. Приведенный ниже шаг полностью под вашим контролем и не влияет на какие-либо сценарии или конфигурацию create-response-app.

Например, я использовал ncpупаковка, но если вам нужен более детальный контроль, вы также можете создать свой собственный «шаг» с помощью ncp или даже с помощью raw node fs api.

Вот способ повторить то, что я сделал:

Настраивать

npx create-react-app img-upload
cd img-upload/
yarn add --dev ncp

Данные испытаний создать структуру папок src / images / и поместить в файлы

ls -R src/images/
src/images/:
badge.jpg  folder1

src/images/folder1:
applause.gif  blank.png

Package.json

Я редактировал только часть: "build": "ncp './src/images' './public/images' && react-scripts build",

{
  "name": "img-upload",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.4.2",
    "react-dom": "^16.4.2",
    "react-scripts": "1.1.5"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "ncp './src/images' './public/images' &&  react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  },
  "devDependencies": {
    "ncp": "^2.0.0"
  }
}

Контрольная работа: Перед запуском сборки:

ls public
favicon.ico  index.html  manifest.json

После запуска сборки: yarn build

ls public
favicon.ico  images  index.html  manifest.json

ls -R public/images
public/images/:
badge.jpg  folder1

public/images/folder1:
applause.gif  blank.png

ls build
asset-manifest.json  favicon.ico  images  index.html  manifest.json  service-worker.js  static

ls -R build/images
build/images/:
badge.jpg  folder1

build/images/folder1:
applause.gif  blank.png

Предположение Я предполагаю, что вам в конечном итоге понадобятся эти файлы в каталоге build. Если это так, вы можете просто переключить свой скрипт build.

"build": "react-scripts build && ncp './src/images' './build/images'",

Таким образом вы не загрязните свою общую папку, которую, возможно, захотите оставить в системе управления версиями.

В итоге я добавил это в start и build, но я сделал "ncp": "ncp src/images public/images" и просто добавил ncp в качестве ссылки. Есть ли возможность посмотреть папку во время разработки? В противном случае мне придется каждый раз убивать узел и запускать npm start или npm build

TheBlackBenzKid 29.08.2018 19:25

У меня есть несколько идей, но это зависит от того, чего вы пытаетесь достичь. Мне нужно немного больше понять ваш поток. Давай попробуем завтра поговорить.

dubes 29.08.2018 21:34

Просто способ, которым npm будет смотреть и всегда копировать в папку изображений, убедившись, что если я переименую, он переименует, если я удалю, он удалит - полная синхронизация часов в реальном времени

TheBlackBenzKid 30.08.2018 07:09

Я ищу способы сделать это. Еще один ход мыслей: нельзя ли хранить их только в общей папке? Как вы импортируете эти изображения в свой реагирующий компонент?

dubes 31.08.2018 09:34

Я просто использую <img src='/images/file.jpg'/> до того, как писал их как import, но когда у вас есть огромные слайдеры или большой контент с изображениями, я решил вызвать им напрямую. У меня также есть API-интерфейс axios JSON, который связывает изображения, как внутри этих переменных и объектов.

TheBlackBenzKid 02.09.2018 07:48

Я думаю, проблема в том, что вы используете webpack-dev-server вместе с copy-webpack-plugin. Если это правда, copy-webpack-plugin скопирует файлы в виртуальный каталог, который работает с webpack-dev-server. Итак, в этой ситуации вам нужно добавить еще один плагин, чтобы это произошло.

If you want webpack-dev-server to write files to the output directory during development, you can force it with the write-file-webpack-plugin.

import WriteFilePlugin from 'write-file-webpack-plugin';

конфигурация webpack:

config.plugins.push(
    new CopyWebpackPlugin(
    [
      {
        from: 'src/images',
        to: 'public/images'
      }
    ])
  );
config.plugins.push(new WriteFilePlugin());

Вы можете посетить официальный документ для получения дополнительной информации: https://webpack.js.org/plugins/copy-webpack-plugin/

Надеюсь, это сработает!

Моя работала так:

const { override, addWebpackPlugin } = require('customize-cra');
module.exports = {
webpack: override(
    addWebpackPlugin(
        new CopyWebpackPlugin({
            patterns: [
                { from: 'src/config', to: 'config' }
            ],
        })
    )
)

При этом я беру содержимое своей папки config и создаю такое же в сборке, также называемое config.

Спасибо за ответ

TheBlackBenzKid 02.12.2020 12:09

Другие вопросы по теме