create-marp-presentation 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -37
- package/cli/commands/add-themes-cli.js +85 -0
- package/cli/commands/create-project.js +199 -0
- package/cli/utils/file-utils.js +106 -0
- package/cli/utils/prompt-utils.js +89 -0
- package/docs/plans/2025-02-19-marp-template-design.md +207 -0
- package/docs/plans/2025-02-19-marp-template-implementation.md +848 -0
- package/docs/plans/2026-02-20-example-slides-design.md +179 -0
- package/docs/plans/2026-02-20-example-slides-implementation.md +811 -0
- package/docs/plans/2026-02-23-theme-management-design.md +836 -0
- package/docs/plans/2026-02-23-theme-management-implementation.md +3585 -0
- package/docs/plans/2026-02-26-theme-addition-refactoring-design.md +172 -0
- package/docs/plans/2026-02-26-theme-addition-refactoring.md +456 -0
- package/docs/plans/2026-02-27-theme-add-fix-design.md +136 -0
- package/docs/plans/2026-02-27-theme-add-fix.md +353 -0
- package/docs/plans/TODO.md +5 -0
- package/docs/reqs/themes-requirements.md +49 -0
- package/docs/theme-management.md +261 -0
- package/index.js +111 -164
- package/lib/add-themes-command.js +381 -0
- package/lib/errors.js +62 -0
- package/lib/frontmatter.js +71 -0
- package/lib/prompts.js +222 -0
- package/lib/theme-manager.js +238 -0
- package/lib/theme-resolver.js +227 -0
- package/lib/vscode-integration.js +198 -0
- package/package.json +15 -5
- package/template/README.md +28 -17
- package/template/package.json +13 -1
- package/template/scripts/theme-cli.js +248 -0
- package/themes/beam/beam.css +141 -0
- package/themes/default-clean/default-clean.css +57 -0
- package/themes/gaia-dark/gaia-dark.css +27 -0
- package/themes/marpx/marpx.css +1735 -0
- package/themes/marpx/socrates.css +105 -0
- package/themes/uncover-minimal/uncover-minimal.css +22 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# Marp Presentation Template - Design Document
|
|
2
|
+
|
|
3
|
+
**Дата:** 2025-02-19
|
|
4
|
+
**Статус:** Draft
|
|
5
|
+
|
|
6
|
+
## Обзор
|
|
7
|
+
|
|
8
|
+
npm-пакет `create-marp-presentation` для создания готовых шаблонов Marp-презентаций. Установка через npx одной командой, поддержка статических файлов, генерация в HTML/PDF/PPTX.
|
|
9
|
+
|
|
10
|
+
## Архитектура и структура
|
|
11
|
+
|
|
12
|
+
### Структура инициализируемого проекта
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
my-presentation/
|
|
16
|
+
├── presentation.md # Главный файл презентации
|
|
17
|
+
├── marp.config.js # Конфигурация (статические папки, output директория)
|
|
18
|
+
├── package.json # Зависимости и npm-скрипты
|
|
19
|
+
├── .gitignore # Исключает output/ и node_modules/
|
|
20
|
+
├── README.md # Инструкции по использованию
|
|
21
|
+
├── output/ # Сгенерированные файлы (создаётся при сборке)
|
|
22
|
+
├── static/ # Статические файлы по умолчанию
|
|
23
|
+
└── scripts/
|
|
24
|
+
└── copy-static.js # Скрипт копирования статики
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Структура npm-пакета
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
create-marp-presentation/
|
|
31
|
+
├── package.json # Meta-package с bin полем
|
|
32
|
+
├── index.js # Точка входа для CLI
|
|
33
|
+
├── template/ # Шаблон проекта
|
|
34
|
+
│ ├── package.json # Шаблон package.json
|
|
35
|
+
│ ├── marp.config.js # Шаблон конфига
|
|
36
|
+
│ ├── presentation.md # Пример презентации
|
|
37
|
+
│ ├── .gitignore # Шаблон gitignore
|
|
38
|
+
│ ├── README.md # Шаблон README
|
|
39
|
+
│ ├── static/ # Пустая папка с .gitkeep
|
|
40
|
+
│ └── scripts/
|
|
41
|
+
│ └── copy-static.js # Скрипт копирования статики
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Конфигурация
|
|
45
|
+
|
|
46
|
+
### marp.config.js
|
|
47
|
+
|
|
48
|
+
```javascript
|
|
49
|
+
module.exports = {
|
|
50
|
+
staticFolders: ['static/**', 'assets/**'], // glob-паттерны для копирования
|
|
51
|
+
outputDir: 'output', // папка для генерации
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
- `staticFolders` - массив glob-паттернов для поиска статических файлов
|
|
56
|
+
- `outputDir` - папка для генерации (по умолчанию `output`)
|
|
57
|
+
|
|
58
|
+
## Команды и скрипты
|
|
59
|
+
|
|
60
|
+
### package.json скрипты
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"scripts": {
|
|
65
|
+
"dev": "marp -s . --html",
|
|
66
|
+
"build:html": "marp presentation.md -o output/index.html --html && npm run copy:static",
|
|
67
|
+
"build:pdf": "marp presentation.md -o output/presentation.pdf --allow-local-files && npm run copy:static",
|
|
68
|
+
"build:pptx": "marp presentation.md -o output/presentation.pptx --allow-local-files && npm run copy:static",
|
|
69
|
+
"build:all": "npm run build:html && npm run build:pdf && npm run build:pptx",
|
|
70
|
+
"copy:static": "node scripts/copy-static.js",
|
|
71
|
+
"clean": "rimraf output"
|
|
72
|
+
},
|
|
73
|
+
"devDependencies": {
|
|
74
|
+
"@marp-team/marp-cli": "^4.1.2",
|
|
75
|
+
"fast-glob": "^3.3.3",
|
|
76
|
+
"rimraf": "^6.0.0"
|
|
77
|
+
},
|
|
78
|
+
"engines": {
|
|
79
|
+
"node": ">=20.0.0"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
| Команда | Описание |
|
|
85
|
+
|---------|----------|
|
|
86
|
+
| `npm run dev` | Live-предпросмотр с hot-reload |
|
|
87
|
+
| `npm run build:html` | Генерация HTML с встроенным viewer |
|
|
88
|
+
| `npm run build:pdf` | Генерация PDF |
|
|
89
|
+
| `npm run build:pptx` | Генерация PowerPoint |
|
|
90
|
+
| `npm run build:all` | Все форматы подряд |
|
|
91
|
+
| `npm run clean` | Очистка output/ |
|
|
92
|
+
|
|
93
|
+
## Скрипт копирования статики
|
|
94
|
+
|
|
95
|
+
### scripts/copy-static.js
|
|
96
|
+
|
|
97
|
+
```javascript
|
|
98
|
+
const fs = require('fs');
|
|
99
|
+
const path = require('path');
|
|
100
|
+
const { globSync } = require('fast-glob');
|
|
101
|
+
|
|
102
|
+
// Читаем конфиг с дефолтными значениями
|
|
103
|
+
let config;
|
|
104
|
+
try {
|
|
105
|
+
config = require('../marp.config.js');
|
|
106
|
+
} catch {
|
|
107
|
+
config = {};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const outputDir = config.outputDir || 'output';
|
|
111
|
+
const staticFolders = config.staticFolders || ['static/**'];
|
|
112
|
+
|
|
113
|
+
// Создаём output если нет
|
|
114
|
+
if (!fs.existsSync(outputDir)) {
|
|
115
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Находим файлы по паттернам
|
|
119
|
+
const files = globSync(staticFolders);
|
|
120
|
+
|
|
121
|
+
// Копируем с сохранением структуры
|
|
122
|
+
for (const file of files) {
|
|
123
|
+
const relativePath = path.relative(process.cwd(), file);
|
|
124
|
+
const destPath = path.join(outputDir, relativePath);
|
|
125
|
+
|
|
126
|
+
const destDir = path.dirname(destPath);
|
|
127
|
+
if (!fs.existsSync(destDir)) {
|
|
128
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
fs.copyFileSync(file, destPath);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
console.log(`✓ Copied ${files.length} files to ${outputDir}/`);
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Обработка ошибок
|
|
138
|
+
|
|
139
|
+
### Что обрабатываем
|
|
140
|
+
|
|
141
|
+
1. **Отсутствие `marp.config.js`** - использовать дефолтные значения
|
|
142
|
+
2. **Несуществующие папки в staticFolders** - пропускать молча
|
|
143
|
+
3. **Пустая staticFolders** - не копировать ничего, не падать
|
|
144
|
+
4. **Конфликт имён файлов** - перезаписывать с предупреждением
|
|
145
|
+
5. **Ошибки копирования** - логировать и продолжать
|
|
146
|
+
|
|
147
|
+
### Валидация в CLI
|
|
148
|
+
|
|
149
|
+
- Проверять, что папка для проекта не существует
|
|
150
|
+
- Валидировать имя проекта (нет спецсимволов)
|
|
151
|
+
- Проверять успешность `npm install`
|
|
152
|
+
|
|
153
|
+
## Использование
|
|
154
|
+
|
|
155
|
+
### Инициализация
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
npx create-marp-presentation my-presentation
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Редактирование
|
|
162
|
+
|
|
163
|
+
Откройте `presentation.md` и пишите слайды в Markdown.
|
|
164
|
+
|
|
165
|
+
### Live-предпросмотр
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
npm run dev
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Сборка
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
npm run build:html # HTML
|
|
175
|
+
npm run build:pdf # PDF
|
|
176
|
+
npm run build:pptx # PowerPoint
|
|
177
|
+
npm run build:all # Все форматы
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Очистка
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
npm run clean
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Зависимости
|
|
187
|
+
|
|
188
|
+
| Пакет | Версия | Описание |
|
|
189
|
+
|-------|--------|----------|
|
|
190
|
+
| `@marp-team/marp-cli` | ^4.1.2 | CLI для Marp (требует Node.js 18+) |
|
|
191
|
+
| `fast-glob` | ^3.3.3 | Быстрый glob для поиска файлов |
|
|
192
|
+
| `rimraf` | ^6.0.0 | Кроссплатформенное удаление папок (требует Node.js 20+) |
|
|
193
|
+
|
|
194
|
+
### Требования к Node.js
|
|
195
|
+
|
|
196
|
+
**Node.js >= 20.0.0** - обусловлено версией rimraf v6
|
|
197
|
+
|
|
198
|
+
### Источники
|
|
199
|
+
|
|
200
|
+
- [@marp-team/marp-cli на npm](https://www.npmjs.com/package/@marp-team/marp-cli)
|
|
201
|
+
- [fast-glob на npm](https://www.npmjs.com/package/fast-glob)
|
|
202
|
+
|
|
203
|
+
## Тестирование
|
|
204
|
+
|
|
205
|
+
- Юнит-тесты для copy-static.js
|
|
206
|
+
- Интеграционные тесты для CLI инициализатора
|
|
207
|
+
- Тесты обработки ошибок
|