Недавно мы сделали изменения в одном из проектов для нашего клиента, нам было поручено изменение погрузчика погрузчика приложения REVENTJS из WebPack в Esbuild.
Мы не работали раньше с любым другим погрузчиком, кроме по умолчанию из React WebPack., Так это было для нас проблема. К счастью, у нас была помощь Kevin Burke https://www.linkedin.com/in/ekrub/, чтобы направлять нас и решить эту непростой задачу.
С тобой изменить из WebPack в Esbuild, мы могли бы побриться 24 секунды приложения Build 😆 У нас сейчас быстрее развертывание, и это здорово !!
Esbuild -> Сделано в 481 мс WebPack Build -> сделано в 25.06.
На основании работы Кевина мы можем изменить погрузчик из WebPack в Esbuild с этими простыми шагами.
- Создайте папку «Build» в корне вашего проекта
cd your_project mkdir build
- Создайте файл index.js в качестве держателя для файла восстановления в папке «Создание»
Touch Build/index.html
Dashboard
Добавьте пакет Esbuild ‘для вас Node_Packages
пряжа добавить esbuild
илиNPM установить Esbuild -save
Добавьте «Regenerator-Runtime» в ваше приложение. Это нужно для изготовления вызовов.
пряжа Добавить регенератор-время выполнения
илиNPM Установите Regenerator-Runtime --save
В вашем SRC/index.jsx
Добавьте сверху:
... import "regenerator-runtime/runtime"; ReactDOM.render() ...
- Создайте файл build.js в корне вашего проекта
Touch Build.js.
const { build } = require('esbuild'); const fs = require('fs-extra'); const generateBuild = async () => { await fs.rmdirSync('./build/static', { recursive: true }); await build({ entryPoints: ['./src/index.jsx'], outdir: './build/static/js', minify: true, bundle: true, sourcemap: true, target: ['chrome58', 'firefox57', 'edge16'], loader: { ".svg": "dataurl", ".png": "dataurl" }, define: { 'process.env.NODE_ENV': "'production'", ...your env variables..., } }).catch(() => process.exit(1)); await fs.move('./build/static/js/index.css', './build/static/css/index.css', (err) => { if (err) return console.error(err); console.log("success!"); return null; } ); }; generateBuild();
Добавьте пакет FS-Extra для ваших пакетов
пряжа Добавить FS-Extra
илиNOM Установите FS-Extra -Save
Запустить свою сборку
Узел Build.js.
Сгенерированные файлы должны быть в папке «Build» сейчас.
Вы должны изменить сценарии сборки для использования этой команды сборки.
"scripts": { ... "esbuild": "node ./build.js" ... },
Дополнительные шаги:
Чтобы использовать Esbuild в режиме разработки и следите за изменениями в файлах:
Поскольку мы обслуживаем сборку из другой папки и с различными конфигурациями, нам нужно запустить сервер в этой новой папке и использовать новые конфигурации.
React-Script Запустите приложение по умолчанию в текущей папке и выглядит по умолчанию для файла SRC/index.jsx, к сожалению, мы не можем изменить это поведение по умолчанию без выброса. Таким образом, мы собираемся использовать отдельный сервер (сервер), чтобы начать с нашей новой папки сборки.
В терминале запустить NPX Servor ./build/index.html --reload
Это попросит установить Сервор
Пакет Затем он будет работать с пропущенными параметрами и обслуживаться из папки «Build».
Теперь, когда у нас есть сервер работает, нам нужен способ наблюдать за изменениями файла и обновить страницу. Пакет Chokidar отлично подходит для этого.
Позволяет установить пакет Chokidar
пряжа Добавить Chokidar -D
или NPM установить Chokidar --save
Измените сценарий Build.js, чтобы добавить часовой часовой
const { build } = require('esbuild'); const chokidar = require('chokidar'); const fs = require('fs-extra'); const generateBuild = async () => { await fs.rmdirSync('./build/static', { recursive: true }); await build({ entryPoints: ['./src/index.jsx'], outdir: './build/static/js', minify: true, bundle: true, sourcemap: true, target: ['chrome58', 'firefox57', 'edge16'], loader: { ".svg": "dataurl", ".png": "dataurl" }, define: { 'process.env.NODE_ENV': "'production'", } }).catch(() => process.exit(1)); await fs.move('./build/static/js/index.css', './build/static/css/index.css', (err) => { if (err) return console.error(err); console.log("success!"); return null; } ); }; chokidar.watch('.', {ignored:/build|node_modules|.git/}).on('all', (event, path) => { console.log(event, path); generateBuild(); });
Не забывайте
В одном терминале у вас должен быть запущен сервер NPX Servor ./build/index.html --reload
И в другом терминале вы должны иметь сценарий сборки Узел Build.js.
И это все. Наслаждайтесь дополнительным временем!
Большое благодаря Кевину, чтобы помочь нам расшифровать это.
Вы можете найти код для этого руководства в вашем аккаунте GitHUB HTTPS://gitlab.com/alamedAdev/react-js-build-uss-esbuild