У меня есть проект, в котором мне нужно использовать 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',
});
Это возможно?
Я создатель 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 в один файл. Но у каждого проекта есть своя потребность.
Вы упомянули, что плагин может встраивать Javascript и CSS. Может ли он встроить другой HTML? У меня есть похожий вопрос здесь stackoverflow.com/questions/78760797/…
Есть ли у вас ссылка, чтобы узнать больше о плагине Bun HTML?
Всю документацию вы можете посмотреть здесь . Кроме того, есть много разных примеров в виде тестов, как показано здесь . Я бы порекомендовал вам еще раз это проверить. Некоторое время назад был запрос на включение HTML, чтобы сделать возможным встраивание HTML внутри HTML, но возникла нерешенная проблема. Возможно, я реализую это позже в будущем. Посмотрите на эту вилку, и в ней реализована эта функция (обратите внимание, что это не моя вилка).
Вот что я нашел для создания всех Typescript или Typescript в HTML-файлах в каталоге.
bun add -d bun-plugin-html
, если хотите объединить машинописный текст в html-страницыbun install
(или установите npm)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...");
}
Спасибо, Бьорн. Мне очень нравится плагин HTML. В одном проекте я не могу изменить выходной каталог, поэтому добавил следующий обходной путь (указанный здесь как еще один ответ).