@ywal123456/jskim 0.5.0 → 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 +25 -12
- package/docs/JSKim_User_Guide_v0.5.2.pdf +0 -0
- package/docs/create-jskim.md +44 -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,300 @@
|
|
|
1
|
+
# Nunjucksの使い方
|
|
2
|
+
|
|
3
|
+
この章では、JSKim の静的ページ制作で実用的な Nunjucks 文法を説明します。
|
|
4
|
+
Nunjucks 全体の公式 reference を置き換えるものではありません。
|
|
5
|
+
|
|
6
|
+
## JSKim と Nunjucks
|
|
7
|
+
|
|
8
|
+
| 役割 | 内容 |
|
|
9
|
+
| ---- | ---- |
|
|
10
|
+
| Nunjucks | template の記法と render engine |
|
|
11
|
+
| JSKim | project / 設定 / files / build / watch / serve / dev をまとめる実行環境 |
|
|
12
|
+
|
|
13
|
+
`{% ... %}` と `{{ ... }}` は Nunjucks の文法です。
|
|
14
|
+
一方、`rootPath` は Nunjucks 固有の変数ではなく、JSKim が render context に注入する予約値です。
|
|
15
|
+
|
|
16
|
+
Nunjucks の機能すべてが JSKim 独自機能というわけではありません。
|
|
17
|
+
この章は、公式 sample で使われている範囲を中心にします。
|
|
18
|
+
|
|
19
|
+
## Template inheritance
|
|
20
|
+
|
|
21
|
+
各ページは共通 layout を継承します。
|
|
22
|
+
|
|
23
|
+
```nunjucks
|
|
24
|
+
{% extends "layouts/base.njk" %}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
パスは、page file からの相対パスではありません。
|
|
28
|
+
Nunjucks loader が探す template root(`sourceDir` と `templates[]`)基準です。
|
|
29
|
+
|
|
30
|
+
layout 自体は template root のため、直接 HTML としては output されません。
|
|
31
|
+
詳細は [files pipeline](07-files-pipeline.md) を参照してください。
|
|
32
|
+
|
|
33
|
+
- layout: [`base.njk`](../../src/sample/layouts/base.njk)
|
|
34
|
+
- 例: [Portal](../../src/sample/pages/index.html.njk)、[Dashboard](../../src/sample/pages/dashboard/index.html.njk)
|
|
35
|
+
|
|
36
|
+
## block
|
|
37
|
+
|
|
38
|
+
[`base.njk`](../../src/sample/layouts/base.njk) が定義する block は次の 3 つです。
|
|
39
|
+
|
|
40
|
+
| block | 用途 |
|
|
41
|
+
| ----- | ---- |
|
|
42
|
+
| `title` | `<title>` の内容 |
|
|
43
|
+
| `pageCss` | 画面群ごとの stylesheet など |
|
|
44
|
+
| `content` | 本文 |
|
|
45
|
+
|
|
46
|
+
Wizard 入力ページの例:
|
|
47
|
+
|
|
48
|
+
```nunjucks
|
|
49
|
+
{% block title %}情報入力 - {{ site.name }}{% endblock %}
|
|
50
|
+
|
|
51
|
+
{% block pageCss %}
|
|
52
|
+
<link rel="stylesheet" href="assets/css/wizard.css">
|
|
53
|
+
{% endblock %}
|
|
54
|
+
|
|
55
|
+
{% block content %}
|
|
56
|
+
...
|
|
57
|
+
{% endblock %}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
公式 sample に存在しない `script` block などはここでは扱いません。
|
|
61
|
+
|
|
62
|
+
## include
|
|
63
|
+
|
|
64
|
+
layout は共通 fragment を `include` します。
|
|
65
|
+
|
|
66
|
+
```nunjucks
|
|
67
|
+
{% include "components/header.njk" %}
|
|
68
|
+
{% include "components/sidebar.njk" %}
|
|
69
|
+
{% include "components/footer.njk" %}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
breadcrumb は `breadcrumbs` があるときだけ読み込みます。
|
|
73
|
+
|
|
74
|
+
```nunjucks
|
|
75
|
+
{% if breadcrumbs %}
|
|
76
|
+
{% include "components/breadcrumb.njk" %}
|
|
77
|
+
{% endif %}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Wizard ページでは手順表示も include します。
|
|
81
|
+
|
|
82
|
+
```nunjucks
|
|
83
|
+
{% include "components/wizard-steps.njk" %}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
include 対象も独立 HTML としては output されません。
|
|
87
|
+
|
|
88
|
+
- [`header.njk`](../../src/sample/components/header.njk)
|
|
89
|
+
- [`wizard-steps.njk`](../../src/sample/components/wizard-steps.njk)
|
|
90
|
+
- 例: [Wizard 入力](../../src/sample/pages/wizard/input.html.njk)
|
|
91
|
+
|
|
92
|
+
## Variable output
|
|
93
|
+
|
|
94
|
+
config の `data` や page 内の値を出力します。
|
|
95
|
+
|
|
96
|
+
```nunjucks
|
|
97
|
+
{{ site.name }}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
JSKim の Nunjucks 環境は `autoescape: true` です。
|
|
101
|
+
HTML 特殊文字は既定で escape されます。
|
|
102
|
+
|
|
103
|
+
信頼できない入力を raw HTML として埋め込む例は、このガイドでは扱いません。
|
|
104
|
+
|
|
105
|
+
## set
|
|
106
|
+
|
|
107
|
+
page 内の静的な値を定義します。
|
|
108
|
+
|
|
109
|
+
```nunjucks
|
|
110
|
+
{% set currentSection = "dashboard" %}
|
|
111
|
+
{% set currentStep = 1 %}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
CRUD 一覧では、表示用の配列も page 内で定義しています。
|
|
115
|
+
|
|
116
|
+
```nunjucks
|
|
117
|
+
{% set products = [
|
|
118
|
+
{ id: "P-001", name: "サンプル商品A", status: "公開" },
|
|
119
|
+
...
|
|
120
|
+
] %}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
これは外部 API や mock server ではありません。
|
|
124
|
+
application の状態管理機能でもありません。静的 UI sample のための値です。
|
|
125
|
+
|
|
126
|
+
例: [CRUD 一覧](../../src/sample/pages/crud/index.html.njk)
|
|
127
|
+
|
|
128
|
+
## for
|
|
129
|
+
|
|
130
|
+
繰り返し HTML を生成します。CRUD 一覧の抜粋:
|
|
131
|
+
|
|
132
|
+
```nunjucks
|
|
133
|
+
{% for product in products %}
|
|
134
|
+
<tr>
|
|
135
|
+
<td>{{ product.id }}</td>
|
|
136
|
+
<td>{{ product.name }}</td>
|
|
137
|
+
...
|
|
138
|
+
</tr>
|
|
139
|
+
{% endfor %}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
空配列の特別処理など、sample にない高度な用法は省略します。
|
|
143
|
+
|
|
144
|
+
## if / elif / else
|
|
145
|
+
|
|
146
|
+
条件で class や表示文言を切り替えます。
|
|
147
|
+
CRUD の status 表示:
|
|
148
|
+
|
|
149
|
+
```nunjucks
|
|
150
|
+
{% if product.status == "公開" %}
|
|
151
|
+
<span class="badge badge--public">公開</span>
|
|
152
|
+
{% elif product.status == "非公開" %}
|
|
153
|
+
<span class="badge badge--private">非公開</span>
|
|
154
|
+
{% else %}
|
|
155
|
+
<span class="badge badge--draft">下書き</span>
|
|
156
|
+
{% endif %}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
色だけで区別せず、テキストも残しています。
|
|
160
|
+
|
|
161
|
+
Wizard の手順表示でも `currentStep` を比較します。
|
|
162
|
+
|
|
163
|
+
```nunjucks
|
|
164
|
+
{% if currentStep == 1 %} is-current{% elif currentStep > 1 %} is-complete{% endif %}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
例: [`wizard-steps.njk`](../../src/sample/components/wizard-steps.njk)
|
|
168
|
+
|
|
169
|
+
## default
|
|
170
|
+
|
|
171
|
+
公式 sample では `default` filter を使っていません。
|
|
172
|
+
Nunjucks 自体の機能として存在しますが、このガイドの代表例には含めません。
|
|
173
|
+
|
|
174
|
+
## Escaping
|
|
175
|
+
|
|
176
|
+
JSKim は環境作成時に次を固定しています。
|
|
177
|
+
|
|
178
|
+
- `autoescape: true`
|
|
179
|
+
- `noCache: true`
|
|
180
|
+
|
|
181
|
+
ユーザーが `jskim.config.js` の `nunjucks` で `autoescape` を切り替える設定はありません。
|
|
182
|
+
`nunjucks` 配下で設定できるのは主に `filters` と `globals` です。
|
|
183
|
+
|
|
184
|
+
> **Warning**
|
|
185
|
+
>
|
|
186
|
+
> 信頼できる HTML だけを意図的に escape 解除したい場合は、
|
|
187
|
+
> filter 側で Nunjucks の `SafeString` を返す方法があります(公式 config の `toJson` 例)。
|
|
188
|
+
> 不特定の入力に対して安易に escape を外さないでください。
|
|
189
|
+
|
|
190
|
+
XSS 対策の包括ガイドは、この章の範囲外です。
|
|
191
|
+
|
|
192
|
+
## rootPath
|
|
193
|
+
|
|
194
|
+
`rootPath` は Nunjucks 固有の組み込み変数ではありません。
|
|
195
|
+
JSKim が各ページの output 位置に応じて注入する予約 context です。
|
|
196
|
+
|
|
197
|
+
| output | `rootPath` |
|
|
198
|
+
| ------ | ---------- |
|
|
199
|
+
| `index.html` | `./` |
|
|
200
|
+
| `dashboard/index.html` | `../` |
|
|
201
|
+
| `crud/detail.html` | `../` |
|
|
202
|
+
|
|
203
|
+
共通 asset の例:
|
|
204
|
+
|
|
205
|
+
```nunjucks
|
|
206
|
+
{{ rootPath }}assets/css/common.css
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
> **Warning**
|
|
210
|
+
>
|
|
211
|
+
> page-local asset には `rootPath` を付けないでください。
|
|
212
|
+
> 詳細と正しい例は [files pipeline](07-files-pipeline.md) を参照してください。
|
|
213
|
+
|
|
214
|
+
`data.rootPath` を設定すると予約語衝突エラーになります。
|
|
215
|
+
|
|
216
|
+
## Config data
|
|
217
|
+
|
|
218
|
+
`jskim.config.js` の `data` は、すべての render page の context に渡されます。
|
|
219
|
+
|
|
220
|
+
```js
|
|
221
|
+
data: {
|
|
222
|
+
site: {
|
|
223
|
+
name: 'JSKim UI Sample',
|
|
224
|
+
language: 'ja',
|
|
225
|
+
themeColor: '#222222',
|
|
226
|
+
},
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
`{{ site.name }}` のように nested object を参照できます。
|
|
231
|
+
|
|
232
|
+
| 種類 | 違い |
|
|
233
|
+
| ---- | ---- |
|
|
234
|
+
| `data` | project 全体で共通。config に書く |
|
|
235
|
+
| `{% set %}` | その page(または template)内の局所値 |
|
|
236
|
+
|
|
237
|
+
設定の詳細は [設定](06-configuration.md) を参照してください。
|
|
238
|
+
|
|
239
|
+
## filters と globals
|
|
240
|
+
|
|
241
|
+
登録場所:
|
|
242
|
+
|
|
243
|
+
```js
|
|
244
|
+
nunjucks: {
|
|
245
|
+
filters: { ... },
|
|
246
|
+
globals: { ... },
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
- filter は **function** である必要があります
|
|
251
|
+
- global は function または通常の値を登録できます
|
|
252
|
+
- 非同期 function はサポートしていません
|
|
253
|
+
|
|
254
|
+
公式 config にはデモ用の `formatPrice` / `toJson` / `currentYear` があります。
|
|
255
|
+
ただし公式 UI sample のページ本文は、これらに依存していません。
|
|
256
|
+
starter project の理解に必須ではありません。
|
|
257
|
+
|
|
258
|
+
## nunjucks 設定でできること
|
|
259
|
+
|
|
260
|
+
現在の schema でユーザーが書く主な key:
|
|
261
|
+
|
|
262
|
+
| path | 内容 |
|
|
263
|
+
| ---- | ---- |
|
|
264
|
+
| `nunjucks.filters` | カスタム filter |
|
|
265
|
+
| `nunjucks.globals` | カスタム global |
|
|
266
|
+
|
|
267
|
+
JSKim が環境作成時に固定する値:
|
|
268
|
+
|
|
269
|
+
| option | 値 |
|
|
270
|
+
| ------ | -- |
|
|
271
|
+
| `autoescape` | `true` |
|
|
272
|
+
| `noCache` | `true`(loader / Environment) |
|
|
273
|
+
|
|
274
|
+
Nunjucks upstream のすべての Environment option が、そのまま config から指定できるわけではありません。
|
|
275
|
+
|
|
276
|
+
## 公式 sample の文法 mapping
|
|
277
|
+
|
|
278
|
+
| 文法 | sample file | 用途 |
|
|
279
|
+
| ---- | ----------- | ---- |
|
|
280
|
+
| `extends` | [`pages/index.html.njk`](../../src/sample/pages/index.html.njk) など | 共通 layout 継承 |
|
|
281
|
+
| `block` | [`layouts/base.njk`](../../src/sample/layouts/base.njk) | `title` / `pageCss` / `content` |
|
|
282
|
+
| `include` | [`layouts/base.njk`](../../src/sample/layouts/base.njk) | header / sidebar / footer など |
|
|
283
|
+
| `set` | [`pages/crud/index.html.njk`](../../src/sample/pages/crud/index.html.njk) | 静的データ・現在セクション |
|
|
284
|
+
| `for` | [`pages/crud/index.html.njk`](../../src/sample/pages/crud/index.html.njk) | 一覧行の繰り返し |
|
|
285
|
+
| `if` | [`pages/crud/index.html.njk`](../../src/sample/pages/crud/index.html.njk) | status badge 分岐 |
|
|
286
|
+
| `include` + `if` | [`components/wizard-steps.njk`](../../src/sample/components/wizard-steps.njk) | Wizard 手順表示 |
|
|
287
|
+
|
|
288
|
+
## この章で扱わない範囲
|
|
289
|
+
|
|
290
|
+
次は公式 sample の範囲外、または別途の高度なトピックです。
|
|
291
|
+
|
|
292
|
+
- macro
|
|
293
|
+
- 非同期 filter
|
|
294
|
+
- custom extension
|
|
295
|
+
- Nunjucks JavaScript API 全体
|
|
296
|
+
- backend での動的 template 実行
|
|
297
|
+
- ブラウザが Nunjucks を実行する方式(build 時に HTML へ展開されます)
|
|
298
|
+
|
|
299
|
+
開発中のエラー表示や reload は [開発機能](09-development-features.md)、
|
|
300
|
+
エラー対処は [エラーとトラブルシュート](10-errors-and-troubleshooting.md) を参照してください。
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# 開発機能
|
|
2
|
+
|
|
3
|
+
この章では、主に `dev` 実行中の開発支援機能を説明します。
|
|
4
|
+
コマンドの選び方は [基本的な開発workflow](04-basic-workflow.md) も参照してください。
|
|
5
|
+
|
|
6
|
+
## dev の構成
|
|
7
|
+
|
|
8
|
+
`dev` は次の順で起動します。
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
config を読み project を解決
|
|
12
|
+
↓
|
|
13
|
+
config 監視を開始
|
|
14
|
+
↓
|
|
15
|
+
live reload を準備
|
|
16
|
+
↓
|
|
17
|
+
静的サーバーを準備
|
|
18
|
+
↓
|
|
19
|
+
初回 build
|
|
20
|
+
↓
|
|
21
|
+
静的サーバーを listen
|
|
22
|
+
↓
|
|
23
|
+
source 監視を開始
|
|
24
|
+
↓
|
|
25
|
+
(--open 指定時)ブラウザを開く
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
| command | build | 監視 | サーバー | live reload |
|
|
29
|
+
| ------- | ----- | ---- | -------- | ----------- |
|
|
30
|
+
| `watch` | する | する | しない | しない |
|
|
31
|
+
| `serve` | しない | しない | する | しない |
|
|
32
|
+
| `dev` | する | する | する | する(既定) |
|
|
33
|
+
|
|
34
|
+
`dev.liveReload` を `false` にすると、live reload 注入と SSE は無効になります。
|
|
35
|
+
|
|
36
|
+
## Live reload
|
|
37
|
+
|
|
38
|
+
`dev` かつ `liveReload: true` のとき、ブラウザは開発サーバーと接続します。
|
|
39
|
+
|
|
40
|
+
- HTML レスポンスにだけクライアント script が注入されます(`dist` には書き込みません)
|
|
41
|
+
- source 変更後の再 build 成功に応じて、ブラウザへ通知します
|
|
42
|
+
- 接続が切れた場合、クライアントは再接続を試みます
|
|
43
|
+
|
|
44
|
+
すべての変更が page 全体の reload になるわけではありません。
|
|
45
|
+
CSS の一部は soft reload になります。
|
|
46
|
+
|
|
47
|
+
内部エンドポイントは `/_jskim/live-reload` です。
|
|
48
|
+
`serve` や `liveReload: false` では利用できません。
|
|
49
|
+
|
|
50
|
+
## Full reload
|
|
51
|
+
|
|
52
|
+
次のような変更では、通常 page 全体を再読み込みします。
|
|
53
|
+
|
|
54
|
+
- HTML / Nunjucks(`.html.njk` など)の変更
|
|
55
|
+
- 画像や JS などの非 CSS 変更
|
|
56
|
+
- layout / component(`templates[]` 配下)の変更
|
|
57
|
+
- CSS でも `add` / `unlink` など `change` 以外のイベント
|
|
58
|
+
- CSS soft reload が失敗したときの fallback
|
|
59
|
+
- config の再読み込み後に成功した再 build(概要)
|
|
60
|
+
|
|
61
|
+
## CSS soft reload
|
|
62
|
+
|
|
63
|
+
条件を満たすとき、page 全体を再読み込みせず、stylesheet だけを差し替えます。
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
CSS soft reload
|
|
67
|
+
→ 現在の page を保ったまま stylesheet を読み直す
|
|
68
|
+
|
|
69
|
+
Full reload
|
|
70
|
+
→ page 全体を読み直す
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 対象になる条件
|
|
74
|
+
|
|
75
|
+
再 build 成功時の変更イベントが **すべて** 次を満たす場合です。
|
|
76
|
+
|
|
77
|
+
- イベント種別が `change`
|
|
78
|
+
- 対象パスの末尾が `.css` または `.css.njk`(大文字小文字を区別しない)
|
|
79
|
+
- `templates[]` 配下ではない
|
|
80
|
+
|
|
81
|
+
公式 sample の page-local CSS(平文 `.css`)も対象になり得ます。
|
|
82
|
+
|
|
83
|
+
### ブラウザ側の制限
|
|
84
|
+
|
|
85
|
+
クライアントは次だけを更新します。
|
|
86
|
+
|
|
87
|
+
- `<link rel="stylesheet">`(`rel` に `stylesheet` を含むもの)
|
|
88
|
+
- **same-origin** の URL
|
|
89
|
+
|
|
90
|
+
次は soft reload の対象外です。
|
|
91
|
+
|
|
92
|
+
- 外部 CDN の stylesheet
|
|
93
|
+
- `<style>` の inline CSS
|
|
94
|
+
- 動的に後から挿入した stylesheet(保証なし)
|
|
95
|
+
- same-origin の stylesheet link が 1 つもない場合 → full reload
|
|
96
|
+
|
|
97
|
+
読み込み失敗やタイムアウト時も full reload にフォールバックします。
|
|
98
|
+
|
|
99
|
+
> **Note**
|
|
100
|
+
>
|
|
101
|
+
> form 入力内容やスクロール位置などの「状態保持」を、
|
|
102
|
+
> あらゆるケースで保証するものではありません。
|
|
103
|
+
|
|
104
|
+
## Browser error overlay
|
|
105
|
+
|
|
106
|
+
template / config / build のエラーを、開発中のブラウザ上に表示できます。
|
|
107
|
+
|
|
108
|
+
主な特徴:
|
|
109
|
+
|
|
110
|
+
- 現在表示中の page の上に重ねて表示
|
|
111
|
+
- Shadow DOM を使い、page の CSS から隔離
|
|
112
|
+
- メッセージはテキストとして表示(タイトルは `JSKim dev error`)
|
|
113
|
+
- `Close` ボタンで一時的に閉じられる
|
|
114
|
+
- エラーが解消され、成功通知を受けると自動で消える
|
|
115
|
+
|
|
116
|
+
stack trace 全体をそのまま出す UI ではありません。
|
|
117
|
+
サーバーが送るメッセージ本文が中心です。
|
|
118
|
+
|
|
119
|
+
## Last error replay
|
|
120
|
+
|
|
121
|
+
ブラウザがエラー発生後に接続した場合や、再接続した直後でも、
|
|
122
|
+
まだエラー状態が残っていれば、サーバーが最後のエラーを再送します。
|
|
123
|
+
|
|
124
|
+
複数のブラウザクライアントが接続している場合、同じ通知を受け取れます。
|
|
125
|
+
|
|
126
|
+
## Recovery
|
|
127
|
+
|
|
128
|
+
エラーを直して再 build が成功すると、おおむね次の流れになります。
|
|
129
|
+
|
|
130
|
+
1. サーバー側のエラー状態が解除される
|
|
131
|
+
2. overlay が消える(`clear-error`)
|
|
132
|
+
3. 変更種別に応じて full reload または CSS soft reload
|
|
133
|
+
|
|
134
|
+
config エラー中は、source 側の成功だけでは overlay を消さない優先順位があります。
|
|
135
|
+
config を直して有効な設定に戻す必要があります。
|
|
136
|
+
|
|
137
|
+
process 自体は、個別の再 build 失敗だけでは終了しません。
|
|
138
|
+
|
|
139
|
+
## Config hot reload
|
|
140
|
+
|
|
141
|
+
| command | `jskim.config.js` を監視するか |
|
|
142
|
+
| ------- | ------------------------------ |
|
|
143
|
+
| `build` | しない |
|
|
144
|
+
| `serve` | しない |
|
|
145
|
+
| `watch` | する |
|
|
146
|
+
| `dev` | する |
|
|
147
|
+
|
|
148
|
+
読み込みや検証に失敗した場合:
|
|
149
|
+
|
|
150
|
+
- 直前まで有効だった設定(last-known-good)を継続
|
|
151
|
+
- terminal にエラーを表示
|
|
152
|
+
- `dev` では browser overlay にも表示できる
|
|
153
|
+
|
|
154
|
+
一時的に設定ファイルが消えた場合も、以前の正常な設定を継続します。
|
|
155
|
+
|
|
156
|
+
成功して再読み込みできた場合は、監視対象を更新し、再 build します。
|
|
157
|
+
|
|
158
|
+
## Restart-required 設定
|
|
159
|
+
|
|
160
|
+
`dev` では、次の値が変わると **process の再起動が必要** です。
|
|
161
|
+
|
|
162
|
+
- `outputDir`
|
|
163
|
+
- `serve.host`
|
|
164
|
+
- `serve.port`
|
|
165
|
+
- `dev.liveReload`
|
|
166
|
+
|
|
167
|
+
この場合、warning を出し、以前の正常な設定を継続します。
|
|
168
|
+
process を自動終了はしません。手動で `dev` を再起動してください。
|
|
169
|
+
|
|
170
|
+
それ以外の多くの設定は、hot reload で反映を試みます。
|
|
171
|
+
|
|
172
|
+
## CLI override の維持
|
|
173
|
+
|
|
174
|
+
例:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
jskim dev sample --host 127.0.0.1 --port 4000 --open
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
- `--host` / `--port` は config hot reload 後も CLI 指定が優先されます
|
|
181
|
+
- `--open` は起動時に **1 回だけ** ブラウザを開きます(reload のたびに開き直しません)
|
|
182
|
+
|
|
183
|
+
## Browser open
|
|
184
|
+
|
|
185
|
+
`dev --open` は、サーバーの listen 成功後に OS の既定ブラウザで URL を開きます。
|
|
186
|
+
|
|
187
|
+
失敗した場合:
|
|
188
|
+
|
|
189
|
+
- warning を出す
|
|
190
|
+
- 開発サーバー自体は継続する
|
|
191
|
+
|
|
192
|
+
手動で次の URL を開けば確認できます(既定時)。
|
|
193
|
+
|
|
194
|
+
```text
|
|
195
|
+
http://127.0.0.1:3000/
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
> **Note**
|
|
199
|
+
>
|
|
200
|
+
> `serve` に `--open` はありません。
|
|
201
|
+
|
|
202
|
+
## Strict CSP について
|
|
203
|
+
|
|
204
|
+
JSKim は live reload 用 script を HTML レスポンスへ注入します。
|
|
205
|
+
overlay は Shadow DOM を使います。
|
|
206
|
+
|
|
207
|
+
Strict な Content-Security-Policy 環境で、注入 script や接続が制限される可能性はあります。
|
|
208
|
+
ただし、現時点の公式 test で CSP ごとの動作を保証してはいません。
|
|
209
|
+
|
|
210
|
+
## 開発機能の選び方
|
|
211
|
+
|
|
212
|
+
| 必要 | 使い方 |
|
|
213
|
+
| ---- | ------ |
|
|
214
|
+
| output だけ継続更新 | `watch` |
|
|
215
|
+
| 既存 `dist` をブラウザで確認 | `serve` |
|
|
216
|
+
| reload 込みの統合開発 | `dev` |
|
|
217
|
+
| 起動時にブラウザを開く | `dev --open` |
|
|
218
|
+
| CSS 変更時に page 全体 reload を減らす | `dev`(条件付き soft reload) |
|
|
219
|
+
|
|
220
|
+
## この章に関連する制限
|
|
221
|
+
|
|
222
|
+
- JavaScript HMR ではありません
|
|
223
|
+
- JS module の実行状態保持は保証しません
|
|
224
|
+
- external / inline stylesheet は soft reload 対象外です
|
|
225
|
+
- browser / OS 環境に依存する部分があります(`--open` など)
|
|
226
|
+
|
|
227
|
+
全体の製品制限事項は [制限事項](14-limitations.md) を参照してください。
|
|
228
|
+
エラー別の対処は [エラーとトラブルシュート](10-errors-and-troubleshooting.md) を参照してください。
|