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