@ywal123456/jskim 0.2.0 → 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 CHANGED
@@ -2,18 +2,15 @@
2
2
 
3
3
  Nunjucks を使った汎用の静的 HTML ビルド環境です。
4
4
 
5
- 特定のアプリ構成、業務ロジック、CSS/JS 設計、Git 運用、デプロイ基盤を強制しません。
6
- Nunjucks ソースを設定に従って静的 HTML にレンダリングし、assets をコピーして配布可能な結果を作ります。
5
+ 特定のアプリ構成、業務ロジック、CSS/JS 設計、Git 運用、デプロイ基盤を強制しません。`jskim.config.js` に従ってソースを処理し、配布可能な静的ファイルを `outputDir` に生成します。
7
6
 
8
7
  ## 現在の対応範囲
9
8
 
10
- - `jskim.config.js` による設定
11
- - defaults とプロジェクト設定のマージ
12
- - Nunjucks ページのレンダリング
13
- - 静的ファイルのコピー
14
- - outputDir の clean
9
+ - `files` pipeline による Nunjucks レンダリングと静的ファイルコピー
10
+ - legacy `render` / `copy` 設定の継続サポート
11
+ - `data`、Nunjucks `filters` / `globals`
15
12
  - `rootPath` の自動注入
16
- - プロジェクトごとの出力分離
13
+ - outputDir の clean
17
14
  - ファイル監視(`watch`)後の全体再ビルド
18
15
  - ビルド結果のローカル静的サーバー(`serve`)
19
16
  - 開発サーバー(`dev` = build + watch + serve)
@@ -25,14 +22,13 @@ Nunjucks ソースを設定に従って静的 HTML にレンダリングし、as
25
22
 
26
23
  - ブラウザ自動起動
27
24
  - HMR / CSS だけのホット更新
28
- - JSON データの自動読み込み
25
+ - JSON / YAML などの外部データファイル自動読み込み
29
26
  - API / Mock API
30
27
  - 増分ビルド
31
28
  - SPA fallback / proxy
29
+ - formatter 機能
32
30
 
33
- 既存 HTML の自動 import / migration は JSKim core の責任範囲外です。
34
- 既存 source の移行は利用者が project に合わせて行います。
35
- 将来必要になった場合も、JSKim 本体ではなく独立した tool / package として検討します。
31
+ 既存 HTML の自動 import / migration は JSKim core の責任範囲外です。既存 source の移行は利用者が project に合わせて行います。将来必要になった場合も、JSKim 本体ではなく独立した tool / package として検討します。
36
32
 
37
33
  ## パッケージの役割
38
34
 
@@ -48,6 +44,7 @@ Nunjucks ソースを設定に従って静的 HTML にレンダリングし、as
48
44
 
49
45
  詳細:
50
46
 
47
+ - [docs/configuration.md](docs/configuration.md)
51
48
  - [docs/create-jskim.md](docs/create-jskim.md)
52
49
  - [docs/publishing.md](docs/publishing.md)(maintainer 向け release 手順)
53
50
 
@@ -69,6 +66,8 @@ npm create jskim@latest
69
66
  npx create-jskim my-project
70
67
  ```
71
68
 
69
+ 生成器は自動で `npm install` / `git init` を実行しません。空ではない既存ディレクトリも上書きしません。
70
+
72
71
  ## CLI
73
72
 
74
73
  ```bash
@@ -93,8 +92,6 @@ jskim dev <project>
93
92
 
94
93
  要点:
95
94
 
96
- - npm package 名は `@ywal123456/jskim`(scoped)
97
- - インストール後の CLI binary 名は `jskim`
98
95
  - コマンドは実行したディレクトリの `process.cwd()` をプロジェクトルートとして扱う
99
96
  - パッケージのインストール先(`node_modules/@ywal123456/jskim`)を作業空間とはみなさない
100
97
  - プロジェクトルートに `jskim.config.js` が必要
@@ -106,44 +103,89 @@ jskim --help
106
103
  jskim --version
