Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Включить schematics в бандл #491

Open
kirill-ivanovvv opened this issue Feb 12, 2025 · 16 comments
Open

Включить schematics в бандл #491

kirill-ivanovvv opened this issue Feb 12, 2025 · 16 comments
Assignees
Labels
feature New feature or request

Comments

@kirill-ivanovvv
Copy link
Member

С чем связан запрос на фичу?

Нужно включить в бандл весь код schematics

Расскажите как вы это себе видите

  • для того, чтобы запустить yarn generate project, angular/schematics требует определенную систему папок и файлов. называется schematics
  • она должна быть в формате cjs - по-другому не работает
  • эта система должна быть включена в бандл
  • в бандл включить файлы нельзя, можно строки. поэтому нужно их сначала "прочитать"
  • для того, чтобы отработал скрипт, ему нужны файлы. т.к. в бандле у нас будут строки, нам нужно будет их записать на диск. сохраняя всю структуру директроии и нейминги. нужно это учесть при записи
  • записывать файлы буду во временную директори в корне проета. соответственно после того, как скрипт отработает - удалять файлы.

Критерии готовности выполнения задачи

yarn generate project отрабалывает без @atls/schematics в корне. тоесть без зивисимости от schematics вообще

Материалы

#488 (comment)

@kirill-ivanovvv kirill-ivanovvv added the feature New feature or request label Feb 12, 2025
@kirill-ivanovvv kirill-ivanovvv self-assigned this Feb 12, 2025
@kirill-ivanovvv
Copy link
Member Author

@Nelfimov правильно же понял? #488 (comment)

@Nelfimov
Copy link
Member

Правильно.

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

Почему просто не импортировать эти файлы (не readFile) и работать с ними?

@kirill-ivanovvv
Copy link
Member Author

Правильно.

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

Почему просто не импортировать эти файлы (не readFile) и работать с ними?

@Nelfimov
Copy link
Member

Это обязательный атрибут? Если да - то можно такой фокус:

  • импортируем файлы в бандл
  • при выполнении команды записываем из tmp директорию
  • в collection указываем путь до tmp директории

В бандле где-то было использование tmp

@kirill-ivanovvv
Copy link
Member Author

@Nelfimov
в билд скрипт yarn/cli добавить yarn workspace @atls/schematics prepack - норм?
нужно же собранный схематик добавлять в бандл

@Nelfimov
Copy link
Member

@kirill-ivanovvv Нет

@kirill-ivanovvv
Copy link
Member Author

@kirill-ivanovvv Нет

  • бандлер не реагирует на хуки, прописанные на уровне плагина. пробовал разные методы, чтото типа:
export const schematicsPlugin: Plugin = {
	hooks: {
		beforeWorkspacePacking: async (workspace, configuration) => {
			console.log('before workspace packing')
    	exec("yarn workspace @atls/schematics prepack");
		}
	},
  commands: [GenerateProjectCommand],
}
  • гпт предлагает вынести срипт сборки в js-файл и вызывать его оттуда. в нашем случае в начало скрипта нужно поместить сборку схематика, затем вызывать сборку бандла. выглядит сомнительно

Image

  • можно еще сохранять исходники в ts, затем при запуске yarn generate записывать их в файлы, затем запускать сборку, затем запускать миграции, затем чистить tmp. тогда кадый запуск yarn generate будет очень долгим, у меня сборка занимает достаточно времени

@kirill-ivanovvv
Copy link
Member Author

  • можно еще сохранять исходники в ts, затем при запуске yarn generate записывать их в файлы, затем запускать сборку, затем запускать миграции, затем чистить tmp. тогда кадый запуск yarn generate будет очень долгим, у меня сборка занимает достаточно времени

@Nelfimov разрабатываю этот вариант

@kirill-ivanovvv
Copy link
Member Author

Что сделано:

  • разбирался как включить файлы в бандл

Что дальше:

  • с json вроде понятно как сделать
  • разбирался с тем, что делать с файлами без расширений, шаблонами.
  • если в бандл попадает только то, что добавляется через import, то эти файлы добавить нельзя, т.к. unknown extention
  • если делать через readFile, тоже не подойдет. path-to-file в бандле будет другой. и на момент запуска команды никаких файлов не будет
  • с js тоже не понимаю что делать. допустим я импортирую какуюто функцию, она соберется и попадет в бандл (эта функция). но вевь это не весь файл с директивами экспорта, других импортов и тд.

Актуальная ветка:

@Nelfimov
Copy link
Member

  • разбирался с тем, что делать с файлами без расширений, шаблонами.
  • если в бандл попадает только то, что добавляется через import, то эти файлы добавить нельзя, т.к. unknown extention
  • если делать через readFile, тоже не подойдет. path-to-file в бандле будет другой. и на момент запуска команды никаких файлов не будет
  • с js тоже не понимаю что делать. допустим я импортирую какуюто функцию, она соберется и попадет в бандл (эта функция). но вевь это не весь файл с директивами экспорта, других импортов и тд.
  1. Контент файла без расширения засовываешь в .ts файл в виде константы со строкой
  2. Бандлишь
  3. При выполнении команды generate в tmp создаешь файлы из строк этих констант
  4. схематик направляешь в tmp

@kirill-ivanovvv
Copy link
Member Author

  • Контент файла без расширения засовываешь в .ts файл в виде константы со строкой

содержимое ts файлов тоже получается в константу поместить?

@Nelfimov
Copy link
Member

@kirill-ivanovvv зачем? Проблема же только в файлах которые ты не можешь приложить в бандл

@kirill-ivanovvv
Copy link
Member Author

kirill-ivanovvv commented Feb 14, 2025

@kirill-ivanovvv зачем? Проблема же только в файлах которые ты не можешь приложить в бандл

  • нам нужно тс-файлы записать в tmp

  • сбилдить в cjs

  • прогнать миграцию

  • при запуске команды мы передаем путь до коллекции

  • коллекции нужен путь до factory на диске, в формате cjs "factory": "./project/project.factory.cjs#main"

@kirill-ivanovvv
Copy link
Member Author

@Nelfimov

  • можно сделать еще один esbuild скрипт, или расширить текущий. который все файлы расфасует по константам. можно туда сразу cjs помещать
  • не нашел возможности связать билд бандла и билд этого пакета
  • будет ли нормально триггерить его "руками", перед билдом бандла?

@kirill-ivanovvv
Copy link
Member Author

Что сделано:

  • разнес схематик по runtime & code-schematic
  • настроил сборку в строки каждой части
  • настроил запись в tmp при вызове

Что дальше:

  • миграция запускается только со второго раза. при первом запись в tmp при втором сама миграция, без перезаписи. по-другому не работает. чтото с асинхронностью.
  • при запуске миграции - ошибка. отваливаются пакеты при бандлинге. буду включать все. это пойдет в yarn-bundle

Актуальная ветка:

@kirill-ivanovvv
Copy link
Member Author

Что сделано:

  • разобрался с асинхронностью

Что дальше:

  • не получается вложить все пакеты в бандл
  • часть в процессе сборки отваливается
  • при добавлении их в dev-deps, все те же ошибки
  • jiti uglify-js @swc/core @babel/preset-typescript

Актуальная ветка:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants