Рубрики
Без рубрики

🔥🔥🔥 Представляем Esbuild, компиляция быстро вверх !!!

Текущие руки горячего обновления проекта становится медленнее и медленнее, так что появляется … Tagged with React, WebDev, JavaScript, Vue.

Нынешние руки горячего обновления проекта становятся медленнее и медленнее, поэтому возникает появление этой статьи, это учебная статья, текущий набор появился в среде разработки компании, этот пример является предыдущим экспериментом для тестирования и делай. Этот учебный код и реальное введение кода проекта или определенную разницу, если партнеры также хотят ввести упаковку Esbuild для проекта компании, вы можете оставить комментарий.

Поскольку проект компании является старым, я в основном обратился к опыту работы в среде разработки.

🔥 Создание базового проекта CRA

Давайте начнем с создания основного проекта React.

yarn create react-app my-app

Предварительный просмотр папки

После создания тестового проекта давайте посмотрим, какие проблемы мы должны решить, чтобы представить Esbuild?

  1. Нам нужен локальный сервер , это отобразит упакованные файлы.
  2. Библиотека Для анализа командной строки также необходимы аргументы , чтобы пройти переменные для среды разработки.
  3. Также необходимо удалить последний упакованный файл каждый раз, когда вы запускаете проект.
  4. Существует также необходимость в решении номер порта Анкет
  5. Решите Икона SVG Анкет
  6. Представьте Esbuild для упаковки.

С решением вышеупомянутой проблемы мы можем реализовать эту демонстрацию.

🔥 Скачать пакеты зависимостей

yarn add browser-sync --dev

Основная цель этого пакета – создать сервер, отображать упакованные файлы и прослушивание изменений файлов в указанном файле для esbuild для переупаковки.

yarn add chalk --dev

Основная цель этого пакета – украсить стиль персонажа терминала.

yarn add command-line-args --dev

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

yarn add del --dev

В основном мы используем этот пакет для выполнения операций удаления в упакованных файлах или папках.

yarn add get-port@5.1.1 --dev

Мы используем эту библиотеку в основном, чтобы получить текущий номер порта TCP. Я не установил последнюю версию, потому что в последней версии есть требования к Node.js, моя версия Node – v12.18.3, и ожидаемая версия узла: “^12.20.0 || ^14.13.1 ||.0.0”.

Мы копируем публичную папку и переименуют ее в Public-Dev, Index.html в этой папке является точкой входа нашего приложения.

yarn add --dev esbuild-plugin-svgr

Плагин для Esbuild, который добавляет поддержку импорта *.svg Файлы в качестве компонентов реагирования.

yarn add esbuild --dev

Последнее – установить Esbuild.

🔥 Модификационный пакет.json

    "scripts": {
        ...
+++     "dev": "node devBuild.js --dev"
      },
      ...
+++ "type": "module"

🔥 Создать devbuild.js

После изменения файла package.json, затем создайте Devbuild.js в корневой папке.

import browserSync from "browser-sync";
import chalk from "chalk";
import commandLineArgs from "command-line-args";
import del from "del";
import esbuild from "esbuild";
import getPort from "get-port";
import svgrPlugin from "esbuild-plugin-svgr";
// Create the server.
const bs = browserSync.create();
// Deconstructing environment variables
const { dev } = commandLineArgs({ name: "dev", type: Boolean });
// Delete the package folder from the public-dev folder
del.sync("./public-dev/dist");

// Start esbuild to build the package
(async () => {
  const buildResult = await esbuild
    .build({
      format: "esm", // Sets the output format of the generated JavaScript file.
      target: "es2017", // Compile to convert version
      entryPoints: ["./src/index.jsx"], // Packed Entrance
      outdir: "./public-dev/dist", // Output Directory
      chunkNames: "chunks/[name].[hash]", // Packed out file name
      incremental: dev, // Because we are listening for file changes to repack, and we want the development environment to use esbuild, dev is true.
      loader: {
        // This option changes the way the given input file is interpreted.
        ".svg": "text",
        ".png": "dataurl",
      },
      bundle: true, // Bundling files means inlining any imported dependencies into the file itself.
      splitting: true, // Code splitting is currently only available for esm output format.
      plugins: [svgrPlugin()],
      inject: ["./public-dev/react-shim.js"], // Import React into esbuild as a global variable
    })
    .catch((err) => {
      console.error(chalk.red(err));
      process.exit(1);
    });
  console.log(chalk.green("The build has finished! 📦\n"));
  // Get the port number that can be used
  const port = await getPort({
    port: getPort.makeRange(4000, 4999),
  });

  console.log(
    chalk.cyan(
      `Launching the Shoelace dev server at http://localhost:${port}! 🥾\n`
    )
  );
  // Server initialization
  bs.init({
    startPath: "/", // Initial path
    port, // Port number
    logLevel: "silent", // Log level
    logFileChanges: true, // Log file changes
    notify: true, // Small pop-up notifications in the browser
    single: true, // Provide separate index.html
    server: {
      baseDir: "public-dev", // Base Folder
      index: "index.html", // Set the server's entry file
    },
    files: "src/", // Listening to files under src
  });

  // Listening for changes under the src folder
  bs.watch(["src/"]).on("change", async (filename) => {
    console.log(`Source file changed - ${filename}`);
    // Repackaging
    buildResult.rebuild();
  });
})();

🔥 index.html

Поскольку я не хотел менять вещи непосредственно под публичным файлом, я напрямую скопировал публичную папку и переименовал ее в Public-Dev. Почему я это сделал? Главным образом потому, что я не хотел пересекаться с упакованными файлами WebPack. Поэтому я просто скопировал папку напрямую.

В файле index.html мы должны представить упакованные CSS и JS. Здесь мы должны быть осторожны при представлении JS, мы должны использовать способ ESM, чтобы представить его. В противном случае он сообщит об ошибке !!!






  
  
  
  
  
  
  
++  
  React App



  
  
++

Изменить имя суффикса компонента на .jsx

🔥 React-shim.js

Основная цель создания этого файла – импортировать React в Esbuild в качестве глобальной переменной, чтобы вам не нужно вводить React в каждом компоненте.

import * as React from "react";
export { React };

🔥 Изменить app.jsx

Главное здесь в том, что использование SVG должно быть изменено. Это потому, что использование плагина esbuild-plugin-svgr должен соответствовать.

Это также важно для Измените название суффикса всех компонентов с предыдущим JS на JSX.

++ import Logo from "./logo.svg";
import "./App.css";

function App() {
  return (
    
++

Edit src/App.js and save to reload.

Learn React
); } export default App;

На данный момент введение Esbuild в CRA в порядке! Если вы заинтересованы, иди и попробуйте!

🔥 Предварительный просмотр демо

Оригинал: “https://dev.to/liujinyi/introducing-esbuild-compiling-is-straight-up-fast-59n7”