На прошлой неделе я провел много времени глубоко в документации посылки, свернущей и эсбулда. Я был в квесте. Главным образом тот, который начинается с места наложить на корточках с помощью WebPack, который является медленным и громоздким для настройки и управления. И я слышал, и даже немного играл с этими другими булочками, достаточно хорошо, чтобы знать, что счастливее должен существовать.
Мои объединения потребностей
Позвольте мне выложить мою специфическую потребность, потому что это достаточно специфично, чтобы ни один Бандлер не давал мне все, что мне нужно было из коробки. И это хорошее время для предисловии моего предстоящего обратной связи с понятием, которое в игре с посылкой, свернутом и эсбулдом, все они замечательны, просты в быстром запуске Bundlers, если ваш использование соответствует их модели по умолчанию или даже горсть команды Фортуальные параметры аргумента они предоставляют.
- Я строят и объединяю
.js
и.scsss
Файлы для разработки темы WordPress. - Мне нужно, чтобы он обрабатывал несколько основных точек входа (четыре, в конечном итоге превратились в два):
JS/Main.js
— — это точка входа в интернет-сайт для JavaScriptCSS/style.scsss
— это точка входа в интернет-сайт для стилей CSSjs/editor.js
— Является ли Gutenberg JavaScript (не часто используется, но удобно, когда вам это нужно!)CSS/редактор .scsss
— Вы уже догадались, еще один набор CSS, специфичный Gutenberg для случайных визуальных блоков и редактора блоков.
- Эти четыре входных файла должны связываться в четыре файла сборки:
build/main.min.js
,строить/main.min.css
,build/editor.min.js.
истроить/editor.min.css
Отказ - Во время разработки я хочу любую импортируемую зависимость
.js
и.scsss
Изменения файлов, чтобы вызвать восстановление, и я хочу, чтобы все эти файлы плюс.php
Изменение файлов для запуска Livereload в браузере. - Мне нужно быть в состоянии установить, импортировать и объединить 3-я вечеринки через
NPM
- Мне нужно, чтобы это было быстрее, чем WebPack (около 5-10 второго развития разрабатываний)
- Наконец, мне нужны все обычные хорошие вещи: заминирование, приема, транспиляция и т. Д.
Хорошо, так что это выложил то, что я искал, и надеюсь, это заправка GoogleBot для отправки вам здесь в первую очередь. Отсюда, я собираюсь получить много Терсера, и прыгаю прямо в свои плюсы, минусы и учить моменты с каждым из бабляров, которые я проверил.
Parcel 1.x (и немного 2x)
Плюсы:
- Я начал с посылки, я использовал его в других (более современных стеках) проектах, и это действительно часто работает, с минимальным значением, с минимальным значением.
- Это довольно быстро и имеет очень приятный набор параметров конфигурации API командной строки и узла, которые хорошо документированы.
- Сначала он чувствовал себя немного неловко, но я закончил быть в порядке с то
Минусы:
- 1.x больше не будет активно развиваться, в пользу 2.x (в бета-версии по состоянию на это написание), и пока здесь есть хорошая экосистема, горстка пути окончания в поисках старой проблеме GitHub с чем-то вроде: В настоящее время не возможно в Parcel 1.x, но будет доступен в Parcel 2.0 «
- Активы, такие как шрифты и изображения, упомянутые в ваших CSS, автоматически соединяются в каталог вашего сборки. Я не нашел решения, чтобы остановить это от происхождения.
- Я закончил свое путешествие с 1.x Когда я обнаружил, что меняющиеся файлы CSS вызывали файлы JS, чтобы перестать работать, пока я не возобновизию их, все еще большую загадку как к тому, что происходит.
- Кроме того, в использовании нескольких точек входа файлы сборки редактора всегда получают хэш в файле имени даже при попытке выключить его, в то время как файлы интерфейса работали отлично.
- Я попробовал 2.x немного в надежде найти решения, но, обещая быть более способным и расширяемым, я обнаружил, что многие из новых функций будут жесткими для использования, и документация будет трудно следовать.
- Мой 2x путешествие закончилось, когда Я взял в Tweeting У Создателя для некоторых руководств, только найти то, что я пытался сделать, это невозможно. (Я пытался создать плагин, чтобы удалить проблему HASHING из редактора имена файлов, но оказывается, вы не можете использовать плагин, не публикуя его на что-то вроде NPM, который мне не интересовался поступить.)
Изучение:
- Я уверен, что я доберусь до посылки для других проектов, особенно с
Посылка Bundler
Узел API знания, которые я получил, я думаю, что это отличная API, чтобы нажать. - Сначала он чувствовал себя немного неловко, но в конечном итоге я в конечном итоге приходил импортировать свои SCS в моих соответствующих файлах JS, так как эта функция, кажется, распространена между Bundlers. Это разрезает мои точки входа от четырех до двух, и теперь я имел дело только с точками входа JavaScript.
- Вот мой сценарий сборки посылки, прежде чем я переехал:
const Bundler = require("parcel-bundler"); //entry files const entries = ["./js/main.js", "./js/editor.js"]; const baseOptions = { outDir: "./build", minify: true, sourceMaps: true, watch: process.argv.includes("--watch"), publicUrl: "./", logLevel: 4, contentHash: false, }; (async () => { const bundler = new Bundler(entries, { ...baseOptions }); return await bundler.bundle(); })();
Rollup.js.
Я чувствовал себя немного побежденным, но оставался позитивным, что я могу найти ответы в свернуске!
Плюс
- Аналогично в Parcel Rollup имеет хороший интерфейс командной строки и узла API, который я смог встать и работать с быстро.
- Основные функции немного ограничены, но это составляет для него много доступных плагинов, которые легко устанавливают и использовать.
- Я смог сделать скат, чтобы сделать все, что я хотел, но время сборки начала составлять.
Господин
- Мой самый большой собеседник, как долго он взял меня, чтобы добраться до того, где у меня было все, что я хотел работать. Я просеивался через проблемы GitHub, и Google ищете слишком долго.
- В конце концов, я решил перейти от свертывания, потому что я не видел огромный прирост в составе в комплектации через WebPack, и это было несколько секунд медленнее, чем у меня состоится с посылкой.
Учащиеся
- Я позволю моим
Rollup.config.js.
Делать говорить:
// rollup.config.js import resolve from "rollup-plugin-node-resolve"; import commonJS from "rollup-plugin-commonjs"; import scss from "rollup-plugin-scss"; import { babel } from "@rollup/plugin-babel"; import { terser } from "rollup-plugin-terser"; import livereload from "rollup-plugin-livereload"; import fg from "fast-glob"; //custom watching plugin to get rollup to rebuild when other files get changed const watcher = { name: "watch-external", async buildStart() { const files = await fg(["assets/js/**/*.js", "assets/css/**/*.scss", "**/*.php"]); for (let file of await files) { this.addWatchFile(file); } }, }; //setup the plugins for both builds const plugins = [ watcher, //my custom file watcher resolve(), //related to resolving node_module references, I think. commonJS({ //this allowed things like: import jquery from 'jquery' to work include: "node_modules/**", }), babel({ babelHelpers: "bundled" }), //transpile! scss({ outputStyle: "compressed" }), //minified scss terser(), //for minifcation livereload(), //for livereload ]; //notice, two entry points here, handled like a champ! export default [ { input: "js/main.js", //the style.scss is imported in this file output: { file: "build/main.min.js", format: "iife", //immediately invoked function expression - browser solution inlineDynamicImports: true, }, plugins: plugins, }, { input: "js/editor.js", //the editor scss is imported in this file, also output: { file: "build/editor.min.js", format: "iife", inlineDynamicImports: true, }, plugins: plugins, }, ];
esbuild.
В то время как роллеп работал нормально, я слышал о новом ребенке на блоке, эсбулде, и его нелепые время сборки, поэтому пришло время погрузиться.
Плюс
- Еще раз, хорошая документация, хорошая командная строка и узел здесь.
- Святые кошки, эта вещь кричит! 150 мс! С 8-10 секунд до 150 мс! Я, честно говоря, думал, что это сломано, но там они были, мои файлы сборки были нетронутыми.
Господин
- С несколькими точками входа я должен был уступить возможности называть файлы сборки специально. Я нашел обходные пути в ролажку для этого, но я, кажется, не повезет с эсбулдом. Так вместо
Build/main.min.js.
Я остался только сbuild/main.js
Отказ Я могу справиться. - Esbuild молодой, и пока он работает хорошо, экосистема вокруг нее немного ощущается. У меня есть догадка, что я не только сделал предыдущую битву с посылкой и свернутом , Я, возможно, был напуган Эсбулдом на первый взгляд.
Учащиеся
- esbuild. просто (как 12 дней назад) получил
часы
Флаг, и это работает, но, похоже, не позволяет вам смотреть файлы за пределами точек входа - Я смог собраться вместе
Chokidar
иBrowsersync
Для создания просмотра и решения Livereload я хотел. - Вот мой последний скрипт сборки Esbuild:
//esbuilder.js const esbuild = require("esbuild"); const sassPlugin = require("esbuild-plugin-sass"); const chokidar = require("chokidar"); const browserSync = require("browser-sync").create(); const build = async () => { console.log("Building..."); const service = await esbuild.startService(); try { const timerStart = Date.now(); // Build code await service.build({ entryPoints: ["js/main.js", "js/editor.js"], format: "iife", bundle: true, minify: true, outdir: "build/", plugins: [sassPlugin()], sourcemap: true, //this stops esbuild from trying to resolve these things in css, may need to add more types external: ["*.svg", "*.woff", "*.css", "*.jpg", "*.png"], }); const timerEnd = Date.now(); console.log(`Done! Built in ${timerEnd - timerStart}ms.`); } catch (error) { console.log(error); } finally { service.stop(); } }; //watch it? if (process.argv.includes("--watch")) { //chokidar will watch theme files for changes to trigger rebuild const watcher = chokidar.watch(["js/**/*.js", "css/**/*.scss", "**/*.php"]); console.log("Watching files... \n"); //first build build(); //build on changes watcher.on("change", () => { build(); }); //browserSync will trigger livereload when build files are updated browserSync.init({ //TODO: make these values passed in by `npm run dev` port: 3334, proxy: "localhost:3333", files: ["assets/build/*"], }); } else { //no watch flag, just build it and be done build(); }
Бонус! эстрелла
Эстролла несколько оболочкой вокруг Эсбулда. И пока я нашел Esbuild довольно легко работать с, Estrella кривотирует простоту-фактор до 11. Мне понравилась работа с Estrella, и я думаю, что если вы заинтересованы в Esbuild, но нахожу его немного запугивающим, это может быть отправная точка, которую вам нужна!
Заключение
Заключение состоит в том, что я наслаждался изучением всех этих боковов, они хорошо работают, а в гораздо менее конкретных обстоятельствах все бы довольно хорошо, как выбор Bundler. В конце концов, скорость эсбулия достаточно значительна, что действительно меняет опыт развития таким образом, чтобы, возможно, мы не жалуемся раньше, но теперь могут начать в будущем, когда мы знаем, что возможно.
Оригинал: «https://dev.to/walpolea/through-the-pipeline-an-exploration-of-front-end-bundlers-ea1»