Я создаю приложение для реагирования и Я хочу скопировать все файлы изображений из исходного пункта назначения в пункт назначения сборки. Я следую некоторым руководствам, и пока мне удалось использовать 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
Вопросы: 1. Вам нужно использовать для этого плагин webpack? нельзя ли добавить скрипт к build в package.json? 2. Вы используете CRA или rewired-app? В заголовке вопроса указано CRA, а в коде указано react-app-rewired. 3. CRA должен по умолчанию поместить все образы в build/static/media. Этот путь вам не подходит?
Просто смотрел видеоурок несколько дней назад, может быть, это поможет (не уверен, понадобится ли вам членство для просмотра этого видео)? egghead.io/lessons/…
@dubes Я думаю, вам нужно сделать import image1 from './component/file.jpg, чтобы это работало, чтобы он сжимался и прикреплял к нему случайное имя
Я обнаружил, что после извлечения проекта из create-react-app гораздо проще справиться с подобными особенностями конфигурации, так что это может быть лучшим выходом. create-react-app предназначен только как отправная точка, а не как каноническая конфигурация React для проекта на протяжении всей его жизни.
Центральное восходящее обсуждение пользовательских конфигураций в целом, по-видимому, находится на github.com/facebook/create-react-app/issues/6303 BTW.





Определенно не рекомендуется изменять файл 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
Спасибо за ответ, я обновил свой вопрос и до сих пор мне удалось подготовить архитектуру плагина и подготовку файлов, но файлы не копируются или не возникают ошибки.
Предположим, вы просто хотите переместить файлы с -/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
У меня есть несколько идей, но это зависит от того, чего вы пытаетесь достичь. Мне нужно немного больше понять ваш поток. Давай попробуем завтра поговорить.
Просто способ, которым npm будет смотреть и всегда копировать в папку изображений, убедившись, что если я переименую, он переименует, если я удалю, он удалит - полная синхронизация часов в реальном времени
Я ищу способы сделать это. Еще один ход мыслей: нельзя ли хранить их только в общей папке? Как вы импортируете эти изображения в свой реагирующий компонент?
Я просто использую <img src='/images/file.jpg'/> до того, как писал их как import, но когда у вас есть огромные слайдеры или большой контент с изображениями, я решил вызвать им напрямую. У меня также есть API-интерфейс axios JSON, который связывает изображения, как внутри этих переменных и объектов.
Я думаю, проблема в том, что вы используете 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.
Спасибо за ответ
Просто вам, возможно, придется сделать что-то вроде продвинутых руководств ant.design/docs/react/use-with-create-react-app