@ywal123456/jskim 0.2.0 → 0.3.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 +112 -162
- package/docs/configuration.md +204 -207
- package/docs/create-jskim.md +22 -7
- package/package.json +1 -1
- package/scripts/commands/path-display.js +1 -15
- package/scripts/lib/build-project.js +18 -12
- package/scripts/lib/create-nunjucks-env.js +40 -1
- package/scripts/lib/create-project-watcher.js +7 -2
- package/scripts/lib/format-diagnostic.js +234 -0
- package/scripts/lib/load-config.js +6 -4
- package/scripts/lib/merge-config.js +87 -2
- package/scripts/lib/process-files.js +307 -0
- package/scripts/lib/render-pages.js +39 -13
- package/scripts/lib/resolve-project.js +193 -44
- package/scripts/lib/resolve-watch-paths.js +31 -13
- package/scripts/lib/to-display-path.js +28 -0
package/docs/configuration.md
CHANGED
|
@@ -2,50 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
`jskim.config.js` はワークスペースルート(コマンドを実行した `process.cwd()`)に置き、すべてのビルド動作の基準になります。npm パッケージとして入れた場合も、インストール先ではなく実行時のカレントディレクトリをルートとして扱います。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 推奨設定例
|
|
6
6
|
|
|
7
7
|
```js
|
|
8
8
|
module.exports = {
|
|
9
9
|
defaults: {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
files: [{ from: 'pages', to: '' }],
|
|
11
|
+
templates: ['layouts', 'components'],
|
|
12
|
+
data: {
|
|
13
|
+
site: { name: 'JSKim Sample', language: 'ja' },
|
|
14
|
+
},
|
|
15
|
+
nunjucks: {
|
|
16
|
+
filters: {
|
|
17
|
+
formatPrice(value) {
|
|
18
|
+
return `${Number(value).toLocaleString('ja-JP')}円`;
|
|
19
|
+
},
|
|
16
20
|
},
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
'components',
|
|
22
|
-
],
|
|
23
|
-
|
|
24
|
-
copy: [
|
|
25
|
-
{
|
|
26
|
-
from: 'assets',
|
|
27
|
-
to: 'assets',
|
|
21
|
+
globals: {
|
|
22
|
+
currentYear() {
|
|
23
|
+
return new Date().getFullYear();
|
|
24
|
+
},
|
|
28
25
|
},
|
|
29
|
-
],
|
|
30
|
-
|
|
31
|
-
build: {
|
|
32
|
-
clean: true,
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
watch: {
|
|
36
|
-
debounce: 150,
|
|
37
|
-
},
|
|
38
|
-
|
|
39
|
-
serve: {
|
|
40
|
-
host: '127.0.0.1',
|
|
41
|
-
port: 3000,
|
|
42
|
-
},
|
|
43
|
-
|
|
44
|
-
dev: {
|
|
45
|
-
liveReload: true,
|
|
46
26
|
},
|
|
27
|
+
build: { clean: true },
|
|
28
|
+
watch: { debounce: 150 },
|
|
29
|
+
serve: { host: '127.0.0.1', port: 3000 },
|
|
30
|
+
dev: { liveReload: true },
|
|
47
31
|
},
|
|
48
|
-
|
|
49
32
|
projects: {
|
|
50
33
|
sample: {
|
|
51
34
|
sourceDir: 'src/sample',
|
|
@@ -55,15 +38,9 @@ module.exports = {
|
|
|
55
38
|
};
|
|
56
39
|
```
|
|
57
40
|
|
|
58
|
-
## defaults
|
|
59
|
-
|
|
60
|
-
すべてのプロジェクトに共通で適用される既定値です。
|
|
61
|
-
|
|
62
|
-
プロジェクトに同じキーがあれば、プロジェクト側が優先されます。
|
|
41
|
+
## defaults / projects
|
|
63
42
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
プロジェクト名 → 設定オブジェクトのマップです。
|
|
43
|
+
`defaults` はすべてのプロジェクトに共通で適用される既定値です。`projects` はプロジェクト名から設定オブジェクトへのマップです。
|
|
67
44
|
|
|
68
45
|
```bash
|
|
69
46
|
npm run build -- sample
|
|
@@ -81,46 +58,75 @@ npm run dev -- sample
|
|
|
81
58
|
|
|
82
59
|
任意:
|
|
83
60
|
|
|
84
|
-
- `render`, `templates`, `copy`, `build`, `watch`, `serve`, `dev`
|
|
61
|
+
- `files`, `render`, `templates`, `copy`, `data`, `nunjucks`, `build`, `watch`, `serve`, `dev`
|
|
62
|
+
|
|
63
|
+
## mode selection
|
|
85
64
|
|
|
86
|
-
|
|
65
|
+
JSKim には 2 つの build mode があります。
|
|
87
66
|
|
|
88
|
-
|
|
67
|
+
| mode | 条件 | 用途 |
|
|
68
|
+
|------|------|------|
|
|
69
|
+
| files mode | `files` が空でない配列 | v0.3.0 以降の推奨。Nunjucks と静的ファイルを同じルールで扱う |
|
|
70
|
+
| legacy mode | `files` 未設定、かつ `render` が空でない配列 | 既存の `render` / `copy` 設定を継続する |
|
|
71
|
+
|
|
72
|
+
同じプロジェクトで `files` と `render` / `copy` は同時に設定できません。files mode を使う場合は `render` / `copy` を空にしてください。legacy mode を使う場合は `files` を設定しないでください。
|
|
73
|
+
|
|
74
|
+
## sourceDir / outputDir
|
|
89
75
|
|
|
90
|
-
|
|
76
|
+
`sourceDir` はプロジェクトのソースルートです。`outputDir` はビルド結果のルートです。どちらも **ワークスペースルート** 基準の相対パス(または絶対パス)です。
|
|
91
77
|
|
|
92
|
-
|
|
78
|
+
```js
|
|
79
|
+
projects: {
|
|
80
|
+
sample: {
|
|
81
|
+
sourceDir: 'src/sample',
|
|
82
|
+
outputDir: 'dist/sample',
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
```
|
|
93
86
|
|
|
94
|
-
|
|
87
|
+
`serve` は `outputDir` を静的サーバーのルートとして公開します。
|
|
95
88
|
|
|
96
|
-
|
|
89
|
+
## files
|
|
97
90
|
|
|
98
|
-
|
|
91
|
+
files mode の処理ルール配列です。
|
|
99
92
|
|
|
100
|
-
|
|
93
|
+
| フィールド | 基準 | 必須 | 説明 |
|
|
94
|
+
|------|------|------|------|
|
|
95
|
+
| `from` | sourceDir | 必須 | 探索開始ディレクトリ |
|
|
96
|
+
| `to` | outputDir | 任意 | 出力基準ディレクトリ。未指定または `''` は出力ルート |
|
|
97
|
+
| `include` | from 基準 | 任意 | glob パターン配列。既定は `['**/*']` |
|
|
98
|
+
| `exclude` | from 基準 | 任意 | 除外 glob パターン配列。既定は `[]` |
|
|
101
99
|
|
|
102
|
-
|
|
100
|
+
処理:
|
|
103
101
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
| `include` | from 基準 | glob パターン配列 |
|
|
109
|
-
| `extension` | — | 出力拡張子(例: `.html`) |
|
|
102
|
+
- 末尾が `.njk` のファイルは Nunjucks でレンダリングし、末尾の `.njk` だけを外して出力する
|
|
103
|
+
- それ以外のファイルは byte copy する
|
|
104
|
+
- 出力先が同じになるファイルが複数ある場合はエラーにする
|
|
105
|
+
- `templates[]` 配下のファイルは直接出力しない
|
|
110
106
|
|
|
111
107
|
例:
|
|
112
108
|
|
|
113
109
|
```text
|
|
114
|
-
src/sample/pages/index.njk
|
|
115
|
-
src/sample/pages/
|
|
110
|
+
src/sample/pages/index.html.njk → dist/sample/index.html
|
|
111
|
+
src/sample/pages/assets/css/style.css.njk → dist/sample/assets/css/style.css
|
|
112
|
+
src/sample/pages/assets/image/logo.svg → dist/sample/assets/image/logo.svg
|
|
116
113
|
```
|
|
117
114
|
|
|
118
|
-
|
|
115
|
+
推奨命名:
|
|
116
|
+
|
|
117
|
+
- HTML: `index.html.njk`
|
|
118
|
+
- CSS: `style.css.njk`
|
|
119
|
+
- JS: `main.js.njk`
|
|
120
|
+
- Nunjucks 処理しない画像など: `logo.svg`
|
|
119
121
|
|
|
120
122
|
## templates
|
|
121
123
|
|
|
122
124
|
Nunjucks loader の追加検索パスです。**sourceDir** 基準です。
|
|
123
125
|
|
|
126
|
+
```js
|
|
127
|
+
templates: ['layouts', 'components'],
|
|
128
|
+
```
|
|
129
|
+
|
|
124
130
|
`sourceDir` 自体も常に loader root に含まれるため、次が動作します。
|
|
125
131
|
|
|
126
132
|
```njk
|
|
@@ -128,113 +134,164 @@ Nunjucks loader の追加検索パスです。**sourceDir** 基準です。
|
|
|
128
134
|
{% include "components/header.njk" %}
|
|
129
135
|
```
|
|
130
136
|
|
|
131
|
-
|
|
137
|
+
files mode では、`templates` に指定された既存ディレクトリ配下のファイルは直接出力から除外されます。layout / component を `files[].from` の範囲内に置いた場合でも、`templates` として指定しておけば出力対象になりません。
|
|
132
138
|
|
|
133
|
-
|
|
139
|
+
## data
|
|
134
140
|
|
|
135
|
-
|
|
136
|
-
|------|------|------|
|
|
137
|
-
| `from` | sourceDir | コピー元 |
|
|
138
|
-
| `to` | outputDir | コピー先 |
|
|
141
|
+
`data` はすべての Nunjucks レンダリング context に渡される plain object です。
|
|
139
142
|
|
|
140
|
-
|
|
143
|
+
```js
|
|
144
|
+
data: {
|
|
145
|
+
site: {
|
|
146
|
+
name: 'JSKim Sample',
|
|
147
|
+
language: 'ja',
|
|
148
|
+
themeColor: '#222222',
|
|
149
|
+
},
|
|
150
|
+
samplePrice: 12000,
|
|
151
|
+
},
|
|
152
|
+
```
|
|
141
153
|
|
|
142
|
-
|
|
154
|
+
テンプレートでは通常の変数として参照できます。
|
|
143
155
|
|
|
144
|
-
|
|
156
|
+
```njk
|
|
157
|
+
<html lang="{{ site.language }}">
|
|
158
|
+
{{ samplePrice }}
|
|
159
|
+
```
|
|
145
160
|
|
|
146
|
-
|
|
161
|
+
`rootPath` は JSKim が注入する予約キーです。`data.rootPath` は使えません。
|
|
147
162
|
|
|
148
|
-
|
|
149
|
-
- ワークスペースルート
|
|
150
|
-
- sourceDir 自体
|
|
151
|
-
- sourceDir の上位パス
|
|
152
|
-
- 空のパス
|
|
163
|
+
機密情報を `data` に入れると、生成済み HTML / JS / CSS に出力される可能性があります。API key、token、社内 URL などの secret は入れないでください。
|
|
153
164
|
|
|
154
|
-
##
|
|
165
|
+
## nunjucks.filters / nunjucks.globals
|
|
155
166
|
|
|
156
|
-
|
|
167
|
+
Nunjucks のカスタム filter / global を `jskim.config.js` から登録できます。
|
|
157
168
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
169
|
+
```js
|
|
170
|
+
nunjucks: {
|
|
171
|
+
filters: {
|
|
172
|
+
formatPrice(value) {
|
|
173
|
+
return `${Number(value).toLocaleString('ja-JP')}円`;
|
|
174
|
+
},
|
|
175
|
+
toJson(value) {
|
|
176
|
+
const nunjucks = require('nunjucks');
|
|
177
|
+
return new nunjucks.runtime.SafeString(JSON.stringify(value));
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
globals: {
|
|
181
|
+
currentYear() {
|
|
182
|
+
return new Date().getFullYear();
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
```
|
|
163
187
|
|
|
164
|
-
|
|
188
|
+
filter は function である必要があります。global は function 以外の値も登録できます。非同期 filter / global は現在サポートしていません。
|
|
189
|
+
|
|
190
|
+
Nunjucks は `autoescape: true` です。JavaScript テンプレートへ JSON を埋め込む場合は、HTML escape されないよう `SafeString` を返す filter を使ってください。
|
|
191
|
+
|
|
192
|
+
```njk
|
|
193
|
+
const site = {{ site | toJson }};
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## legacy render / copy
|
|
197
|
+
|
|
198
|
+
既存プロジェクト向けに `render` / `copy` は継続サポートします。
|
|
165
199
|
|
|
166
200
|
```js
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
201
|
+
defaults: {
|
|
202
|
+
render: [
|
|
203
|
+
{
|
|
204
|
+
from: 'pages',
|
|
205
|
+
to: '',
|
|
206
|
+
include: ['**/*.njk'],
|
|
207
|
+
extension: '.html',
|
|
173
208
|
},
|
|
174
|
-
|
|
209
|
+
],
|
|
210
|
+
templates: ['layouts', 'components'],
|
|
211
|
+
copy: [
|
|
212
|
+
{
|
|
213
|
+
from: 'assets',
|
|
214
|
+
to: 'assets',
|
|
215
|
+
},
|
|
216
|
+
],
|
|
175
217
|
},
|
|
176
218
|
```
|
|
177
219
|
|
|
178
|
-
|
|
220
|
+
### render
|
|
221
|
+
|
|
222
|
+
Nunjucks ファイルを HTML などへレンダリングするルール配列です。
|
|
223
|
+
|
|
224
|
+
| フィールド | 基準 | 説明 |
|
|
225
|
+
|------|------|------|
|
|
226
|
+
| `from` | sourceDir | 探索開始ディレクトリ |
|
|
227
|
+
| `to` | outputDir | 出力基準ディレクトリ(`''` = 出力ルート) |
|
|
228
|
+
| `include` | from 基準 | glob パターン配列 |
|
|
229
|
+
| `extension` | — | 出力拡張子(例: `.html`) |
|
|
230
|
+
|
|
231
|
+
legacy render では `pages/index.njk` を `index.html` のように出力する構成が一般的です。
|
|
232
|
+
|
|
233
|
+
### copy
|
|
179
234
|
|
|
180
|
-
|
|
181
|
-
- 数値でない
|
|
182
|
-
- `NaN` / `Infinity`
|
|
235
|
+
静的ファイルを変換せずにコピーするルール配列です。
|
|
183
236
|
|
|
184
|
-
|
|
237
|
+
| フィールド | 基準 | 説明 |
|
|
238
|
+
|------|------|------|
|
|
239
|
+
| `from` | sourceDir | コピー元 |
|
|
240
|
+
| `to` | outputDir | コピー先 |
|
|
185
241
|
|
|
186
|
-
|
|
242
|
+
`from` が無い場合は警告のみ出してビルドを続行します。
|
|
187
243
|
|
|
188
|
-
|
|
189
|
-
- 正常な設定変更は監視対象の再構成と全体ビルドに反映されます
|
|
190
|
-
- 設定の読み込み / 検証エラー時は以前の正常な設定を継続します
|
|
244
|
+
## collision
|
|
191
245
|
|
|
192
|
-
|
|
246
|
+
files mode では出力パスの衝突を検出します。たとえば同じ `files` 範囲に `about.html` と `about.html.njk` がある場合、どちらも `about.html` に出力されるためエラーになります。Windows では大文字小文字の違いだけの衝突も同じ出力として扱います。
|
|
193
247
|
|
|
194
|
-
|
|
248
|
+
## rootPath
|
|
195
249
|
|
|
196
|
-
|
|
197
|
-
|------|------|
|
|
198
|
-
| 型 | 空でない `string` |
|
|
199
|
-
| 既定値 | `'127.0.0.1'` |
|
|
200
|
-
| マージ | `serve` オブジェクトの 1 段階マージ |
|
|
250
|
+
各 `.njk` ファイルの最終出力位置を基準に `rootPath` が自動計算され、Nunjucks context に注入されます。
|
|
201
251
|
|
|
202
|
-
|
|
252
|
+
```njk
|
|
253
|
+
<link rel="stylesheet" href="{{ rootPath }}assets/css/style.css">
|
|
254
|
+
<a href="{{ rootPath }}index.html">Home</a>
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
| 出力ファイル | rootPath |
|
|
258
|
+
|-----------|----------|
|
|
259
|
+
| `dist/sample/index.html` | `./` |
|
|
260
|
+
| `dist/sample/request/index.html` | `../` |
|
|
261
|
+
| `dist/sample/guide/syntax/index.html` | `../../` |
|
|
262
|
+
|
|
263
|
+
## build.clean
|
|
264
|
+
|
|
265
|
+
`true` のとき、ビルド前に `outputDir` だけを整理します。
|
|
266
|
+
|
|
267
|
+
次のパスは削除せず、該当すればエラーで終了します。
|
|
268
|
+
|
|
269
|
+
- ファイルシステムルート
|
|
270
|
+
- ワークスペースルート
|
|
271
|
+
- sourceDir 自体
|
|
272
|
+
- sourceDir の上位パス
|
|
273
|
+
- 空のパス
|
|
203
274
|
|
|
204
|
-
##
|
|
275
|
+
## watch.debounce
|
|
205
276
|
|
|
206
|
-
|
|
277
|
+
ファイル変更後、全体再ビルドを開始するまでの待ち時間(ms)です。
|
|
207
278
|
|
|
208
279
|
| 項目 | 内容 |
|
|
209
280
|
|------|------|
|
|
210
|
-
| 型 |
|
|
211
|
-
|
|
|
212
|
-
|
|
|
213
|
-
| マージ | `serve` オブジェクトの 1 段階マージ — `serve.port` だけ上書き可能 |
|
|
281
|
+
| 型 | `number`(有限の非負数) |
|
|
282
|
+
| 既定値 | `150` |
|
|
283
|
+
| マージ | `watch` オブジェクトの 1 段階マージ |
|
|
214
284
|
|
|
215
|
-
|
|
285
|
+
不正な値(負数、数値でない、`NaN` / `Infinity`)は設定エラーで終了します。
|
|
216
286
|
|
|
217
|
-
|
|
218
|
-
projects: {
|
|
219
|
-
sample: {
|
|
220
|
-
sourceDir: 'src/sample',
|
|
221
|
-
outputDir: 'dist/sample',
|
|
222
|
-
serve: {
|
|
223
|
-
port: 4000,
|
|
224
|
-
},
|
|
225
|
-
},
|
|
226
|
-
},
|
|
227
|
-
```
|
|
287
|
+
## serve.host / serve.port
|
|
228
288
|
|
|
229
|
-
|
|
289
|
+
ローカル静的サーバーのバインドホストとポートです。
|
|
230
290
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
1から65535までの整数を指定してください。
|
|
236
|
-
受け取った値: -1
|
|
237
|
-
```
|
|
291
|
+
| 設定 | 型 | 既定値 |
|
|
292
|
+
|------|------|------|
|
|
293
|
+
| `serve.host` | 空でない `string` | `'127.0.0.1'` |
|
|
294
|
+
| `serve.port` | `1` 以上 `65535` 以下の整数 | `3000` |
|
|
238
295
|
|
|
239
296
|
`serve` は自動ビルドしません。`outputDir` が無い場合は先に `npm run build -- <name>` を実行してください。
|
|
240
297
|
|
|
@@ -252,7 +309,7 @@ projects: {
|
|
|
252
309
|
|
|
253
310
|
- `GET /_jskim/live-reload` で SSE を提供
|
|
254
311
|
- HTML レスポンスにだけ client script を一時注入(`dist` には書き込まない)
|
|
255
|
-
-
|
|
312
|
+
- 成功した再ビルドのあとだけ `reload` event を送信
|
|
256
313
|
|
|
257
314
|
`false` のとき:
|
|
258
315
|
|
|
@@ -260,48 +317,12 @@ projects: {
|
|
|
260
317
|
- HTML への script 注入なし
|
|
261
318
|
- build + watch + serve 自体は動作
|
|
262
319
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
`dev.liveReload: true` のときだけ有効になる内部 SSE endpoint です。
|
|
266
|
-
|
|
267
|
-
- JSKim が予約するパスであり、プロジェクトの静的ファイルとしては使わないことを推奨します
|
|
268
|
-
- `serve` コマンドでは有効になりません
|
|
269
|
-
- `dev.liveReload: false` では有効になりません
|
|
270
|
-
- パス自体を設定で変更するオプションはありません
|
|
271
|
-
|
|
272
|
-
プロジェクト別の上書き例:
|
|
273
|
-
|
|
274
|
-
```js
|
|
275
|
-
projects: {
|
|
276
|
-
sample: {
|
|
277
|
-
sourceDir: 'src/sample',
|
|
278
|
-
outputDir: 'dist/sample',
|
|
279
|
-
dev: {
|
|
280
|
-
liveReload: false,
|
|
281
|
-
},
|
|
282
|
-
},
|
|
283
|
-
},
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
不正な値(boolean 以外)は設定エラーで終了します。
|
|
287
|
-
|
|
288
|
-
### dev が再利用する設定
|
|
289
|
-
|
|
290
|
-
| 設定 | 用途 |
|
|
291
|
-
|------|------|
|
|
292
|
-
| `watch.debounce` | 変更後の再ビルド待ち時間 |
|
|
293
|
-
| `serve.host` | 開発サーバーのホスト |
|
|
294
|
-
| `serve.port` | 開発サーバーのポート |
|
|
295
|
-
| `dev.liveReload` | ライブリロード on/off |
|
|
296
|
-
|
|
297
|
-
`dev.host` / `dev.port` / `dev.debounce` は用意しません。
|
|
320
|
+
`/_jskim/live-reload` は内部予約パスです。プロジェクトの静的ファイルとしては使わないことを推奨します。
|
|
298
321
|
|
|
299
322
|
## config hot reload
|
|
300
323
|
|
|
301
324
|
`watch` と `dev` はワークスペースルートの `jskim.config.js` を監視します。
|
|
302
325
|
|
|
303
|
-
### コマンド別
|
|
304
|
-
|
|
305
326
|
| コマンド | 動作 |
|
|
306
327
|
|----------|------|
|
|
307
328
|
| `build` | 実行時に config を 1 回読み込む。監視しない |
|
|
@@ -309,25 +330,7 @@ projects: {
|
|
|
309
330
|
| `watch` | config 変更を hot apply。`outputDir` 変更も可。以前の outputDir は自動削除しない |
|
|
310
331
|
| `dev` | build / watch 関連設定を hot apply。一部 runtime 設定は再起動が必要 |
|
|
311
332
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
1. config 変更を検知
|
|
315
|
-
2. fresh load(CommonJS require cache を `jskim.config.js` について削除)
|
|
316
|
-
3. merge / project resolve / validation
|
|
317
|
-
4. watcher 再構成
|
|
318
|
-
5. 全体ビルド
|
|
319
|
-
|
|
320
|
-
### エラー時
|
|
321
|
-
|
|
322
|
-
| 状況 | 動作 |
|
|
323
|
-
|------|------|
|
|
324
|
-
| config load / resolve / validation エラー | 以前の正常な設定を維持。process は終了しない |
|
|
325
|
-
| 新しい設定適用後の build エラー | 新しい設定 / watcher を維持。process は終了しない。修正後に再試行 |
|
|
326
|
-
| config 一時削除(unlink) | 以前の設定を継続。再作成後に reload |
|
|
327
|
-
|
|
328
|
-
### `dev` で再起動が必要な設定
|
|
329
|
-
|
|
330
|
-
次の値が変わった candidate config は適用しません。
|
|
333
|
+
`dev` では次の値が変わった candidate config は適用しません。
|
|
331
334
|
|
|
332
335
|
- `outputDir`
|
|
333
336
|
- `serve.host`
|
|
@@ -336,32 +339,26 @@ projects: {
|
|
|
336
339
|
|
|
337
340
|
理由: server bind と serve root を安全に切り替えるには process 再起動が必要で、部分適用すると build output と serve root がずれるためです。
|
|
338
341
|
|
|
339
|
-
### 制限
|
|
340
|
-
|
|
341
|
-
- config hot reload は常に **全体ビルド** です(増分 build ではありません)
|
|
342
|
-
- `jskim.config.js` が require した別 helper module だけの変更は自動反映しません。config を保存し直すか process を再起動してください
|
|
343
|
-
- `node_modules` や JSKim package 自身の require cache は一括削除しません
|
|
344
|
-
|
|
345
342
|
## パス基準のまとめ
|
|
346
343
|
|
|
347
344
|
| 設定 | 基準 |
|
|
348
345
|
|------|------|
|
|
349
346
|
| `sourceDir`, `outputDir` | ワークスペースルート(`jskim.config.js` の場所) |
|
|
350
|
-
| `render[].from`, `templates[]`, `copy[].from` | `sourceDir` |
|
|
351
|
-
| `render[].to`, `copy[].to` | `outputDir` |
|
|
347
|
+
| `files[].from`, `render[].from`, `templates[]`, `copy[].from` | `sourceDir` |
|
|
348
|
+
| `files[].to`, `render[].to`, `copy[].to` | `outputDir` |
|
|
349
|
+
| `files[].include`, `files[].exclude`, `render[].include` | 各 `from` |
|
|
352
350
|
|
|
353
351
|
Windows / POSIX とも `node:path` で解釈します。HTML 内パス(`rootPath` など)は `/` を使います。
|
|
354
352
|
|
|
355
|
-
##
|
|
353
|
+
## マージ規則
|
|
356
354
|
|
|
357
355
|
- **通常値**: プロジェクト設定があれば優先、なければ defaults
|
|
358
|
-
- **オブジェクト**(`build`, `watch`, `serve`, `dev`
|
|
359
|
-
-
|
|
356
|
+
- **オブジェクト**(`build`, `watch`, `serve`, `dev`, `data`, `nunjucks`): 1 段階マージ
|
|
357
|
+
- **`nunjucks.filters` / `nunjucks.globals`**: それぞれ 1 段階マージ
|
|
358
|
+
- **配列**(`files`, `render`, `templates`, `copy`): プロジェクトに同じ配列があれば defaults 配列を丸ごと置き換え。項目単位の自動マージなし
|
|
360
359
|
|
|
361
360
|
元の `defaults` とプロジェクト設定オブジェクトは変更しません。
|
|
362
361
|
|
|
363
362
|
## 外部パス
|
|
364
363
|
|
|
365
|
-
`sourceDir` / `outputDir`
|
|
366
|
-
フレームワークは Git 構成やフォルダ配置を強制しません。
|
|
367
|
-
ただし clean の安全装置(上記)は常に適用されます。
|
|
364
|
+
`sourceDir` / `outputDir` にワークスペース外のパスを使うことは禁止しません。フレームワークは Git 構成やフォルダ配置を強制しません。ただし clean の安全装置は常に適用されます。
|
package/docs/create-jskim.md
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
## 役割
|
|
8
8
|
|
|
9
9
|
- 新しい JSKim プロジェクトディレクトリを作る
|
|
10
|
-
-
|
|
11
|
-
- 生成後の `npm install` / `git init`
|
|
10
|
+
- files pipeline 版の標準 `src/sample` と `jskim.config.js` を含める
|
|
11
|
+
- 生成後の `npm install` / `git init` は実行しない
|
|
12
12
|
|
|
13
13
|
## 名称の区別
|
|
14
14
|
|
|
@@ -35,16 +35,31 @@ project/
|
|
|
35
35
|
├─ jskim.config.js
|
|
36
36
|
├─ README.md
|
|
37
37
|
├─ .gitignore
|
|
38
|
-
└─ src/
|
|
38
|
+
└─ src/
|
|
39
|
+
└─ sample/
|
|
40
|
+
├─ pages/
|
|
41
|
+
│ ├─ index.html.njk
|
|
42
|
+
│ ├─ assets/
|
|
43
|
+
│ │ ├─ css/style.css.njk
|
|
44
|
+
│ │ ├─ js/main.js.njk
|
|
45
|
+
│ │ └─ image/logo.svg
|
|
46
|
+
│ └─ request/
|
|
47
|
+
│ ├─ index.html.njk
|
|
48
|
+
│ └─ assets/
|
|
49
|
+
├─ layouts/base.njk
|
|
50
|
+
└─ components/
|
|
51
|
+
├─ header.njk
|
|
52
|
+
└─ footer.njk
|
|
39
53
|
```
|
|
40
54
|
|
|
41
|
-
`
|
|
42
|
-
|
|
55
|
+
`jskim.config.js` は `files: [{ from: 'pages', to: '' }]` を使います。`.njk` は末尾の `.njk` だけを外してレンダリングし、画像などはそのままコピーします。
|
|
56
|
+
|
|
57
|
+
`package.json` の scripts は bin 名 `jskim` を使います(package name ではありません)。既定の engine dependency は `@ywal123456/jskim`(`^0.3.0`)です。
|
|
43
58
|
|
|
44
59
|
```json
|
|
45
60
|
{
|
|
46
61
|
"devDependencies": {
|
|
47
|
-
"@ywal123456/jskim": "^0.
|
|
62
|
+
"@ywal123456/jskim": "^0.3.0"
|
|
48
63
|
},
|
|
49
64
|
"scripts": {
|
|
50
65
|
"build": "jskim build sample",
|
|
@@ -70,7 +85,7 @@ create package の `package.json` に `jskimEngine` metadata を持ち、生成
|
|
|
70
85
|
{
|
|
71
86
|
"jskimEngine": {
|
|
72
87
|
"packageName": "@ywal123456/jskim",
|
|
73
|
-
"version": "^0.
|
|
88
|
+
"version": "^0.3.0"
|
|
74
89
|
}
|
|
75
90
|
}
|
|
76
91
|
```
|
package/package.json
CHANGED
|
@@ -1,20 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* ワークスペース相対の表示用パスへ変換します。
|
|
7
|
-
* @param {string} abs
|
|
8
|
-
* @param {string} workspaceRoot
|
|
9
|
-
* @returns {string}
|
|
10
|
-
*/
|
|
11
|
-
function toDisplayPath(abs, workspaceRoot) {
|
|
12
|
-
const rel = path.relative(workspaceRoot, abs);
|
|
13
|
-
if (!rel || rel.startsWith('..') || path.isAbsolute(rel)) {
|
|
14
|
-
return abs.split(path.sep).join('/');
|
|
15
|
-
}
|
|
16
|
-
return rel.split(path.sep).join('/');
|
|
17
|
-
}
|
|
3
|
+
const { toDisplayPath } = require('../lib/to-display-path');
|
|
18
4
|
|
|
19
5
|
module.exports = {
|
|
20
6
|
toDisplayPath,
|