Как настроить Bun для компиляции и объединения файлов TypeScript в каталог

У меня есть проект, в котором мне нужно использовать Bun для объединения TypeScript веб-страницы. Я не знаю, следует ли мне объединить HTML-страницы или файлы TypeScript.

Вот мои bun.js настройки:

import html from 'bun-plugin-html';

await Bun.build({
  entrypoints: ['./public/page1.html', './public/page2.html', './public/page3.html'],
  sourcemap: "inline",
  outdir: './public',
  plugins: [
    html()
  ],
});

Проблема с вышеизложенным заключается в том, что HTML-страницы перезаписываются. На каждой странице находится скрипт:

<script type = "module" src = "index.ts">

Когда я запускаю bun run start, эта веб-страница меняет эту строку, чтобы указать на файл JavaScript:

<script type = "module" src = "index.js">

Я хотел бы сохранить все в одном каталоге. Я мог бы переименовать общедоступный каталог в исходный, а затем экспортировать в public, но тогда я пытаюсь объединить сами файлы TypeScript и оставить HTML-страницы в покое, если это имеет смысл.

Могу ли я указать файлы TypeScript на этих HTML-страницах, а затем создать связанные файлы JavaScript? Имеет ли это смысл?

Вот мои bun.js настройки:

// point to typescript files and leave the html pages out of it

await Bun.build({
  entrypoints: ['./public/page1.ts', './public/page2.ts', './public/page3.ts'],
  sourcemap: "inline",
  outdir: './public',
});

Это возможно?

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
1
0
119
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я создатель bun-plugin-html. Если вы хотите скомпилировать только файлы TypeScript, имея один каталог, я бы рекомендовал не использовать bun-plugin-html и делать то, что вы показали.

В конечном итоге это все равно приведет к созданию файлов JavaScript, таких как ./public/page1.js, что потребует изменения HTML, чтобы он указывал на ./public/page1.js вместо ./public/page1.ts. Так что особого смысла в этом нет.

Честно говоря, я бы просто создал каталог с именем src и сделал бы это рекомендуемым bun-plugin-html способом, выведя данные в каталог public. Это позволяет использовать некоторые удобные функции, такие как встраивание всего JavaScript и CSS в один файл. Но у каждого проекта есть своя потребность.

Спасибо, Бьорн. Мне очень нравится плагин HTML. В одном проекте я не могу изменить выходной каталог, поэтому добавил следующий обходной путь (указанный здесь как еще один ответ).

1.21 gigawatts 20.07.2024 17:26

Вы упомянули, что плагин может встраивать Javascript и CSS. Может ли он встроить другой HTML? У меня есть похожий вопрос здесь stackoverflow.com/questions/78760797/…

1.21 gigawatts 20.07.2024 17:27

Есть ли у вас ссылка, чтобы узнать больше о плагине Bun HTML?

1.21 gigawatts 20.07.2024 17:28
Ответ принят как подходящий

Вот что я нашел для создания всех Typescript или Typescript в HTML-файлах в каталоге.

  • Установите плюшку (https://bun.sh/docs/installation)
  • открыть папку или проект в vscode
  • откройте терминал в вашем проекте
  • позвоните bun add -d bun-plugin-html, если хотите объединить машинописный текст в html-страницы
  • при необходимости импортируйте другие существующие модули с помощью bun install (или установите npm)
  • создайте Bun.build.js с содержимым ниже
  • позвоните bun bun.build.js, чтобы собрать и связать машинописный текст (см. содержимое файла Bun.build.js)

Ваши классы машинописного текста будут скомпилированы в файл javascript, который объединяет все ваши машинописные тексты. (См. https://bun.sh/)

булочка.build.js:


// note: you could also pass in one or all of the HTML files
// but if you do that the HTML file might be over written
// to fix that, set an output directory in the options 

import html from 'bun-plugin-html';
import { Glob } from "bun";

// read in all the typescript files in the /public directory
// (or the directory where your typescript files are located)
// and compile them into builded javascript files in the same directory
// using the same name as the typescript file but with a js extension
// your HTML pages should reference the javascript file 
// unless you are compiling the HTML files

const sourceDirectory = "./public/";
const glob = new Glob('*.ts');
var entrypoints = [...glob.scanSync(sourceDirectory)];
entrypoints = entrypoints.map((x) => sourceDirectory + x);
console.info("Compiling " + entrypoints.length + " typescript files...");

const results = await Bun.build({
  entrypoints: entrypoints,
  publicPath: "",
  sourcemap: "inline",
  outdir: './',
  plugins: [
    html()
  ],
});

if (results.success==false) {
  console.error("Build failed");
  for (const message of results.logs) {
    console.error(message);
  }
}
else {
  console.info("Compiled " + results.outputs.length + " javascript files...");
}

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