@ywal123456/jskim 0.1.1 → 0.3.0
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 +113 -145
- package/docs/configuration.md +217 -175
- package/docs/create-jskim.md +22 -7
- package/package.json +1 -1
- package/scripts/commands/dev-command.js +10 -109
- package/scripts/commands/watch-command.js +15 -25
- package/scripts/lib/build-project.js +18 -12
- package/scripts/lib/create-nunjucks-env.js +39 -1
- package/scripts/lib/create-watch-runtime.js +516 -0
- package/scripts/lib/merge-config.js +87 -2
- package/scripts/lib/process-files.js +263 -0
- package/scripts/lib/render-pages.js +17 -1
- package/scripts/lib/resolve-project.js +152 -28
- package/scripts/lib/resolve-watch-paths.js +31 -13
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`
|
|
85
62
|
|
|
86
|
-
##
|
|
63
|
+
## mode selection
|
|
87
64
|
|
|
88
|
-
|
|
65
|
+
JSKim には 2 つの build mode があります。
|
|
89
66
|
|
|
90
|
-
|
|
67
|
+
| mode | 条件 | 用途 |
|
|
68
|
+
|------|------|------|
|
|
69
|
+
| files mode | `files` が空でない配列 | v0.3.0 以降の推奨。Nunjucks と静的ファイルを同じルールで扱う |
|
|
70
|
+
| legacy mode | `files` 未設定、かつ `render` が空でない配列 | 既存の `render` / `copy` 設定を継続する |
|
|
91
71
|
|
|
92
|
-
|
|
72
|
+
同じプロジェクトで `files` と `render` / `copy` は同時に設定できません。files mode を使う場合は `render` / `copy` を空にしてください。legacy mode を使う場合は `files` を設定しないでください。
|
|
93
73
|
|
|
94
|
-
|
|
74
|
+
## sourceDir / outputDir
|
|
95
75
|
|
|
96
|
-
|
|
76
|
+
`sourceDir` はプロジェクトのソースルートです。`outputDir` はビルド結果のルートです。どちらも **ワークスペースルート** 基準の相対パス(または絶対パス)です。
|
|
97
77
|
|
|
98
|
-
|
|
78
|
+
```js
|
|
79
|
+
projects: {
|
|
80
|
+
sample: {
|
|
81
|
+
sourceDir: 'src/sample',
|
|
82
|
+
outputDir: 'dist/sample',
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
```
|
|
99
86
|
|
|
100
|
-
|
|
87
|
+
`serve` は `outputDir` を静的サーバーのルートとして公開します。
|
|
101
88
|
|
|
102
|
-
|
|
89
|
+
## files
|
|
103
90
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
|
107
|
-
|
|
108
|
-
| `
|
|
109
|
-
| `
|
|
91
|
+
files mode の処理ルール配列です。
|
|
92
|
+
|
|
93
|
+
| フィールド | 基準 | 必須 | 説明 |
|
|
94
|
+
|------|------|------|------|
|
|
95
|
+
| `from` | sourceDir | 必須 | 探索開始ディレクトリ |
|
|
96
|
+
| `to` | outputDir | 任意 | 出力基準ディレクトリ。未指定または `''` は出力ルート |
|
|
97
|
+
| `include` | from 基準 | 任意 | glob パターン配列。既定は `['**/*']` |
|
|
98
|
+
| `exclude` | from 基準 | 任意 | 除外 glob パターン配列。既定は `[]` |
|
|
99
|
+
|
|
100
|
+
処理:
|
|
101
|
+
|
|
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,112 +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
|
+
```
|
|
187
|
+
|
|
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
|
|
163
197
|
|
|
164
|
-
|
|
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
|
|
179
221
|
|
|
180
|
-
|
|
181
|
-
- 数値でない
|
|
182
|
-
- `NaN` / `Infinity`
|
|
222
|
+
Nunjucks ファイルを HTML などへレンダリングするルール配列です。
|
|
183
223
|
|
|
184
|
-
|
|
224
|
+
| フィールド | 基準 | 説明 |
|
|
225
|
+
|------|------|------|
|
|
226
|
+
| `from` | sourceDir | 探索開始ディレクトリ |
|
|
227
|
+
| `to` | outputDir | 出力基準ディレクトリ(`''` = 出力ルート) |
|
|
228
|
+
| `include` | from 基準 | glob パターン配列 |
|
|
229
|
+
| `extension` | — | 出力拡張子(例: `.html`) |
|
|
185
230
|
|
|
186
|
-
|
|
231
|
+
legacy render では `pages/index.njk` を `index.html` のように出力する構成が一般的です。
|
|
187
232
|
|
|
188
|
-
|
|
189
|
-
- 設定を変えた場合は watch コマンドを再起動してください
|
|
233
|
+
### copy
|
|
190
234
|
|
|
191
|
-
|
|
235
|
+
静的ファイルを変換せずにコピーするルール配列です。
|
|
192
236
|
|
|
193
|
-
|
|
237
|
+
| フィールド | 基準 | 説明 |
|
|
238
|
+
|------|------|------|
|
|
239
|
+
| `from` | sourceDir | コピー元 |
|
|
240
|
+
| `to` | outputDir | コピー先 |
|
|
194
241
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
242
|
+
`from` が無い場合は警告のみ出してビルドを続行します。
|
|
243
|
+
|
|
244
|
+
## collision
|
|
245
|
+
|
|
246
|
+
files mode では出力パスの衝突を検出します。たとえば同じ `files` 範囲に `about.html` と `about.html.njk` がある場合、どちらも `about.html` に出力されるためエラーになります。Windows では大文字小文字の違いだけの衝突も同じ出力として扱います。
|
|
247
|
+
|
|
248
|
+
## rootPath
|
|
249
|
+
|
|
250
|
+
各 `.njk` ファイルの最終出力位置を基準に `rootPath` が自動計算され、Nunjucks context に注入されます。
|
|
251
|
+
|
|
252
|
+
```njk
|
|
253
|
+
<link rel="stylesheet" href="{{ rootPath }}assets/css/style.css">
|
|
254
|
+
<a href="{{ rootPath }}index.html">Home</a>
|
|
255
|
+
```
|
|
200
256
|
|
|
201
|
-
|
|
257
|
+
| 出力ファイル | rootPath |
|
|
258
|
+
|-----------|----------|
|
|
259
|
+
| `dist/sample/index.html` | `./` |
|
|
260
|
+
| `dist/sample/request/index.html` | `../` |
|
|
261
|
+
| `dist/sample/guide/syntax/index.html` | `../../` |
|
|
202
262
|
|
|
203
|
-
##
|
|
263
|
+
## build.clean
|
|
204
264
|
|
|
205
|
-
|
|
265
|
+
`true` のとき、ビルド前に `outputDir` だけを整理します。
|
|
266
|
+
|
|
267
|
+
次のパスは削除せず、該当すればエラーで終了します。
|
|
268
|
+
|
|
269
|
+
- ファイルシステムルート
|
|
270
|
+
- ワークスペースルート
|
|
271
|
+
- sourceDir 自体
|
|
272
|
+
- sourceDir の上位パス
|
|
273
|
+
- 空のパス
|
|
274
|
+
|
|
275
|
+
## watch.debounce
|
|
276
|
+
|
|
277
|
+
ファイル変更後、全体再ビルドを開始するまでの待ち時間(ms)です。
|
|
206
278
|
|
|
207
279
|
| 項目 | 内容 |
|
|
208
280
|
|------|------|
|
|
209
|
-
| 型 |
|
|
210
|
-
|
|
|
211
|
-
|
|
|
212
|
-
| マージ | `serve` オブジェクトの 1 段階マージ — `serve.port` だけ上書き可能 |
|
|
213
|
-
|
|
214
|
-
プロジェクト別の上書き例:
|
|
281
|
+
| 型 | `number`(有限の非負数) |
|
|
282
|
+
| 既定値 | `150` |
|
|
283
|
+
| マージ | `watch` オブジェクトの 1 段階マージ |
|
|
215
284
|
|
|
216
|
-
|
|
217
|
-
projects: {
|
|
218
|
-
sample: {
|
|
219
|
-
sourceDir: 'src/sample',
|
|
220
|
-
outputDir: 'dist/sample',
|
|
221
|
-
serve: {
|
|
222
|
-
port: 4000,
|
|
223
|
-
},
|
|
224
|
-
},
|
|
225
|
-
},
|
|
226
|
-
```
|
|
285
|
+
不正な値(負数、数値でない、`NaN` / `Infinity`)は設定エラーで終了します。
|
|
227
286
|
|
|
228
|
-
|
|
287
|
+
## serve.host / serve.port
|
|
229
288
|
|
|
230
|
-
|
|
289
|
+
ローカル静的サーバーのバインドホストとポートです。
|
|
231
290
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
1
|
|
235
|
-
|
|
236
|
-
```
|
|
291
|
+
| 設定 | 型 | 既定値 |
|
|
292
|
+
|------|------|------|
|
|
293
|
+
| `serve.host` | 空でない `string` | `'127.0.0.1'` |
|
|
294
|
+
| `serve.port` | `1` 以上 `65535` 以下の整数 | `3000` |
|
|
237
295
|
|
|
238
296
|
`serve` は自動ビルドしません。`outputDir` が無い場合は先に `npm run build -- <name>` を実行してください。
|
|
239
297
|
|
|
@@ -251,7 +309,7 @@ projects: {
|
|
|
251
309
|
|
|
252
310
|
- `GET /_jskim/live-reload` で SSE を提供
|
|
253
311
|
- HTML レスポンスにだけ client script を一時注入(`dist` には書き込まない)
|
|
254
|
-
-
|
|
312
|
+
- 成功した再ビルドのあとだけ `reload` event を送信
|
|
255
313
|
|
|
256
314
|
`false` のとき:
|
|
257
315
|
|
|
@@ -259,64 +317,48 @@ projects: {
|
|
|
259
317
|
- HTML への script 注入なし
|
|
260
318
|
- build + watch + serve 自体は動作
|
|
261
319
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
`dev.liveReload: true` のときだけ有効になる内部 SSE endpoint です。
|
|
320
|
+
`/_jskim/live-reload` は内部予約パスです。プロジェクトの静的ファイルとしては使わないことを推奨します。
|
|
265
321
|
|
|
266
|
-
|
|
267
|
-
- `serve` コマンドでは有効になりません
|
|
268
|
-
- `dev.liveReload: false` では有効になりません
|
|
269
|
-
- パス自体を設定で変更するオプションはありません
|
|
270
|
-
|
|
271
|
-
プロジェクト別の上書き例:
|
|
272
|
-
|
|
273
|
-
```js
|
|
274
|
-
projects: {
|
|
275
|
-
sample: {
|
|
276
|
-
sourceDir: 'src/sample',
|
|
277
|
-
outputDir: 'dist/sample',
|
|
278
|
-
dev: {
|
|
279
|
-
liveReload: false,
|
|
280
|
-
},
|
|
281
|
-
},
|
|
282
|
-
},
|
|
283
|
-
```
|
|
322
|
+
## config hot reload
|
|
284
323
|
|
|
285
|
-
|
|
324
|
+
`watch` と `dev` はワークスペースルートの `jskim.config.js` を監視します。
|
|
286
325
|
|
|
287
|
-
|
|
326
|
+
| コマンド | 動作 |
|
|
327
|
+
|----------|------|
|
|
328
|
+
| `build` | 実行時に config を 1 回読み込む。監視しない |
|
|
329
|
+
| `serve` | 実行時に config を 1 回読み込む。監視しない。変更後は process 再起動が必要 |
|
|
330
|
+
| `watch` | config 変更を hot apply。`outputDir` 変更も可。以前の outputDir は自動削除しない |
|
|
331
|
+
| `dev` | build / watch 関連設定を hot apply。一部 runtime 設定は再起動が必要 |
|
|
288
332
|
|
|
289
|
-
|
|
290
|
-
|------|------|
|
|
291
|
-
| `watch.debounce` | 変更後の再ビルド待ち時間 |
|
|
292
|
-
| `serve.host` | 開発サーバーのホスト |
|
|
293
|
-
| `serve.port` | 開発サーバーのポート |
|
|
294
|
-
| `dev.liveReload` | ライブリロード on/off |
|
|
333
|
+
`dev` では次の値が変わった candidate config は適用しません。
|
|
295
334
|
|
|
296
|
-
|
|
335
|
+
- `outputDir`
|
|
336
|
+
- `serve.host`
|
|
337
|
+
- `serve.port`
|
|
338
|
+
- `dev.liveReload`
|
|
297
339
|
|
|
298
|
-
|
|
340
|
+
理由: server bind と serve root を安全に切り替えるには process 再起動が必要で、部分適用すると build output と serve root がずれるためです。
|
|
299
341
|
|
|
300
342
|
## パス基準のまとめ
|
|
301
343
|
|
|
302
344
|
| 設定 | 基準 |
|
|
303
345
|
|------|------|
|
|
304
346
|
| `sourceDir`, `outputDir` | ワークスペースルート(`jskim.config.js` の場所) |
|
|
305
|
-
| `render[].from`, `templates[]`, `copy[].from` | `sourceDir` |
|
|
306
|
-
| `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` |
|
|
307
350
|
|
|
308
351
|
Windows / POSIX とも `node:path` で解釈します。HTML 内パス(`rootPath` など)は `/` を使います。
|
|
309
352
|
|
|
310
|
-
##
|
|
353
|
+
## マージ規則
|
|
311
354
|
|
|
312
355
|
- **通常値**: プロジェクト設定があれば優先、なければ defaults
|
|
313
|
-
- **オブジェクト**(`build`, `watch`, `serve`, `dev`
|
|
314
|
-
-
|
|
356
|
+
- **オブジェクト**(`build`, `watch`, `serve`, `dev`, `data`, `nunjucks`): 1 段階マージ
|
|
357
|
+
- **`nunjucks.filters` / `nunjucks.globals`**: それぞれ 1 段階マージ
|
|
358
|
+
- **配列**(`files`, `render`, `templates`, `copy`): プロジェクトに同じ配列があれば defaults 配列を丸ごと置き換え。項目単位の自動マージなし
|
|
315
359
|
|
|
316
360
|
元の `defaults` とプロジェクト設定オブジェクトは変更しません。
|
|
317
361
|
|
|
318
362
|
## 外部パス
|
|
319
363
|
|
|
320
|
-
`sourceDir` / `outputDir`
|
|
321
|
-
フレームワークは Git 構成やフォルダ配置を強制しません。
|
|
322
|
-
ただし 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
|
```
|