107
104
  ```
108
105
 
109
- ## プロジェクト生成(create-jskim)
110
-
111
- ```bash
112
- npm create jskim@latest
113
- # または
114
- npx create-jskim my-project
106
+ ## files pipeline
107
+
108
+ v0.3.0 以降の推奨設定は `files` です。`files[].from` 配下を走査し、末尾が `.njk` のファイルは Nunjucks でレンダリングして末尾の `.njk` だけを外します。それ以外のファイルは byte copy します。
109
+
110
+ ```js
111
+ module.exports = {
112
+ defaults: {
113
+ files: [{ from: 'pages', to: '' }],
114
+ templates: ['layouts', 'components'],
115
+ },
116
+ projects: {
117
+ sample: {
118
+ sourceDir: 'src/sample',
119
+ outputDir: 'dist/sample',
120
+ },
121
+ },
122
+ };
115
123
  ```
116
124
 
117
- ```bash
118
- cd my-project
119
- npm install
120
- npm run dev
125
+ 例:
126
+
127
+ ```text
128
+ src/sample/pages/index.html.njk → dist/sample/index.html
129
+ src/sample/pages/assets/css/style.css.njk → dist/sample/assets/css/style.css
130
+ src/sample/pages/assets/image/logo.svg → dist/sample/assets/image/logo.svg
121
131
  ```
122
132
 
123
- - 自動で `npm install` / `git init` は実行しません
124
- - 空ではない既存ディレクトリは上書きしません
133
+ 推奨命名:
125
134
 
126
- ## このリポジトリでの開発コマンド
135
+ - HTML は `index.html.njk`、`request/index.html.njk` のように最終拡張子を含める
136
+ - CSS / JS を Nunjucks で処理する場合は `style.css.njk`、`main.js.njk` のように書く
137
+ - 画像などテンプレート処理しないファイルは通常の拡張子のまま置く
127
138
 
128
- 開発リポジトリでは従来どおり `npm run` も使えます。
139
+ `templates` に指定した `layouts` / `components` は loader の検索パスになり、直接出力されません。
129
140
 
130
- ## インストール(開発リポジトリ)
141
+ legacy の `render` / `copy` も引き続き使えます。ただし同じプロジェクトで `files` と `render` / `copy` は同時に設定できません。詳細は [docs/configuration.md](docs/configuration.md) を参照してください。
131
142
 
132
- ```bash
133
- npm install
143
+ ## data / filters / globals
144
+
145
+ `defaults.data` と project の `data` はテンプレート context に渡されます。Nunjucks の filter / global も `jskim.config.js` から登録できます。
146
+
147
+ ```js
148
+ data: {
149
+ site: { name: 'JSKim Sample', language: 'ja' },
150
+ },
151
+ nunjucks: {
152
+ filters: {
153
+ formatPrice(value) {
154
+ return `${Number(value).toLocaleString('ja-JP')}円`;
155
+ },
156
+ },
157
+ globals: {
158
+ currentYear() {
159
+ return new Date().getFullYear();
160
+ },
161
+ },
162
+ },
163
+ ```
164
+
165
+ Nunjucks は `autoescape: true` です。JavaScript に JSON を埋め込む filter は `nunjucks.runtime.SafeString` を返してください。
166
+
167
+ ```js
168
+ toJson(value) {
169
+ const nunjucks = require('nunjucks');
170
+ return new nunjucks.runtime.SafeString(JSON.stringify(value));
171
+ }
134
172
  ```
135
173
 
136
- ## ビルド
174
+ 機密情報を `data` やテンプレートへ入れると、生成済み HTML / JS / CSS に含まれる可能性があります。API key、token、社内 URL などの secret は公開成果物に混入しないよう確認してください。
175
+
176
+ ## このリポジトリでの開発コマンド
177
+
178
+ 開発リポジトリでは従来どおり `npm run` も使えます。
137
179
 
138
180
  ```bash
181
+ npm install
139
182
  npm run build -- sample
140
- # または(インストール済み binary)
141
- jskim build sample
183
+ npm run dev -- sample
142
184
  ```
