@ywal123456/jskim 0.5.1 → 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 +22 -11
- package/docs/JSKim_User_Guide_v0.5.2.pdf +0 -0
- package/docs/create-jskim.md +27 -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
package/README.md
CHANGED
|
@@ -47,6 +47,9 @@ Nunjucks を使った汎用の静的 HTML ビルド環境です。
|
|
|
47
47
|
|
|
48
48
|
詳細:
|
|
49
49
|
|
|
50
|
+
- 公式ユーザーガイド: [docs/user-guide/README.md](docs/user-guide/README.md)
|
|
51
|
+
- 公式ユーザーガイド PDF(npm package 同梱): `node_modules/@ywal123456/jskim/docs/JSKim_User_Guide_v0.5.2.pdf`
|
|
52
|
+
- PDF生成手順: [docs/user-guide-pdf-build.md](docs/user-guide-pdf-build.md)(maintainer 向け。release 用 PDF は `npm run docs:pdf:package`)
|
|
50
53
|
- [docs/configuration.md](docs/configuration.md)
|
|
51
54
|
- [docs/create-jskim.md](docs/create-jskim.md)
|
|
52
55
|
- [docs/publishing.md](docs/publishing.md)(maintainer 向け release 手順)
|
|
@@ -136,16 +139,18 @@ module.exports = {
|
|
|
136
139
|
例:
|
|
137
140
|
|
|
138
141
|
```text
|
|
139
|
-
src/sample/pages/index.html.njk
|
|
140
|
-
src/sample/pages/
|
|
141
|
-
src/sample/pages/assets/
|
|
142
|
+
src/sample/pages/index.html.njk → dist/sample/index.html
|
|
143
|
+
src/sample/pages/dashboard/index.html.njk → dist/sample/dashboard/index.html
|
|
144
|
+
src/sample/pages/assets/css/common.css → dist/sample/assets/css/common.css
|
|
145
|
+
src/sample/pages/dashboard/assets/css/dashboard.css → dist/sample/dashboard/assets/css/dashboard.css
|
|
146
|
+
src/sample/pages/assets/img/logo.svg → dist/sample/assets/img/logo.svg
|
|
142
147
|
```
|
|
143
148
|
|
|
144
149
|
推奨命名:
|
|
145
150
|
|
|
146
|
-
- HTML は `index.html.njk`、`
|
|
151
|
+
- HTML は `index.html.njk`、`dashboard/index.html.njk` のように最終拡張子を含める
|
|
147
152
|
- CSS / JS を Nunjucks で処理する場合は `style.css.njk`、`main.js.njk` のように書く
|
|
148
|
-
-
|
|
153
|
+
- 画像や平文 CSS などテンプレート処理しないファイルは通常の拡張子のまま置く
|
|
149
154
|
|
|
150
155
|
`templates` に指定した `layouts` / `components` は loader の検索パスになり、直接出力されません。
|
|
151
156
|
|
|
@@ -269,8 +274,8 @@ jskim/
|
|
|
269
274
|
│ └─ sample/
|
|
270
275
|
│ ├─ pages/
|
|
271
276
|
│ │ ├─ index.html.njk
|
|
272
|
-
│ │ ├─
|
|
273
|
-
│ │ └─
|
|
277
|
+
│ │ ├─ dashboard/
|
|
278
|
+
│ │ └─ assets/
|
|
274
279
|
│ ├─ layouts/
|
|
275
280
|
│ └─ components/
|
|
276
281
|
└─ dist/
|
|
@@ -282,21 +287,27 @@ jskim/
|
|
|
282
287
|
各 `.njk` ファイルの最終出力位置を基準に `rootPath` が自動計算され、Nunjucks context に注入されます。
|
|
283
288
|
|
|
284
289
|
```njk
|
|
285
|
-
<link rel="stylesheet" href="{{ rootPath }}assets/css/
|
|
286
|
-
<a href="{{ rootPath }}index.html">
|
|
290
|
+
<link rel="stylesheet" href="{{ rootPath }}assets/css/common.css">
|
|
291
|
+
<a href="{{ rootPath }}index.html">Portal</a>
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
ページローカル asset は出力ページからの相対パスで参照します。
|
|
295
|
+
|
|
296
|
+
```njk
|
|
297
|
+
<link rel="stylesheet" href="assets/css/dashboard.css">
|
|
287
298
|
```
|
|
288
299
|
|
|
289
300
|
| 出力ファイル | rootPath |
|
|
290
301
|
|-----------|----------|
|
|
291
302
|
| `dist/sample/index.html` | `./` |
|
|
292
|
-
| `dist/sample/
|
|
303
|
+
| `dist/sample/dashboard/index.html` | `../` |
|
|
293
304
|
| `dist/sample/guide/syntax/index.html` | `../../` |
|
|
294
305
|
|
|
295
306
|
`data.rootPath` は予約語のため使えません。
|
|
296
307
|
|
|
297
308
|
## sample
|
|
298
309
|
|
|
299
|
-
`src/sample`
|
|
310
|
+
`src/sample` は公式の静的 UI sample です。Portal / Dashboard / CRUD / Wizard を含みます。API や入力保存などの application 処理は含みません。`create-jskim` が生成する project にも同じ sample が入る。
|
|
300
311
|
|
|
301
312
|
```bash
|
|
302
313
|
npm run build -- sample
|
|
Binary file
|
package/docs/create-jskim.md
CHANGED
|
@@ -56,27 +56,42 @@ project/
|
|
|
56
56
|
└─ sample/
|
|
57
57
|
├─ pages/
|
|
58
58
|
│ ├─ index.html.njk
|
|
59
|
-
│ ├─
|
|
60
|
-
│ │ ├─
|
|
61
|
-
│ │
|
|
62
|
-
│
|
|
63
|
-
│
|
|
64
|
-
│
|
|
65
|
-
│
|
|
59
|
+
│ ├─ dashboard/
|
|
60
|
+
│ │ ├─ index.html.njk
|
|
61
|
+
│ │ └─ assets/css/dashboard.css
|
|
62
|
+
│ ├─ crud/
|
|
63
|
+
│ │ ├─ index.html.njk
|
|
64
|
+
│ │ ├─ detail.html.njk
|
|
65
|
+
│ │ ├─ create.html.njk
|
|
66
|
+
│ │ ├─ edit.html.njk
|
|
67
|
+
│ │ ├─ delete.html.njk
|
|
68
|
+
│ │ ├─ complete.html.njk
|
|
69
|
+
│ │ └─ assets/css/crud.css
|
|
70
|
+
│ ├─ wizard/
|
|
71
|
+
│ │ ├─ input.html.njk
|
|
72
|
+
│ │ ├─ confirm.html.njk
|
|
73
|
+
│ │ ├─ complete.html.njk
|
|
74
|
+
│ │ └─ assets/css/wizard.css
|
|
75
|
+
│ └─ assets/
|
|
76
|
+
│ ├─ css/common.css
|
|
77
|
+
│ └─ img/logo.svg
|
|
66
78
|
├─ layouts/base.njk
|
|
67
79
|
└─ components/
|
|
68
80
|
├─ header.njk
|
|
69
|
-
|
|
81
|
+
├─ sidebar.njk
|
|
82
|
+
├─ breadcrumb.njk
|
|
83
|
+
├─ footer.njk
|
|
84
|
+
└─ wizard-steps.njk
|
|
70
85
|
```
|
|
71
86
|
|
|
72
|
-
`jskim.config.js` は `files: [{ from: 'pages', to: '' }]` を使います。`.njk` は末尾の `.njk`
|
|
87
|
+
`jskim.config.js` は `files: [{ from: 'pages', to: '' }]` を使います。`.njk` は末尾の `.njk` だけを外してレンダリングし、平文 CSS / 画像などはそのままコピーします。公式 sample は静的 UI であり、application 処理は含みません。
|
|
73
88
|
|
|
74
|
-
`package.json` の scripts は bin 名 `jskim` を使います(package name ではありません)。既定の engine dependency は `@ywal123456/jskim`(`^0.5.
|
|
89
|
+
`package.json` の scripts は bin 名 `jskim` を使います(package name ではありません)。既定の engine dependency は `@ywal123456/jskim`(`^0.5.2`)です。
|
|
75
90
|
|
|
76
91
|
```json
|
|
77
92
|
{
|
|
78
93
|
"devDependencies": {
|
|
79
|
-
"@ywal123456/jskim": "^0.5.
|
|
94
|
+
"@ywal123456/jskim": "^0.5.2"
|
|
80
95
|
},
|
|
81
96
|
"scripts": {
|
|
82
97
|
"build": "jskim build sample",
|
|
@@ -102,7 +117,7 @@ create package の `package.json` に `jskimEngine` metadata を持ち、生成
|
|
|
102
117
|
{
|
|
103
118
|
"jskimEngine": {
|
|
104
119
|
"packageName": "@ywal123456/jskim",
|
|
105
|
-
"version": "^0.5.
|
|
120
|
+
"version": "^0.5.2"
|
|
106
121
|
}
|
|
107
122
|
}
|
|
108
123
|
```
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# JSKimとは
|
|
2
|
+
|
|
3
|
+
この章では、JSKim がどのようなツールか、何を解決し、どのような用途に向くかを説明します。
|
|
4
|
+
|
|
5
|
+
## JSKim の概要
|
|
6
|
+
|
|
7
|
+
JSKim は、Nunjucks を使って静的 HTML を生成する開発環境です。
|
|
8
|
+
|
|
9
|
+
source(`sourceDir`)を管理し、build によって output(`outputDir`)を生成します。layout や component を再利用でき、CSS や画像などの asset もまとめて扱えます。開発中は `watch` / `serve` / `dev` を使い、配布結果は通常の静的ファイルです。
|
|
10
|
+
|
|
11
|
+
「framework」と呼ぶこともできますが、backend framework や SPA framework ではありません。テンプレートと静的ファイルを整理し、build 結果を作るためのツールです。
|
|
12
|
+
|
|
13
|
+
## 解決しようとする問題
|
|
14
|
+
|
|
15
|
+
静的な HTML サイトを手作業だけで増やすと、次のような問題が起きやすくなります。
|
|
16
|
+
|
|
17
|
+
- 複数ページで header / footer などの共通部分が重複する
|
|
18
|
+
- ページ数が増えると、共通箇所の修正漏れが起きやすい
|
|
19
|
+
- 編集用の source と、配布用の output が混ざりやすい
|
|
20
|
+
- 静的 asset のパス管理が煩雑になる
|
|
21
|
+
- build / watch / 開発サーバーの手順が統一されない
|
|
22
|
+
- template の誤りに気づくのが遅れる
|
|
23
|
+
|
|
24
|
+
JSKim は、これらの作業を `jskim.config.js` を基準にした一連のコマンドとしてまとめます。
|
|
25
|
+
|
|
26
|
+
## 基本的な処理の流れ
|
|
27
|
+
|
|
28
|
+
推奨設定である files pipeline では、大まかに次の流れで処理します。
|
|
29
|
+
|
|
30
|
+
```text
|
|
31
|
+
src/sample/
|
|
32
|
+
│
|
|
33
|
+
├─ pages/ 配下の *.njk ── render(末尾 .njk を外す)──┐
|
|
34
|
+
├─ pages/ 配下の CSS / 画像 ── copy ──────────────────┤
|
|
35
|
+
└─ layouts / components ── template root(直接出力しない)│
|
|
36
|
+
▼
|
|
37
|
+
dist/sample/
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`layouts` や `components` は `extends` / `include` 用の template root です。それ自体は output されません。
|
|
41
|
+
詳細な規則は [files pipeline](07-files-pipeline.md) を参照してください。
|
|
42
|
+
|
|
43
|
+
## JSKim に向いている project
|
|
44
|
+
|
|
45
|
+
次のような project に向いています。
|
|
46
|
+
|
|
47
|
+
- 複数の静的 HTML ページを持つ website
|
|
48
|
+
- 共通 layout / component を使う project
|
|
49
|
+
- build 結果を静的 hosting や既存サーバーへ配置する project
|
|
50
|
+
- frontend bundler を使わず、HTML / CSS / JS asset を整理したい project
|
|
51
|
+
|
|
52
|
+
## JSKim の範囲外
|
|
53
|
+
|
|
54
|
+
次の用途は JSKim の範囲外です。
|
|
55
|
+
|
|
56
|
+
- backend application framework ではない
|
|
57
|
+
- database 機能はない
|
|
58
|
+
- API server 機能はない
|
|
59
|
+
- React / Vue のような SPA framework ではない
|
|
60
|
+
- JavaScript bundler ではない
|
|
61
|
+
- 既存 HTML の自動取り込みや移行ツールではない
|
|
62
|
+
- 実際の CRUD / Wizard 業務ロジックは提供しない
|
|
63
|
+
|
|
64
|
+
公式 sample の CRUD / Wizard は、画面構成を示す静的 UI sample です。保存や送信などの application 処理はありません。
|
|
65
|
+
|
|
66
|
+
## JSKim と Nunjucks の関係
|
|
67
|
+
|
|
68
|
+
役割を分けると次のとおりです。
|
|
69
|
+
|
|
70
|
+
- **Nunjucks** — template の記法と render engine
|
|
71
|
+
- **JSKim** — project / 設定 / files / build / watch / serve / dev をまとめる実行環境
|
|
72
|
+
|
|
73
|
+
Nunjucks の文法すべてが JSKim 独自機能というわけではありません。
|
|
74
|
+
このユーザーガイドでは、JSKim の利用で実務的に必要な文法を中心に扱います。
|
|
75
|
+
|
|
76
|
+
## 公式 sample の紹介
|
|
77
|
+
|
|
78
|
+
公式 sample は次の画面グループで構成されています。
|
|
79
|
+
|
|
80
|
+
| 画面グループ | 役割 |
|
|
81
|
+
| ------------ | ---- |
|
|
82
|
+
| Portal | sample 全体の入口。各画面グループへの導線をまとめる |
|
|
83
|
+
| Dashboard | 共通 layout と静的データを使った管理画面の見た目例 |
|
|
84
|
+
| CRUD | 一覧・詳細・登録・編集・削除確認などの画面構成例 |
|
|
85
|
+
| Wizard | 入力・確認・完了の 3 ステップ画面構成例 |
|
|
86
|
+
|
|
87
|
+
いずれも静的 UI です。API 通信や入力の永続化はありません。
|
|
88
|
+
|
|
89
|
+
代表的な source:
|
|
90
|
+
|
|
91
|
+
- [Portal](../../src/sample/pages/index.html.njk)
|
|
92
|
+
- [Dashboard](../../src/sample/pages/dashboard/index.html.njk)
|
|
93
|
+
- [CRUD](../../src/sample/pages/crud/index.html.njk)
|
|
94
|
+
- [Wizard(入力)](../../src/sample/pages/wizard/input.html.njk)
|
|
95
|
+
|
|
96
|
+
読み方は [Dashboard例](11-dashboard-example.md)、[CRUD例](12-crud-example.md)、[Wizard例](13-wizard-example.md) を参照してください。
|
|
97
|
+
|
|
98
|
+
次の章では、project を作成して sample をブラウザで確認する手順を説明します。
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# はじめ方
|
|
2
|
+
|
|
3
|
+
この章では、JSKim の project を作成し、ブラウザで公式 sample を確認し、production build まで実行する手順を説明します。
|
|
4
|
+
|
|
5
|
+
## 事前準備
|
|
6
|
+
|
|
7
|
+
JSKim engine(`@ywal123456/jskim`)と creator(`create-jskim`)は、いずれも Node.js **18 以上**を想定しています(`package.json` の `engines.node` が `>=18`)。
|
|
8
|
+
|
|
9
|
+
package manager は npm / pnpm / yarn を公式に案内しています。OS として Windows / macOS / Linux を特別に制限してはいません。パス処理は Node の `path` を使います。
|
|
10
|
+
|
|
11
|
+
あらかじめ Node.js と、利用する package manager がコマンドとして認識できる状態にしてください。
|
|
12
|
+
|
|
13
|
+
## Project の作成
|
|
14
|
+
|
|
15
|
+
推奨の作成コマンドは次のとおりです。
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm create jskim@latest my-project
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
他の package manager の例:
|
|
22
|
+
|
|
23
|
+
| package manager | 作成コマンド |
|
|
24
|
+
| --------------- | ------------ |
|
|
25
|
+
| npm | `npm create jskim@latest my-project` |
|
|
26
|
+
| pnpm | `pnpm create jskim my-project` |
|
|
27
|
+
| yarn | `yarn create jskim my-project` |
|
|
28
|
+
|
|
29
|
+
代替として、次も利用できます。
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npx create-jskim my-project
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
ディレクトリ名を省略すると、プロジェクト名を尋ねます。空のまま Enter すると既定値 `jskim-project` を使います。
|
|
36
|
+
|
|
37
|
+
空ではない既存ディレクトリは上書きしません。
|
|
38
|
+
|
|
39
|
+
## 生成結果
|
|
40
|
+
|
|
41
|
+
生成直後の主要な構成は次のとおりです。
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
my-project/
|
|
45
|
+
├─ package.json
|
|
46
|
+
├─ jskim.config.js
|
|
47
|
+
├─ README.md
|
|
48
|
+
├─ .gitignore
|
|
49
|
+
└─ src/
|
|
50
|
+
└─ sample/
|
|
51
|
+
├─ layouts/
|
|
52
|
+
├─ components/
|
|
53
|
+
└─ pages/
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`package.json` は creator が生成します。engine dependency は `@ywal123456/jskim`(`^0.5.2`)です。
|
|
57
|
+
`src/sample/` には公式の静的 UI sample(Portal / Dashboard / CRUD / Wizard)が含まれます。
|
|
58
|
+
|
|
59
|
+
## Dependency のインストール
|
|
60
|
+
|
|
61
|
+
creator は **自動で install を実行しません**。また `git init` も実行しません。
|
|
62
|
+
|
|
63
|
+
生成完了時の案内は、実行した package manager に合わせて install / 開発コマンドを表示します。検知できない場合は npm 向けの案内になることがあります。
|
|
64
|
+
|
|
65
|
+
project ディレクトリへ移動してから、次を実行してください。
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
npm install
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
pnpm install
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
yarn install
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 開発サーバーの実行
|
|
80
|
+
|
|
81
|
+
生成された `package.json` の `dev` script は `jskim dev sample` です。
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
npm run dev
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
package manager ごとの例:
|
|
88
|
+
|
|
89
|
+
| package manager | 開発コマンド |
|
|
90
|
+
| --------------- | ------------ |
|
|
91
|
+
| npm | `npm run dev` |
|
|
92
|
+
| pnpm | `pnpm dev` |
|
|
93
|
+
| yarn | `yarn dev` |
|
|
94
|
+
|
|
95
|
+
既定の開発サーバー URL は次です。
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
http://127.0.0.1:3000/
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
ブラウザでは Portal が表示されます。sidebar やカードから Dashboard / CRUD / Wizard へ移動できます。
|
|
102
|
+
|
|
103
|
+
source を保存すると再 build され、ブラウザへ反映されます。template などに誤りがあると、ブラウザ上の overlay に表示されることがあります。
|
|
104
|
+
詳細は [開発機能](09-development-features.md) を参照してください。
|
|
105
|
+
|
|
106
|
+
## 最初の修正
|
|
107
|
+
|
|
108
|
+
まずは Portal の説明文を変更してみます。
|
|
109
|
+
|
|
110
|
+
編集する file:
|
|
111
|
+
|
|
112
|
+
- [src/sample/pages/index.html.njk](../../src/sample/pages/index.html.njk)
|
|
113
|
+
|
|
114
|
+
次の lead 文を探します。
|
|
115
|
+
|
|
116
|
+
```nunjucks
|
|
117
|
+
<p class="lead">
|
|
118
|
+
JSKim の files pipeline で画面構成、template 分割、asset 配置を確認できる
|
|
119
|
+
静的 UI sample です。
|
|
120
|
+
</p>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
文言を少し変えて保存し、ブラウザを確認してください。Portal の説明が更新されていれば、source から output への流れを確認できています。
|
|
124
|
+
|
|
125
|
+
## Production build
|
|
126
|
+
|
|
127
|
+
配布用の output を作るには次を実行します。
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
npm run build
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
生成 script は `jskim build sample` です。結果は次のディレクトリに出力されます。
|
|
134
|
+
|
|
135
|
+
```text
|
|
136
|
+
dist/sample/
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
ここには通常の HTML / CSS / SVG などの静的ファイルが並びます。
|
|
140
|
+
どこへ配置するかは hosting 環境によって異なるため、特定の提供元の手順はこのガイドでは扱いません。
|
|
141
|
+
|
|
142
|
+
## 主なコマンドのまとめ
|
|
143
|
+
|
|
144
|
+
| 目的 | 例(npm) |
|
|
145
|
+
| ---- | --------- |
|
|
146
|
+
| dependency のインストール | `npm install` |
|
|
147
|
+
| 開発サーバー | `npm run dev` |
|
|
148
|
+
| production output の生成 | `npm run build` |
|
|
149
|
+
|
|
150
|
+
`watch`(監視して再 build)と `serve`(output の静的配信のみ)も生成 script に含まれます。
|
|
151
|
+
使い分けは [基本的な開発workflow](04-basic-workflow.md)、構文の詳細は [CLIリファレンス](05-cli-reference.md) を参照してください。
|
|
152
|
+
|
|
153
|
+
## うまく動かないとき
|
|
154
|
+
|
|
155
|
+
よくある原因は次のとおりです。
|
|
156
|
+
|
|
157
|
+
- 既定 port(`3000`)が他のプロセスで使われている
|
|
158
|
+
- install を実行していない
|
|
159
|
+
- project ルート以外のディレクトリでコマンドを実行している
|
|
160
|
+
- Node.js / package manager が PATH 上で認識されていない
|
|
161
|
+
|
|
162
|
+
エラーメッセージごとの対処は [エラーとトラブルシュート](10-errors-and-troubleshooting.md) を参照してください。
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# プロジェクト構成
|
|
2
|
+
|
|
3
|
+
この章では、`create-jskim` が生成する project の directory 構成と、各要素の役割を説明します。
|
|
4
|
+
|
|
5
|
+
## 全体構成
|
|
6
|
+
|
|
7
|
+
生成直後のルート構成は次のとおりです。
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
my-project/
|
|
11
|
+
├─ jskim.config.js
|
|
12
|
+
├─ package.json
|
|
13
|
+
├─ README.md
|
|
14
|
+
├─ .gitignore
|
|
15
|
+
├─ src/
|
|
16
|
+
│ └─ sample/
|
|
17
|
+
└─ dist/ ← build 後に生成されることがある
|
|
18
|
+
└─ sample/
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
`dist/` は build を実行するまで存在しない場合があります。source は `src/sample/`、output は `dist/sample/` です。
|
|
22
|
+
|
|
23
|
+
`src/sample/` の概要は次のとおりです。
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
src/sample/
|
|
27
|
+
├─ layouts/
|
|
28
|
+
│ └─ base.njk
|
|
29
|
+
├─ components/
|
|
30
|
+
│ ├─ header.njk
|
|
31
|
+
│ ├─ sidebar.njk
|
|
32
|
+
│ ├─ breadcrumb.njk
|
|
33
|
+
│ ├─ footer.njk
|
|
34
|
+
│ └─ wizard-steps.njk
|
|
35
|
+
└─ pages/
|
|
36
|
+
├─ index.html.njk
|
|
37
|
+
├─ assets/
|
|
38
|
+
│ ├─ css/common.css
|
|
39
|
+
│ └─ img/logo.svg
|
|
40
|
+
├─ dashboard/
|
|
41
|
+
├─ crud/
|
|
42
|
+
└─ wizard/
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## jskim.config.js
|
|
46
|
+
|
|
47
|
+
`jskim.config.js` は project の定義です。動作の基準はこのファイルにあります。
|
|
48
|
+
|
|
49
|
+
公式 sample では、おおむね次の考え方で設定されています。
|
|
50
|
+
|
|
51
|
+
- `sourceDir` — source のルート(例: `src/sample`)
|
|
52
|
+
- `outputDir` — output のルート(例: `dist/sample`)
|
|
53
|
+
- `files` — pages 配下をまとめて処理する pipeline(例: `{ from: 'pages', to: '' }`)
|
|
54
|
+
- `templates` — `extends` / `include` 用の検索パス(例: `layouts`, `components`)
|
|
55
|
+
- `data` — 全 template へ渡す共通データ(例: `site.name`)
|
|
56
|
+
|
|
57
|
+
設定の一部(概念):
|
|
58
|
+
|
|
59
|
+
```js
|
|
60
|
+
defaults: {
|
|
61
|
+
files: [{ from: 'pages', to: '' }],
|
|
62
|
+
templates: ['layouts', 'components'],
|
|
63
|
+
data: {
|
|
64
|
+
site: {
|
|
65
|
+
name: 'JSKim UI Sample',
|
|
66
|
+
language: 'ja',
|
|
67
|
+
themeColor: '#222222',
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
オプションの詳細は [設定](06-configuration.md) を参照してください。
|
|
74
|
+
|
|
75
|
+
## src/sample
|
|
76
|
+
|
|
77
|
+
`src/sample/` は公式 sample の source root です。
|
|
78
|
+
この repository の sample と、creator が生成する sample は同じ構成です。
|
|
79
|
+
|
|
80
|
+
主な役割:
|
|
81
|
+
|
|
82
|
+
- `layouts/` — 文書全体の共通枠
|
|
83
|
+
- `components/` — header など再利用部品
|
|
84
|
+
- `pages/` — 実際に output されるページと asset
|
|
85
|
+
|
|
86
|
+
## layouts
|
|
87
|
+
|
|
88
|
+
共通 layout は次の file です。
|
|
89
|
+
|
|
90
|
+
- [`base.njk`](../../src/sample/layouts/base.njk)
|
|
91
|
+
|
|
92
|
+
HTML document の骨格(`title`、共通 CSS、header、sidebar、breadcrumb、footer)を定義します。
|
|
93
|
+
各ページは `{% extends "layouts/base.njk" %}` でこの layout を継承し、`{% block content %}` などに本文を書きます。
|
|
94
|
+
|
|
95
|
+
`layouts` は template root のため、それ自体は output されません。
|
|
96
|
+
|
|
97
|
+
## components
|
|
98
|
+
|
|
99
|
+
components は次のとおりです。
|
|
100
|
+
|
|
101
|
+
| file | 役割 |
|
|
102
|
+
| ---- | ---- |
|
|
103
|
+
| [`header.njk`](../../src/sample/components/header.njk) | 上部ヘッダーとブランド表示 |
|
|
104
|
+
| [`sidebar.njk`](../../src/sample/components/sidebar.njk) | 画面グループへのナビ |
|
|
105
|
+
| [`breadcrumb.njk`](../../src/sample/components/breadcrumb.njk) | パンくずリスト |
|
|
106
|
+
| [`footer.njk`](../../src/sample/components/footer.njk) | フッター |
|
|
107
|
+
| [`wizard-steps.njk`](../../src/sample/components/wizard-steps.njk) | Wizard の手順表示 |
|
|
108
|
+
|
|
109
|
+
layout から `{% include "components/header.njk" %}` のように読み込みます。
|
|
110
|
+
components も template root のため、独立した HTML ページとしては output されません。
|
|
111
|
+
|
|
112
|
+
## pages
|
|
113
|
+
|
|
114
|
+
`pages/` 配下が実際の output 対象です。
|
|
115
|
+
|
|
116
|
+
- `*.njk` は末尾の `.njk` だけを外して render されます(例: `index.html.njk` → `index.html`)
|
|
117
|
+
- CSS / SVG などそれ以外は copy されます
|
|
118
|
+
- `pages/` からの相対構造は output でも維持されます
|
|
119
|
+
|
|
120
|
+
公式 sample のページ構成:
|
|
121
|
+
|
|
122
|
+
| グループ | 内容 |
|
|
123
|
+
| -------- | ---- |
|
|
124
|
+
| Portal | `pages/index.html.njk` |
|
|
125
|
+
| dashboard/ | Dashboard 画面と page-local CSS |
|
|
126
|
+
| crud/ | 一覧・詳細・登録・編集・削除・完了などの画面群 |
|
|
127
|
+
| wizard/ | 入力・確認・完了の画面群 |
|
|
128
|
+
|
|
129
|
+
## 共通 asset
|
|
130
|
+
|
|
131
|
+
共通で使う asset の例:
|
|
132
|
+
|
|
133
|
+
| source | output |
|
|
134
|
+
| ------ | ------ |
|
|
135
|
+
| [`pages/assets/css/common.css`](../../src/sample/pages/assets/css/common.css) | `dist/sample/assets/css/common.css` |
|
|
136
|
+
| [`pages/assets/img/logo.svg`](../../src/sample/pages/assets/img/logo.svg) | `dist/sample/assets/img/logo.svg` |
|
|
137
|
+
|
|
138
|
+
深い階層のページからも同じ共通 asset を参照するため、layout では `rootPath` を使います。
|
|
139
|
+
|
|
140
|
+
```nunjucks
|
|
141
|
+
<link rel="stylesheet" href="{{ rootPath }}assets/css/common.css">
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
`rootPath` は output 上のページ位置に応じて、output root までの相対パスを表します。
|
|
145
|
+
詳細は [files pipeline](07-files-pipeline.md) を参照してください。
|
|
146
|
+
|
|
147
|
+
## Page-local asset
|
|
148
|
+
|
|
149
|
+
画面グループ専用の CSS 例:
|
|
150
|
+
|
|
151
|
+
| source | output |
|
|
152
|
+
| ------ | ------ |
|
|
153
|
+
| [`dashboard/.../dashboard.css`](../../src/sample/pages/dashboard/assets/css/dashboard.css) | `dist/sample/dashboard/assets/css/dashboard.css` |
|
|
154
|
+
| [`crud/.../crud.css`](../../src/sample/pages/crud/assets/css/crud.css) | `dist/sample/crud/assets/css/crud.css` |
|
|
155
|
+
| [`wizard/.../wizard.css`](../../src/sample/pages/wizard/assets/css/wizard.css) | `dist/sample/wizard/assets/css/wizard.css` |
|
|
156
|
+
|
|
157
|
+
page-local CSS は、その画面グループからの相対パスで参照します。
|
|
158
|
+
|
|
159
|
+
```html
|
|
160
|
+
<link rel="stylesheet" href="assets/css/dashboard.css">
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
> **Warning**
|
|
164
|
+
>
|
|
165
|
+
> 次のように `rootPath` を付けて page-local CSS を参照しないでください。
|
|
166
|
+
>
|
|
167
|
+
> ```nunjucks
|
|
168
|
+
> {{ rootPath }}assets/css/dashboard.css
|
|
169
|
+
> ```
|
|
170
|
+
>
|
|
171
|
+
> `rootPath` は output root(`dist/sample/`)基準です。
|
|
172
|
+
> Dashboard 用 CSS は `dist/sample/dashboard/assets/...` にあるため、
|
|
173
|
+
> root 基準のパスでは見つかりません。
|
|
174
|
+
|
|
175
|
+
共通 asset と page-local asset の比較:
|
|
176
|
+
|
|
177
|
+
| 種類 | 置き場所の例 | 参照の考え方 |
|
|
178
|
+
| ---- | ------------ | ------------ |
|
|
179
|
+
| 共通 asset | `pages/assets/...` | `{{ rootPath }}assets/...` |
|
|
180
|
+
| page-local asset | `pages/dashboard/assets/...` など | 同一グループからの相対パス(`assets/...`) |
|
|
181
|
+
|
|
182
|
+
## dist/sample
|
|
183
|
+
|
|
184
|
+
`dist/sample/` は build の output です。
|
|
185
|
+
|
|
186
|
+
- 手で編集する source ではありません
|
|
187
|
+
- 次の build で上書き・再生成されることがあります
|
|
188
|
+
- 配布対象として使える通常の静的ファイルです
|
|
189
|
+
- `layouts` / `components` はここへ出力されません
|
|
190
|
+
|
|
191
|
+
## Source と output の対応
|
|
192
|
+
|
|
193
|
+
| source | 処理 | output |
|
|
194
|
+
| ------ | ---- | ------ |
|
|
195
|
+
| `pages/index.html.njk` | render | `index.html` |
|
|
196
|
+
| `pages/assets/css/common.css` | copy | `assets/css/common.css` |
|
|
197
|
+
| `layouts/base.njk` | template root | 直接 output なし |
|
|
198
|
+
| `components/header.njk` | template root | 直接 output なし |
|
|
199
|
+
| `pages/crud/detail.html.njk` | render | `crud/detail.html` |
|
|
200
|
+
| `pages/dashboard/assets/css/dashboard.css` | copy | `dashboard/assets/css/dashboard.css` |
|
|
201
|
+
|
|
202
|
+
## どこを編集するか
|
|
203
|
+
|
|
204
|
+
目的ごとの目安です。
|
|
205
|
+
|
|
206
|
+
| 目的 | 主な編集先 |
|
|
207
|
+
| ---- | ---------- |
|
|
208
|
+
| ページ本文 | `pages/**/*.html.njk` |
|
|
209
|
+
| 共通 layout | [`layouts/base.njk`](../../src/sample/layouts/base.njk) |
|
|
210
|
+
| 共通 component | `components/*.njk` |
|
|
211
|
+
| 全体の見た目 | [`pages/assets/css/common.css`](../../src/sample/pages/assets/css/common.css) |
|
|
212
|
+
| 画面グループの見た目 | 各グループの `assets/css/*.css` |
|
|
213
|
+
| build やサーバー設定 | `jskim.config.js` |
|
|
214
|
+
|
|
215
|
+
日常の開発の流れは [基本的な開発workflow](04-basic-workflow.md)、
|
|
216
|
+
CLI と設定の詳細は [CLIリファレンス](05-cli-reference.md) / [設定](06-configuration.md) を参照してください。
|