@ywal123456/jskim 0.5.1 → 0.5.2
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 +22 -11
- package/docs/JSKim_User_Guide_v0.5.2.pdf +0 -0
- package/docs/create-jskim.md +27 -12
- package/docs/user-guide/01-introduction.md +98 -0
- package/docs/user-guide/02-getting-started.md +162 -0
- package/docs/user-guide/03-project-structure.md +216 -0
- package/docs/user-guide/04-basic-workflow.md +186 -0
- package/docs/user-guide/05-cli-reference.md +218 -0
- package/docs/user-guide/06-configuration.md +357 -0
- package/docs/user-guide/07-files-pipeline.md +278 -0
- package/docs/user-guide/08-nunjucks.md +300 -0
- package/docs/user-guide/09-development-features.md +228 -0
- package/docs/user-guide/10-errors-and-troubleshooting.md +420 -0
- package/docs/user-guide/11-dashboard-example.md +188 -0
- package/docs/user-guide/12-crud-example.md +203 -0
- package/docs/user-guide/13-wizard-example.md +196 -0
- package/docs/user-guide/14-limitations.md +186 -0
- package/docs/user-guide/README.md +99 -0
- package/docs/user-guide-pdf-build.md +128 -0
- package/package.json +8 -1
- package/scripts/docs/build-user-guide-pdf.js +49 -0
- package/scripts/docs/user-guide-pdf-lib.js +825 -0
- package/scripts/docs/user-guide-print.css +286 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
# 設定
|
|
2
|
+
|
|
3
|
+
この章では、`jskim.config.js` で設定できる項目を説明します。
|
|
4
|
+
既存の詳細 reference として [docs/configuration.md](../configuration.md) もありますが、ここでは初学者向けの順で整理します。
|
|
5
|
+
|
|
6
|
+
## 設定ファイル
|
|
7
|
+
|
|
8
|
+
ファイル名はワークスペースルートの `jskim.config.js` です。
|
|
9
|
+
コマンドを実行したディレクトリ(`process.cwd()`)をルートとして読みます。
|
|
10
|
+
|
|
11
|
+
形式は CommonJS です。
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
module.exports = {
|
|
15
|
+
defaults: {
|
|
16
|
+
// 全 project 共通の既定値
|
|
17
|
+
},
|
|
18
|
+
projects: {
|
|
19
|
+
// project 名ごとの設定
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
ESM(`export default`)はサポートしていません。
|
|
25
|
+
|
|
26
|
+
## 最小の設定例
|
|
27
|
+
|
|
28
|
+
必須なのは、少なくとも 1 件の project と、その `sourceDir` / `outputDir` です。
|
|
29
|
+
加えて、files mode では `files`、legacy mode では `render` が必要です。
|
|
30
|
+
|
|
31
|
+
推奨の最小例(files mode):
|
|
32
|
+
|
|
33
|
+
```js
|
|
34
|
+
module.exports = {
|
|
35
|
+
defaults: {
|
|
36
|
+
files: [{ from: 'pages', to: '' }],
|
|
37
|
+
templates: ['layouts', 'components'],
|
|
38
|
+
},
|
|
39
|
+
projects: {
|
|
40
|
+
sample: {
|
|
41
|
+
sourceDir: 'src/sample',
|
|
42
|
+
outputDir: 'dist/sample',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
| key | 必須 | 備考 |
|
|
49
|
+
| --- | ---- | ---- |
|
|
50
|
+
| `projects` | 必須 | オブジェクト。1 件以上を推奨 |
|
|
51
|
+
| `defaults` | 任意 | 省略時は空オブジェクト扱い |
|
|
52
|
+
| `sourceDir` / `outputDir` | project ごとに必須 | `defaults` 側に置いても可 |
|
|
53
|
+
| `files` または `render` | mode に応じて必須 | 同時設定は不可 |
|
|
54
|
+
|
|
55
|
+
## 公式 sample の設定
|
|
56
|
+
|
|
57
|
+
この repository の設定は [jskim.config.js](../../jskim.config.js) です。
|
|
58
|
+
理解に必要な部分だけ抜粋します(filter / global の実装全体は省略しています)。
|
|
59
|
+
|
|
60
|
+
```js
|
|
61
|
+
module.exports = {
|
|
62
|
+
defaults: {
|
|
63
|
+
files: [{ from: 'pages', to: '' }],
|
|
64
|
+
templates: ['layouts', 'components'],
|
|
65
|
+
data: {
|
|
66
|
+
site: {
|
|
67
|
+
name: 'JSKim UI Sample',
|
|
68
|
+
language: 'ja',
|
|
69
|
+
themeColor: '#222222',
|
|
70
|
+
},
|
|
71
|
+
samplePrice: 12000,
|
|
72
|
+
},
|
|
73
|
+
// nunjucks.filters / nunjucks.globals も定義できる
|
|
74
|
+
build: { clean: true },
|
|
75
|
+
watch: { debounce: 150 },
|
|
76
|
+
serve: { host: '127.0.0.1', port: 3000 },
|
|
77
|
+
dev: { liveReload: true },
|
|
78
|
+
},
|
|
79
|
+
projects: {
|
|
80
|
+
sample: {
|
|
81
|
+
sourceDir: 'src/sample',
|
|
82
|
+
outputDir: 'dist/sample',
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## トップレベルの構造
|
|
89
|
+
|
|
90
|
+
読み込み時に必須検査されるのは次です。
|
|
91
|
+
|
|
92
|
+
| key | 型 | 必須 | 説明 |
|
|
93
|
+
| --- | -- | ---- | ---- |
|
|
94
|
+
| `projects` | object | 必須 | project 名 → 設定 |
|
|
95
|
+
| `defaults` | object | 任意 | 全 project への共通既定値 |
|
|
96
|
+
|
|
97
|
+
それ以外のトップレベル key は、現在の loader では必須ではありません。
|
|
98
|
+
実際の build 設定は `defaults` と各 `projects.*` をマージして使います。
|
|
99
|
+
|
|
100
|
+
## projects
|
|
101
|
+
|
|
102
|
+
`projects` は名前付き project の一覧です。
|
|
103
|
+
|
|
104
|
+
```js
|
|
105
|
+
projects: {
|
|
106
|
+
sample: { sourceDir: 'src/sample', outputDir: 'dist/sample' },
|
|
107
|
+
docs: { sourceDir: 'src/docs', outputDir: 'dist/docs' },
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
- 各 project は独立した `sourceDir` / `outputDir` を持てます
|
|
112
|
+
- CLI の project 引数はこのキー名を指します
|
|
113
|
+
- 空の `projects` だとコマンド実行時にエラーになります
|
|
114
|
+
|
|
115
|
+
名前の文字種に特別な禁止規則はありませんが、CLI 引数として扱いやすい英数字名を推奨します。
|
|
116
|
+
|
|
117
|
+
## sourceDir
|
|
118
|
+
|
|
119
|
+
| 項目 | 内容 |
|
|
120
|
+
| ---- | ---- |
|
|
121
|
+
| 型 | string |
|
|
122
|
+
| 必須 | はい(マージ後) |
|
|
123
|
+
| 既定値 | なし |
|
|
124
|
+
| 基準 | ワークスペースルート(`process.cwd()`) |
|
|
125
|
+
| 検証 | 空不可。実在するディレクトリであること |
|
|
126
|
+
| 役割 | source のルート |
|
|
127
|
+
|
|
128
|
+
## outputDir
|
|
129
|
+
|
|
130
|
+
| 項目 | 内容 |
|
|
131
|
+
| ---- | ---- |
|
|
132
|
+
| 型 | string |
|
|
133
|
+
| 必須 | はい(マージ後) |
|
|
134
|
+
| 既定値 | なし |
|
|
135
|
+
| 基準 | ワークスペースルート |
|
|
136
|
+
| 検証 | 空不可 |
|
|
137
|
+
| 役割 | build 結果のルート。`serve` / `dev` の公開ルートでもある |
|
|
138
|
+
|
|
139
|
+
注意点:
|
|
140
|
+
|
|
141
|
+
- `build.clean` が `true` のとき、build 前に削除されることがあります
|
|
142
|
+
- 手編集した output は次の build で上書きされることがあります
|
|
143
|
+
- `build --all` では、複数 project の `outputDir` が同一または入れ子だと開始前に中断します
|
|
144
|
+
|
|
145
|
+
## files
|
|
146
|
+
|
|
147
|
+
推奨の files pipeline 設定です。配列で、各 entry は次のフィールドを持ちます。
|
|
148
|
+
|
|
149
|
+
| field | 基準 | 必須 | 既定 | 説明 |
|
|
150
|
+
| ----- | ---- | ---- | ---- | ---- |
|
|
151
|
+
| `from` | `sourceDir` | 必須 | — | 探索開始ディレクトリ |
|
|
152
|
+
| `to` | `outputDir` | 任意 | `''` | 出力基準。空なら output ルート |
|
|
153
|
+
| `include` | `from` | 任意 | `['**/*']` | 取り込み glob |
|
|
154
|
+
| `exclude` | `from` | 任意 | `[]` | 除外 glob |
|
|
155
|
+
|
|
156
|
+
例:
|
|
157
|
+
|
|
158
|
+
```js
|
|
159
|
+
files: [
|
|
160
|
+
{
|
|
161
|
+
from: 'pages',
|
|
162
|
+
to: '',
|
|
163
|
+
},
|
|
164
|
+
]
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
- 複数 entry を書けます
|
|
168
|
+
- 同じ output path が複数 source から生成されるとエラーです
|
|
169
|
+
- `files` を空配列にすると files mode にはなりません(legacy 判定側へ)
|
|
170
|
+
- `files` と `render` / `copy` の同時設定はできません
|
|
171
|
+
|
|
172
|
+
処理の詳細は [files pipeline](07-files-pipeline.md) を参照してください。
|
|
173
|
+
|
|
174
|
+
## templates
|
|
175
|
+
|
|
176
|
+
| 項目 | 内容 |
|
|
177
|
+
| ---- | ---- |
|
|
178
|
+
| 型 | string の配列 |
|
|
179
|
+
| 必須 | 任意 |
|
|
180
|
+
| 既定値 | `[]` |
|
|
181
|
+
| 基準 | `sourceDir` |
|
|
182
|
+
| 役割 | Nunjucks loader の追加検索パス |
|
|
183
|
+
|
|
184
|
+
例:
|
|
185
|
+
|
|
186
|
+
```js
|
|
187
|
+
templates: ['layouts', 'components'],
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
- `extends` / `include` の解決に使います
|
|
191
|
+
- 実在するディレクトリ配下は、files mode では **直接 output しません**
|
|
192
|
+
- `sourceDir` 自体も loader root に含まれます
|
|
193
|
+
|
|
194
|
+
## data
|
|
195
|
+
|
|
196
|
+
| 項目 | 内容 |
|
|
197
|
+
| ---- | ---- |
|
|
198
|
+
| 型 | plain object(`null` 可) |
|
|
199
|
+
| 必須 | 任意 |
|
|
200
|
+
| 既定値 | 空に近い扱い(マージ結果) |
|
|
201
|
+
| 役割 | すべての Nunjucks render context に渡す共通データ |
|
|
202
|
+
|
|
203
|
+
公式 sample では `site.name` などを渡しています。
|
|
204
|
+
|
|
205
|
+
> **Warning**
|
|
206
|
+
>
|
|
207
|
+
> `data.rootPath` は予約語です。設定するとエラーになります。
|
|
208
|
+
> `rootPath` は JSKim が各ページへ自動注入します。
|
|
209
|
+
|
|
210
|
+
## build 設定
|
|
211
|
+
|
|
212
|
+
| path | 型 | 既定 | 説明 |
|
|
213
|
+
| ---- | -- | ---- | ---- |
|
|
214
|
+
| `build.clean` | boolean | `true` | build 前に `outputDir` を削除する |
|
|
215
|
+
|
|
216
|
+
## watch 設定
|
|
217
|
+
|
|
218
|
+
| path | 型 | 既定 | 説明 |
|
|
219
|
+
| ---- | -- | ---- | ---- |
|
|
220
|
+
| `watch.debounce` | number(0 以上) | `150` | 最後の変更から再 build までの待ち時間(ミリ秒) |
|
|
221
|
+
|
|
222
|
+
## serve 設定
|
|
223
|
+
|
|
224
|
+
| path | 型 | 既定 | 説明 |
|
|
225
|
+
| ---- | -- | ---- | ---- |
|
|
226
|
+
| `serve.host` | string(空不可) | `'127.0.0.1'` | 待ち受け host |
|
|
227
|
+
| `serve.port` | 整数 1〜65535 | `3000` | 待ち受け port |
|
|
228
|
+
|
|
229
|
+
CLI の `--host` / `--port` がある場合は、CLI が優先されます。
|
|
230
|
+
|
|
231
|
+
## dev 設定
|
|
232
|
+
|
|
233
|
+
| path | 型 | 既定 | 説明 |
|
|
234
|
+
| ---- | -- | ---- | ---- |
|
|
235
|
+
| `dev.liveReload` | boolean | `true` | 開発中の live reload を有効にする |
|
|
236
|
+
|
|
237
|
+
## filters と globals
|
|
238
|
+
|
|
239
|
+
カスタム Nunjucks 機能は `nunjucks` 配下に書きます。
|
|
240
|
+
|
|
241
|
+
```js
|
|
242
|
+
nunjucks: {
|
|
243
|
+
filters: {
|
|
244
|
+
formatPrice(value) {
|
|
245
|
+
return `${Number(value).toLocaleString('ja-JP')}円`;
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
globals: {
|
|
249
|
+
currentYear() {
|
|
250
|
+
return new Date().getFullYear();
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
}
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
- `filters` の値は **function** である必要があります
|
|
257
|
+
- JavaScript の関数として定義します(JSON では書けません)
|
|
258
|
+
- 公式 sample はデモ用に定義していますが、必須ではありません
|
|
259
|
+
- 非同期 filter は現在サポートしていません
|
|
260
|
+
|
|
261
|
+
書き方の詳細は [Nunjucksの使い方](08-nunjucks.md) を参照してください。
|
|
262
|
+
|
|
263
|
+
## 全体 option reference
|
|
264
|
+
|
|
265
|
+
### トップレベル
|
|
266
|
+
|
|
267
|
+
| path | 型 | 必須 | 既定 | 説明 |
|
|
268
|
+
| ---- | -- | ---- | ---- | ---- |
|
|
269
|
+
| `projects` | object | 必須 | — | project 定義 |
|
|
270
|
+
| `defaults` | object | 任意 | `{}` | 共通既定値 |
|
|
271
|
+
|
|
272
|
+
### project / defaults で使う主な key
|
|
273
|
+
|
|
274
|
+
| path | 型 | 必須 | 既定 | 説明 |
|
|
275
|
+
| ---- | -- | ---- | ---- | ---- |
|
|
276
|
+
| `sourceDir` | string | 必須 | — | source ルート |
|
|
277
|
+
| `outputDir` | string | 必須 | — | output ルート |
|
|
278
|
+
| `files` | object[] \| 未設定 | mode 依存 | 未設定は `null` | files pipeline |
|
|
279
|
+
| `templates` | string[] | 任意 | `[]` | template 検索パス |
|
|
280
|
+
| `render` | object[] | legacy 時 | `[]` | legacy render |
|
|
281
|
+
| `copy` | object[] | 任意 | `[]` | legacy copy |
|
|
282
|
+
| `data` | object \| null | 任意 | — | 共通 template データ |
|
|
283
|
+
| `nunjucks.filters` | object | 任意 | `{}` | カスタム filter |
|
|
284
|
+
| `nunjucks.globals` | object | 任意 | `{}` | カスタム global |
|
|
285
|
+
| `build.clean` | boolean | 任意 | `true` | output を clean |
|
|
286
|
+
| `watch.debounce` | number | 任意 | `150` | 監視の debounce(ms) |
|
|
287
|
+
| `serve.host` | string | 任意 | `'127.0.0.1'` | サーバー host |
|
|
288
|
+
| `serve.port` | number | 任意 | `3000` | サーバー port |
|
|
289
|
+
| `dev.liveReload` | boolean | 任意 | `true` | live reload |
|
|
290
|
+
|
|
291
|
+
legacy の `render` / `copy` 詳細は [docs/configuration.md](../configuration.md) も参照してください。
|
|
292
|
+
新規 project では `files` を推奨します。
|
|
293
|
+
|
|
294
|
+
## 検証と unknown key
|
|
295
|
+
|
|
296
|
+
主な検証例:
|
|
297
|
+
|
|
298
|
+
- 必須 key の欠落
|
|
299
|
+
- 型不正(例: `serve.port` が範囲外)
|
|
300
|
+
- `files` と `render` / `copy` の同時設定
|
|
301
|
+
- `data.rootPath` の予約衝突
|
|
302
|
+
- path traversal(`sourceDir` / `outputDir` の外へ出る設定)
|
|
303
|
+
|
|
304
|
+
認識していない余分な key は、現在の実装ではエラーにせず無視されることがあります。
|
|
305
|
+
厳密な schema エンジンではありません。
|
|
306
|
+
|
|
307
|
+
エラー時の具体メッセージと復旧手順は [エラーとトラブルシュート](10-errors-and-troubleshooting.md) を参照してください。
|
|
308
|
+
|
|
309
|
+
## 設定変更の反映
|
|
310
|
+
|
|
311
|
+
| command | config の読み方 |
|
|
312
|
+
| ------- | ---------------- |
|
|
313
|
+
| `build` | 開始時に 1 回 |
|
|
314
|
+
| `serve` | 開始時に 1 回(監視しない) |
|
|
315
|
+
| `watch` / `dev` | 開始時に読み、実行中の変更も検知できる |
|
|
316
|
+
|
|
317
|
+
`dev` では、次の値が変わると process 再起動が必要です。
|
|
318
|
+
|
|
319
|
+
- `outputDir`
|
|
320
|
+
- `serve.host`
|
|
321
|
+
- `serve.port`
|
|
322
|
+
- `dev.liveReload`
|
|
323
|
+
|
|
324
|
+
CLI で指定した `--host` / `--port` は、reload 後も維持されます。
|
|
325
|
+
不正な config を書いた場合は、直前まで有効だった設定を維持する動作があります。
|
|
326
|
+
|
|
327
|
+
詳細な hot reload の挙動は [開発機能](09-development-features.md) を参照してください。
|
|
328
|
+
|
|
329
|
+
## 複数 project の例
|
|
330
|
+
|
|
331
|
+
`outputDir` が衝突しないように分けます。
|
|
332
|
+
|
|
333
|
+
```js
|
|
334
|
+
module.exports = {
|
|
335
|
+
defaults: {
|
|
336
|
+
files: [{ from: 'pages', to: '' }],
|
|
337
|
+
templates: ['layouts', 'components'],
|
|
338
|
+
serve: { host: '127.0.0.1', port: 3000 },
|
|
339
|
+
},
|
|
340
|
+
projects: {
|
|
341
|
+
siteA: {
|
|
342
|
+
sourceDir: 'src/site-a',
|
|
343
|
+
outputDir: 'dist/site-a',
|
|
344
|
+
},
|
|
345
|
+
siteB: {
|
|
346
|
+
sourceDir: 'src/site-b',
|
|
347
|
+
outputDir: 'dist/site-b',
|
|
348
|
+
},
|
|
349
|
+
},
|
|
350
|
+
};
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
```bash
|
|
354
|
+
jskim build siteA
|
|
355
|
+
jskim build --all
|
|
356
|
+
jskim dev siteB --port 4000
|
|
357
|
+
```
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
# files pipeline
|
|
2
|
+
|
|
3
|
+
この章では、JSKim が source を output に変換する files pipeline の規則を説明します。
|
|
4
|
+
公式 sample の配置は [プロジェクト構成](03-project-structure.md) もあわせて参照してください。
|
|
5
|
+
|
|
6
|
+
## pipeline の概要
|
|
7
|
+
|
|
8
|
+
推奨設定では、`files` の各 entry から処理計画を作ります。
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
files[].from 配下を探索
|
|
12
|
+
│
|
|
13
|
+
├─ 末尾が .njk ── Nunjucks render ── output(.njk を外す)
|
|
14
|
+
└─ それ以外 ──── byte copy ──────── output
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
`templates` に指定した実在ディレクトリ配下は、計画から除外され、直接 output されません。
|
|
18
|
+
|
|
19
|
+
## files entry
|
|
20
|
+
|
|
21
|
+
公式 sample の設定:
|
|
22
|
+
|
|
23
|
+
```js
|
|
24
|
+
files: [
|
|
25
|
+
{
|
|
26
|
+
from: 'pages',
|
|
27
|
+
to: '',
|
|
28
|
+
},
|
|
29
|
+
]
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
| field | 意味 |
|
|
33
|
+
| ----- | ---- |
|
|
34
|
+
| `from: 'pages'` | `sourceDir/pages` を探索する |
|
|
35
|
+
| `to: ''` | `outputDir` ルートへ出す |
|
|
36
|
+
|
|
37
|
+
そのため、例えば次のように対応します。
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
src/sample/pages/index.html.njk
|
|
41
|
+
→ dist/sample/index.html
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## render 対象
|
|
45
|
+
|
|
46
|
+
判定は **パス末尾が `.njk`(小文字)かどうか** です。
|
|
47
|
+
|
|
48
|
+
| source | 処理 |
|
|
49
|
+
| ------ | ---- |
|
|
50
|
+
| `index.html.njk` | render → `index.html` |
|
|
51
|
+
| `style.css.njk` | render → `style.css` |
|
|
52
|
+
| `main.js.njk` | render → `main.js` |
|
|
53
|
+
| `common.css` | copy |
|
|
54
|
+
| `logo.svg` | copy |
|
|
55
|
+
| `note.NJK` | copy(末尾が `.njk` ではない) |
|
|
56
|
+
|
|
57
|
+
> **Note**
|
|
58
|
+
>
|
|
59
|
+
> 判定は case-sensitive です。`.NJK` や `.Njk` は render しません。
|
|
60
|
+
|
|
61
|
+
ディレクトリ自体は出力対象ではなく、配下のファイルが対象です。
|
|
62
|
+
|
|
63
|
+
## output のファイル名
|
|
64
|
+
|
|
65
|
+
render 時は、末尾の `.njk` **4 文字だけ** を外します。
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
index.html.njk → index.html
|
|
69
|
+
style.css.njk → style.css
|
|
70
|
+
main.js.njk → main.js
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
> **Note**
|
|
74
|
+
>
|
|
75
|
+
> `example.njk.njk` のように二重になっている場合も、末尾の 1 回分だけ外します。
|
|
76
|
+
> 結果のファイル名は `example.njk` になります。
|
|
77
|
+
|
|
78
|
+
## copy 対象
|
|
79
|
+
|
|
80
|
+
末尾が `.njk` でないファイルは byte copy します。
|
|
81
|
+
|
|
82
|
+
- 内容を変換しません
|
|
83
|
+
- 文字コード変換も行いません
|
|
84
|
+
- 公式 sample の平文 CSS や SVG がこれに当たります
|
|
85
|
+
|
|
86
|
+
例:
|
|
87
|
+
|
|
88
|
+
- [common.css](../../src/sample/pages/assets/css/common.css)
|
|
89
|
+
- [logo.svg](../../src/sample/pages/assets/img/logo.svg)
|
|
90
|
+
|
|
91
|
+
## directory 構造の維持
|
|
92
|
+
|
|
93
|
+
`from` 配下の相対パスは、`to` 基準で output 側にも維持されます。
|
|
94
|
+
|
|
95
|
+
```text
|
|
96
|
+
pages/crud/detail.html.njk
|
|
97
|
+
→ dist/sample/crud/detail.html
|
|
98
|
+
|
|
99
|
+
pages/dashboard/assets/css/dashboard.css
|
|
100
|
+
→ dist/sample/dashboard/assets/css/dashboard.css
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## template root
|
|
104
|
+
|
|
105
|
+
次の設定があるとき、`layouts` と `components` は template root です。
|
|
106
|
+
|
|
107
|
+
```js
|
|
108
|
+
templates: [
|
|
109
|
+
'layouts',
|
|
110
|
+
'components',
|
|
111
|
+
]
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
用途:
|
|
115
|
+
|
|
116
|
+
- `{% extends "layouts/base.njk" %}`
|
|
117
|
+
- `{% include "components/header.njk" %}`
|
|
118
|
+
|
|
119
|
+
これらは配布用 HTML としては直接生成されません。
|
|
120
|
+
例: [base.njk](../../src/sample/layouts/base.njk)
|
|
121
|
+
|
|
122
|
+
## rootPath
|
|
123
|
+
|
|
124
|
+
各 render ページには、output 上の位置から `outputDir` ルートへ戻る相対パス `rootPath` が入ります。
|
|
125
|
+
|
|
126
|
+
計算の考え方:
|
|
127
|
+
|
|
128
|
+
1. output ファイルのディレクトリから `outputDir` への相対パスを取る
|
|
129
|
+
2. HTML 用に `/` 区切りにする
|
|
130
|
+
3. 空なら `./` にする(末尾に `/` を付ける)
|
|
131
|
+
|
|
132
|
+
公式 sample(`outputDir = dist/sample`)での例:
|
|
133
|
+
|
|
134
|
+
| output page | `rootPath` |
|
|
135
|
+
| ----------- | ---------- |
|
|
136
|
+
| `index.html` | `./` |
|
|
137
|
+
| `dashboard/index.html` | `../` |
|
|
138
|
+
| `crud/detail.html` | `../` |
|
|
139
|
+
| さらに深い階層(例: `a/b/c.html`) | `../../` |
|
|
140
|
+
|
|
141
|
+
共通 asset の参照例(layout):
|
|
142
|
+
|
|
143
|
+
```nunjucks
|
|
144
|
+
<link rel="stylesheet" href="{{ rootPath }}assets/css/common.css">
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
`data.rootPath` で上書きすることはできません。
|
|
148
|
+
|
|
149
|
+
## 共通 asset と page-local asset
|
|
150
|
+
|
|
151
|
+
### 共通 asset
|
|
152
|
+
|
|
153
|
+
```text
|
|
154
|
+
pages/assets/css/common.css
|
|
155
|
+
→ assets/css/common.css
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
深い階層のページからも同じ場所を指すため、`rootPath` を使います。
|
|
159
|
+
|
|
160
|
+
```nunjucks
|
|
161
|
+
{{ rootPath }}assets/css/common.css
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### page-local asset
|
|
165
|
+
|
|
166
|
+
```text
|
|
167
|
+
pages/crud/assets/css/crud.css
|
|
168
|
+
→ crud/assets/css/crud.css
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
同じ画面グループからの相対パスで参照します。
|
|
172
|
+
|
|
173
|
+
```html
|
|
174
|
+
<link rel="stylesheet" href="assets/css/crud.css">
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
> **Warning**
|
|
178
|
+
>
|
|
179
|
+
> page-local CSS に `rootPath` を付けないでください。
|
|
180
|
+
>
|
|
181
|
+
> ```nunjucks
|
|
182
|
+
> {{ rootPath }}assets/css/crud.css
|
|
183
|
+
> ```
|
|
184
|
+
>
|
|
185
|
+
> これは output root の `assets/css/crud.css` を指します。
|
|
186
|
+
> 実際のファイルは `crud/assets/css/crud.css` にあるため、パスがずれます。
|
|
187
|
+
|
|
188
|
+
| 種類 | 置き場所 | 参照 |
|
|
189
|
+
| ---- | -------- | ---- |
|
|
190
|
+
| 共通 | `pages/assets/...` | `{{ rootPath }}assets/...` |
|
|
191
|
+
| page-local | `pages/<group>/assets/...` | `assets/...`(相対) |
|
|
192
|
+
|
|
193
|
+
実例:
|
|
194
|
+
|
|
195
|
+
- 共通: [common.css](../../src/sample/pages/assets/css/common.css)
|
|
196
|
+
- Dashboard: [dashboard.css](../../src/sample/pages/dashboard/assets/css/dashboard.css)
|
|
197
|
+
- CRUD: [crud.css](../../src/sample/pages/crud/assets/css/crud.css)
|
|
198
|
+
- Wizard: [wizard.css](../../src/sample/pages/wizard/assets/css/wizard.css)
|
|
199
|
+
|
|
200
|
+
## 複数の files entry
|
|
201
|
+
|
|
202
|
+
複数の entry を書くと、それぞれの計画が結合されます。
|
|
203
|
+
|
|
204
|
+
```js
|
|
205
|
+
files: [
|
|
206
|
+
{ from: 'pages', to: '' },
|
|
207
|
+
{ from: 'shared-images', to: 'assets/img' },
|
|
208
|
+
]
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
別々の source を、異なる output 位置へ出せます。
|
|
212
|
+
ただし最終的な output path が同じになると衝突エラーになります。
|
|
213
|
+
|
|
214
|
+
## output の衝突
|
|
215
|
+
|
|
216
|
+
次のような場合、build は失敗します。
|
|
217
|
+
|
|
218
|
+
- 2 つの source が同じ output path を生成する
|
|
219
|
+
- `main.js` と `main.js.njk` のように、suffix 除去後に同じパスになる
|
|
220
|
+
- Windows で大文字小文字だけが違う path(同一扱いになり衝突)
|
|
221
|
+
|
|
222
|
+
衝突は、ファイルを書き始める前の計画段階で検出されます。
|
|
223
|
+
エラーメッセージの読み方は [エラーとトラブルシュート](10-errors-and-troubleshooting.md) を参照してください。
|
|
224
|
+
|
|
225
|
+
## clean
|
|
226
|
+
|
|
227
|
+
`build.clean` の既定値は `true` です。
|
|
228
|
+
|
|
229
|
+
| 値 | 動作 |
|
|
230
|
+
| -- | ---- |
|
|
231
|
+
| `true` | build 前に `outputDir` を削除してから再生成 |
|
|
232
|
+
| `false` | 既存ファイルを残したまま上書き生成 |
|
|
233
|
+
|
|
234
|
+
`watch` / `dev` の再 build でも、`clean: true` なら毎回フル clean + 全体再 build です。
|
|
235
|
+
そのため、source から消したファイルは、次の成功 build で output からも消えます。
|
|
236
|
+
|
|
237
|
+
危険な `outputDir`(ワークスペースルート全体など)への clean は拒否されます。
|
|
238
|
+
|
|
239
|
+
## watch 中の変更・削除
|
|
240
|
+
|
|
241
|
+
概要のみ示します。
|
|
242
|
+
|
|
243
|
+
| 変化 | 結果の考え方 |
|
|
244
|
+
| ---- | ------------ |
|
|
245
|
+
| ファイル修正 | 再 build で output 更新 |
|
|
246
|
+
| 新規ファイル | 再 build で追加 |
|
|
247
|
+
| 削除 | `clean: true` なら output からも消える |
|
|
248
|
+
| layout / component 変更 | 依存ページも含めて再 build |
|
|
249
|
+
| config 変更 | `watch` / `dev` では検知できる(詳細は [開発機能](09-development-features.md)) |
|
|
250
|
+
|
|
251
|
+
debounce や live reload の詳細は [開発機能](09-development-features.md) を参照してください。
|
|
252
|
+
|
|
253
|
+
## 安全な asset 配置の目安
|
|
254
|
+
|
|
255
|
+
| 目的 | 置き場所 / 命名 |
|
|
256
|
+
| ---- | ---------------- |
|
|
257
|
+
| 全ページ共通 | `pages/assets/` |
|
|
258
|
+
| 特定画面群だけ | その画面群の `assets/` |
|
|
259
|
+
| Nunjucks で生成したい CSS / JS | 末尾に `.njk`(例: `style.css.njk`) |
|
|
260
|
+
| そのままコピーしたいファイル | 平文の拡張子(例: `common.css`, `logo.svg`) |
|
|
261
|
+
| layout / component | `templates` に指定した root |
|
|
262
|
+
|
|
263
|
+
## 公式 sample の対応表
|
|
264
|
+
|
|
265
|
+
| source | 処理 | output |
|
|
266
|
+
| ------ | ---- | ------ |
|
|
267
|
+
| `pages/index.html.njk` | render | `index.html` |
|
|
268
|
+
| `pages/dashboard/index.html.njk` | render | `dashboard/index.html` |
|
|
269
|
+
| `pages/dashboard/assets/css/dashboard.css` | copy | `dashboard/assets/css/dashboard.css` |
|
|
270
|
+
| `pages/crud/detail.html.njk` | render | `crud/detail.html` |
|
|
271
|
+
| `pages/crud/assets/css/crud.css` | copy | `crud/assets/css/crud.css` |
|
|
272
|
+
| `pages/wizard/assets/css/wizard.css` | copy | `wizard/assets/css/wizard.css` |
|
|
273
|
+
| `pages/assets/css/common.css` | copy | `assets/css/common.css` |
|
|
274
|
+
| `pages/assets/img/logo.svg` | copy | `assets/img/logo.svg` |
|
|
275
|
+
| `layouts/base.njk` | template | 直接 output なし |
|
|
276
|
+
| `components/header.njk` | template | 直接 output なし |
|
|
277
|
+
|
|
278
|
+
設定の全体像は [設定](06-configuration.md)、コマンド操作は [CLIリファレンス](05-cli-reference.md) を参照してください。
|