143
185
 
144
186
  `sample` は `jskim.config.js` の `projects` に登録されたプロジェクト名です。
145
187
 
146
- ## ウォッチ
188
+ ## watch
147
189
 
148
190
  ```bash
149
191
  npm run watch -- sample
@@ -158,168 +200,68 @@ jskim watch sample
158
200
  3. 変更検知後、debounce して全体ビルドを再実行
159
201
  4. ビルドエラーがあってもウォッチャーは維持し、次の保存で再試行
160
202
 
161
- ### 監視対象
162
-
163
- マージ済みプロジェクト設定から計算します。
164
-
165
- - `sourceDir` + `render[].from`(例: `src/sample/pages`)
166
- - `sourceDir` + `templates[]`(例: `src/sample/layouts`, `src/sample/components`)
167
- - `sourceDir` + `copy[].from`(例: `src/sample/assets`)
168
-
169
- `dist/`、`node_modules/`、`outputDir` は監視しません。
170
-
171
- ### 現在の方針
203
+ 監視対象はマージ済みプロジェクト設定から計算します。
172
204
 
173
- - 関連する変更はすべて **全体ビルド** です(増分 render / 単一 asset copy なし)。
174
- - `build.clean: true` のとき、再ビルドで outputDir を消して作り直すため、ソース削除も結果に反映されます。
175
- - `jskim.config.js` の変更は **watch / dev が検知** し、正常なら監視対象を更新して全体ビルドします。
176
- - 設定の読み込み / 検証に失敗しても process は終了せず、以前の正常な設定を継続します。
177
- - `serve` は config を監視しません。設定変更後は serve process の再起動が必要です。
178
- - 終了: `Ctrl+C`(SIGINT)または SIGTERM → `[JSKim] ウォッチを停止しました。`
205
+ - files mode: `sourceDir` + `files[].from`、`sourceDir` + `templates[]`
206
+ - legacy mode: `sourceDir` + `render[].from`、`sourceDir` + `templates[]`、`sourceDir` + `copy[].from`
207
+ - `dist/`、`node_modules/`、`outputDir` は監視しません
179
208
 
180
- #### config hot reload(watch / dev
209
+ `watch` / `dev` は `jskim.config.js` の変更を検知し、正常なら監視対象を更新して全体ビルドします。`dev` `outputDir` / `serve.host` / `serve.port` / `dev.liveReload` を変えた場合は process 再起動が必要です。
181
210
 
182
- - 対象ファイル: ワークスペースルートの `jskim.config.js`
183
- - 正常な変更: watcher 再構成 → 全体ビルド
184
- - 不正な設定: 以前の正常な設定を維持し、修正後に自動で再試行
185
- - `watch` では `outputDir` 変更も適用できます(以前の outputDir は自動削除しません)
186
- - `dev` では次の変更は process 再起動が必要です:
187
- - `outputDir`
188
- - `serve.host`
189
- - `serve.port`
190
- - `dev.liveReload`
191
- - `dev` で対応できる設定変更が成功し、build も成功した場合だけ browser reload を 1 回送ります
211
+ ## serve / dev
192
212
 
193
- debounce の既定値は `watch.debounce: 150`(ms)で、プロジェクトごとに上書きできます。詳細は [docs/configuration.md](docs/configuration.md) を参照してください。
194
-
195
- ## 静的サーバー(serve)
213
+ `serve` **すでにビルドされた** `outputDir` をローカルで確認するためのコマンドです。
196
214
 
197
215
  ```bash
198
216
  npm run build -- sample
199
217
  npm run serve -- sample
