#!/usr/bin/env python3 """Сборщик итогового файла test.js. Берёт файл tpl.js и заменяет в нём строку-заглушку "code;" на объединённое содержимое всех файлов из папки src (в алфавитном порядке). Результат сохраняется в файл test.js. """ import os # Файлы, участвующие в сборке (пути относительно скрипта) TPL_FILE = "tpl.js" SRC_DIR = "src" OUTPUT_FILE = "test.js" # Строка-заглушка, которую заменяем на код из src PLACEHOLDER = "code;" BASE_DIR = os.path.dirname(os.path.abspath(__file__)) def read_file(path): """Читает файл и возвращает его содержимое в виде строки.""" with open(path, "r", encoding="utf-8") as f: return f.read() def write_file(path, content): """Записывает содержимое в файл.""" with open(path, "w", encoding="utf-8") as f: f.write(content) def build(): """Собирает итоговый файл test.js из tpl.js и содержимого src/.""" # Читаем шаблон tpl_path = os.path.join(BASE_DIR, TPL_FILE) if not os.path.isfile(tpl_path): raise FileNotFoundError("Не найден файл шаблона: {}".format(TPL_FILE)) template = read_file(tpl_path) # Читаем файлы из папки src в алфавитном порядке src_path = os.path.join(BASE_DIR, SRC_DIR) parts = [] if os.path.isdir(src_path): src_files = sorted( f for f in os.listdir(src_path) if os.path.isfile(os.path.join(src_path, f)) ) for name in src_files: parts.append(read_file(os.path.join(src_path, name))) else: print("Предупреждение: не найдена папка: {}".format(SRC_DIR + "/")) code_content = "\n".join(parts) # Проверяем наличие заглушки if PLACEHOLDER not in template: raise ValueError( "В шаблоне {} не найдена строка-заглушка '{}'".format( TPL_FILE, PLACEHOLDER ) ) # Заменяем заглушку на объединённый код src result = template.replace(PLACEHOLDER, code_content) # Записываем результат output_path = os.path.join(BASE_DIR, OUTPUT_FILE) write_file(output_path, result) print("Готово: {} -> {} ({} символов)".format( ", ".join([TPL_FILE, SRC_DIR + "/*"]), OUTPUT_FILE, len(result), )) if __name__ == "__main__": build()