Как создать расширяемый сайт с помощью JS-фреймворка (SvelteKit, Next, Angular и т.д.)

#javascript #npm #node-modules #svelte #sveltekit

Вопрос:

В настоящее время я создаю сайт (в SvelteKit, но это относится к любому фреймворку), который будет расширен на несколько разных сайтов. Функциональность одинакова на всех сайтах, но у них будут различные CSS-файлы и, возможно, дополнительные компоненты. Этот шаблон будет использоваться разработчиками, поэтому я хочу сохранить все маршруты/данные/и т.д., Содержащиеся в моем коде, и просто позволить потребителю расширить определенные части.

Главная проблема в том, что сайт, конечно, не просто модуль, который я могу импортировать. Вокруг него есть различные инструменты для разработки/комплектации/сборки, которые я хотел бы сохранить, но они напрямую просматривают файловую систему, поэтому она должна каким-то образом выглядеть так, как будто проект находится в главном каталоге.

Я изучил следующие варианты, но они не идеальны:

  • Простое разветвление репо, очевидно, работает, но это затрудняет обновление; Я хочу изолировать то, что пользователь может изменить, и упростить обновление до новых версий.
  • Другие проекты, которые делают это (Здравомыслие, большинство платформ), реализуют свой собственный инструмент CLI и/или разрешение пользовательских модулей, чего я бы очень не хотел делать.

Мое идеальное решение выглядит так:

 # What the package consumer sees:
- node_modules
- package.json (with scripts to run, build, etc.)
- src/
  - global.css
  - some-code.js

# What my code sees:
- node_modules
- package.json
- src/
  - my-code
- user-src/
  - user-code
 

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

Комментарии:

1. Почему бы вам не написать и не опубликовать пакет npm? Затем вы можете установить его на стороне потребителя, и у вас есть такие вещи, как управление версиями

2. @JulianKleine Это то, что я пытаюсь сделать; проблема в том, что эти фреймворки предназначены для запуска в качестве отдельного приложения узла или на какой-либо другой платформе, а не в виде пакета.

3. Когда что-нибудь когда-либо запускалось как пакет? Но если вы опубликуете пакет npm, а затем установите его в приложение узла, приложение узла может работать как отдельное приложение