200
- # または
201
- jskim build sample
202
- jskim serve sample
203
- ```
204
-
205
- `serve` は **すでにビルドされた** `outputDir` をローカルで確認するためのコマンドです。
206
-
207
- - 自動で build / watch は実行しません
208
- - サーバールートは `outputDir`(例: `dist/sample`)
209
- - 対応 HTTP メソッドは `GET` と `HEAD` のみ
210
- - ライブリロードはありません(HTML を変換しません)
211
- - ローカル確認用です(本番サーバー機能ではありません)
212
-
213
- 既定の接続先:
214
-
215
- ```text
216
- http://127.0.0.1:3000/
217
218
  ```
218
219
 
219
- `host` / `port` `jskim.config.js` `serve` で変更できます。
220
-
221
- `outputDir` が無い場合は、先に build するよう案内して終了します。
222
-
223
- 終了: `Ctrl+C` → `[JSKim] 静的サーバーを停止しました。`
224
-
225
- ## 開発サーバー(dev)
220
+ `dev` build + watch + serve を統合します。
226
221
 
227
222
  ```bash
228
223
  npm run dev -- sample
229
- # または
230
- jskim dev sample
231
224
  ```
232
225
 
233
- `dev` は次を統合します。
234
-
235
- 1. 初回に全体ビルド
236
- 2. 実際の `outputDir`(`dist`)を静的サーバーで提供
237
- 3. ファイル監視と全体再ビルド(`watch` と同じ debounce / 直列化)
238
- 4. **成功した再ビルドのあとだけ** ブラウザを全体リロード(SSE)
239
-
240
- ポイント:
241
-
242
- - メモリ専用レンダリングではなく、常に実際の `dist` を提供します
243
- - ライブリロードは HMR ではなく **ページ全体の reload** です
244
- - `dist` ファイルへ script を書き込みません。dev の HTML レスポンスにだけ一時注入します
245
- - ビルドエラー時も watcher / server は維持し、reload は送りません
246
- - ブラウザ自動起動はサポートしません
247
- - `watch.debounce` / `serve.host` / `serve.port` / `dev.liveReload` を使います
248
-
249
226
  既定 URL:
250
227
 
251
228
  ```text
252
229
  http://127.0.0.1:3000/
253
230
  ```
254
231
 
255
- `dev.liveReload: false` にすると SSE endpoint と script 注入を無効化できます。
256
-
257
- `jskim.config.js` の build / watch 関連設定は hot reload されます。
258
- `outputDir` / `serve.host` / `serve.port` / `dev.liveReload` を変えた場合は `dev` を再起動してください。
259
-
260
- 終了: `Ctrl+C` → `[JSKim] 開発サーバーを停止しました。`
261
-
262
- ### 予約パス `/_jskim/live-reload`
263
-
264
- `dev.liveReload: true` のとき、JSKim が内部で使う予約パスです。
265
-
266
- - 実際の静的ファイルパスとして使わないことを推奨します
267
- - `serve` ではこの endpoint は有効になりません
268
- - `dev.liveReload: false` のときも有効になりません
269
-
270
- ## テスト
271
-
272
- ```bash
273
- npm test
274
- ```
232
+ ポイント:
275
233
 
276
- Node 標準の `node:test` / `node:assert` を使います。外部テスト framework は使いません。
234
+ - `serve` は自動で build / watch を実行しません
235
+ - サーバールートは `outputDir`(例: `dist/sample`)
236
+ - `serve` は HTML を変換せず、ライブリロード script を注入しません
237
+ - `dev` は成功した再ビルドのあとだけ SSE でページ全体 reload を送ります
238
+ - `dev` でも `dist` ファイルへ script は書き込みません
239
+ - ブラウザ自動起動はサポートしません
277
240
 
278
- - 実際の `src/sample` `dist/sample` は変更しません
279
- - 各テストは一時ワークスペース(`os.tmpdir`)で実行します
280
- - build / watch / serve / dev / 言語ポリシーの回帰を検証します
241
+ `/_jskim/live-reload` `dev.liveReload: true` のときだけ使う内部予約パスです。実際の静的ファイルパスとしては使わないことを推奨します。
281
242
 
282
243
  ## 基本ディレクトリ構成
283
244
 
284
245
  ```text
285
246
  jskim/
286
247
  ├─ bin/
287
- │ └─ jskim.js
288
248
  ├─ jskim.config.js
289
249
  ├─ scripts/
290
- │ ├─ build.js
291
- │ ├─ watch.js
292
- │ ├─ serve.js
293
- │ ├─ dev.js
294
- │ └─ commands/
295
250
  ├─ src/
296
251
  │ └─ sample/
297
252
  │ ├─ pages/
253
+ │ │ ├─ index.html.njk
254
+ │ │ ├─ assets/
255
+ │ │ └─ request/
298
256
  │ ├─ layouts/
299
- ├─ components/
300
- │ └─ assets/
257
+ └─ components/
301
258
  └─ dist/
302
259
  └─ sample/
303
260
  ```
304
261
 
305
- ## jskim.config.js の役割
306
-
307
- コマンドを実行したディレクトリ(`process.cwd()`)をワークスペースルートとし、そこに置いた `jskim.config.js` がビルド動作の基準です。
308
-
309
- - `defaults`: 全プロジェクト共通の render / templates / copy / build / watch / serve / dev
310
- - `projects`: プロジェクトごとの `sourceDir`、`outputDir`、および任意の上書き
311
-
312
- 詳細は [docs/configuration.md](docs/configuration.md) を参照してください。
313
-
314
- ## src と dist の関係
315
-
316
- - `sourceDir`(例: `src/sample`)に Nunjucks ソースと assets を置きます
317
- - `outputDir`(例: `dist/sample`)にレンダリング済み HTML とコピーされた静的ファイルが生成されます
318
- - `dist/` はビルド成果物なので手編集しないでください
319
-
320
262
  ## rootPath の使い方
321
263
 
322
- 各ページの最終出力位置を基準に `rootPath` が自動計算され、Nunjucks context に注入されます。
264
+ `.njk` ファイルの最終出力位置を基準に `rootPath` が自動計算され、Nunjucks context に注入されます。
323
265
 
324
266
  ```njk
325
267
  <link rel="stylesheet" href="{{ rootPath }}assets/css/style.css">
@@ -329,12 +271,14 @@ jskim/
329
271
  | 出力ファイル | rootPath |
330
272
  |-----------|----------|
331
273
  | `dist/sample/index.html` | `./` |
332
- | `dist/sample/guide/basic.html` | `../` |
333
- | `dist/sample/guide/syntax/loop.html` | `../../` |
274
+ | `dist/sample/request/index.html` | `../` |
275
+ | `dist/sample/guide/syntax/index.html` | `../../` |
276
+
277
+ `data.rootPath` は予約語のため使えません。
334
278
 
335
279
  ## sample
336
280
 
337
- `src/sample` は JSKim の紹介と Nunjucks 構文例を含む技術ドキュメント型の単一ページです。
281
+ `src/sample` は files pipeline、`data`、custom filter、global、ページ別 assets を示す小さなサンプルです。
338
282
 
339
283
  ```bash
340
284
  npm run build -- sample
@@ -345,6 +289,14 @@ npm run dev -- sample
345
289
 
346
290
  ビルド後、`dist/sample/index.html` または `http://127.0.0.1:3000/` で確認できます。
347
291
 
292
+ ## テスト
293
+
294
+ ```bash
295
+ npm test
296
+ ```
297
+
298
+ Node 標準の `node:test` / `node:assert` を使います。外部テスト framework は使いません。
299
+
348
300
  ## リポジトリ
349
301
 
350
302
  - Repository: https://github.com/ywal123456-collab/jskim
@@ -352,6 +304,4 @@ npm run dev -- sample
352
304
 
353
305
  ## ライセンス
354
306
 
355
- JSKim は MIT License のもとで提供されます。
356
- 自由に使用・修正・再配布・商用利用できます。著作権表示と License 文言の保持が必要であり、無保証です。
357
- 詳細は [`LICENSE`](./LICENSE) を確認してください。
307
+ JSKim は MIT License のもとで提供されます。自由に使用・修正・再配布・商用利用できます。著作権表示と License 文言の保持が必要であり、無保証です。詳細は [`LICENSE`](./LICENSE) を確認してください。