files
ディレクトリinc
ディレクトリtemplates
とtemplate-parts
ディレクトリfonts
ディレクトリimg
ディレクトリjs
ディレクトリscss
ディレクトリPWA Generator はprojects.json
で指定されたプロジェクト構成に基づいて静的 Web サイトを構築する静的サイト ジェネレーターです。 Web サイトがプログレッシブ Web アプリとして機能するために必要なものすべてを生成できます。たとえば、オフラインで機能し、インストール可能です。 Netlify にデプロイすることもできます。
projects.json
でビルドするように構成されたすべてのプロジェクトをリストします。
./pwagenerator.php projects
projects.json
のプロジェクト構成を使用してプロジェクトのアイコンをビルド、デプロイ、生成する
./pwagenerator.php [project] [option]
options:
-v verbose
-b build
-i generate icons
-d deploy
例えば:
./pwagenerator exampleproject.com -b
新しいプロジェクトを作成するには、それをprojects.json
に追加してからビルドします。
-v
): 選択した他のオプション ( -b
、 -i
、または-d
) に対してより詳細な出力を提供します。-b
): プロジェクトをビルドします。このプロセス中に、PWA Generator はプロジェクトが機能するために必要なすべてのファイルを生成します。詳細については、「ビルド プロセス」を参照してください。-i
): プロジェクトのアイコンを生成します。このプロセス中に、PWA Generator は構成配列をセットアップし、real-favicon を使用してプロジェクト ディレクトリ内のimg/favicon.svg
ファイルからファビコンのセットを生成します。-d
): プロジェクトをデプロイします。このプロセス中に、PWA Generator はプロジェクトのバージョンをインクリメントし、 projects.json
および netlify-cli に設定されたnetlify_id
を使用してプロジェクト ディレクトリを Netlify にデプロイします。 files
ディレクトリfiles
ディレクトリには、プロジェクトのビルド時にプロジェクトにコピーされるファイルが含まれています。
fonts
ディレクトリ内のフォントは、 projects.json
のfonts
オブジェクトにリストされている場合にのみコピーされます。例:
"fonts": {
"heading": "Roboto Slab",
"body": "Roboto"
}
opt
ディレクトリ内のファイルは、 projects.json
のopt_files
オブジェクトにリストされている場合にのみコピーされます。例:
"opt_files": [
"opt/google_auth.js"
]
inc
ディレクトリinc
ディレクトリには、プロジェクト タスクの実行に使用されるファイルが含まれています。
class-build.php
ファビコンを構築、デプロイ、生成するための機能が含まれています。class-cli.php
コマンドライン操作のための機能が含まれています。class-projects.php
には、 projects.json
からプロジェクトを取得する機能が含まれています。class-text.php
には、テキストをフォーマットする機能が含まれています。templates
とtemplate-parts
ディレクトリtemplates
とtemplate-parts
ディレクトリには、ページの構築に使用されるファイルが含まれています。
プロジェクトを初めてビルドすると、プロジェクト ディレクトリにいくつかのファイルとディレクトリが作成されます。
index.php
: 今後のビルドによって上書きされることはなく、プロジェクトに固有のマークアップと機能が含まれている必要があります。js/main.ts
: 今後のビルドによって上書きされることはなく、プロジェクトに固有の機能が含まれている必要があります。scss/style.scss
: 今後のビルドでは上書きされず、プロジェクトに固有のスタイルが含まれている必要があります。_redirects
: Netlify リダイレクト ファイル。リダイレクト ルールと書き換えルールを含めることができます。.gitignore
: Git 無視ファイル。 Git が追跡すべきではないファイルとフォルダーのリストが含まれます。manifest.json
: Web アプリのマニフェスト ファイル。プログレッシブ Web アプリについてブラウザーに通知し、インストール時にアプリがどのように動作するかを示すデータが含まれています。package.json
: npm
プロジェクト データ ファイル。 npm
パッケージ マネージャーのプロジェクト データが含まれています。package-lock.json
: npm
依存関係バージョン ファイル。 npm
パッケージ マネージャーによってインストールされたパッケージの依存関係バージョンが含まれます。パッケージのインストール時にnpm
によって自動的に生成されます。robots.txt
: ロボット ファイル。検索エンジンがクロールすべきページとクロールすべきでないページを決定するのに役立つルールのリストが含まれています。sitemap.xml
: サイトマップ ファイル。検索エンジンによるコンテンツ検出を支援し、検索エンジン最適化 (SEO) を向上させるページのリストが含まれています。sw.js
: サービスワーカーファイル。アセットをキャッシュし、オフラインでの閲覧やダウンロード可能な「アプリのような」エクスペリエンスを可能にする機能が含まれています。tsconfig.json
: Webpack TypeScript コンパイル設定ファイル。webpack.config.js
: js/*.ts
およびscss/*.scss
ファイルからbundle.[hash].js
fonts
ディレクトリfonts
ディレクトリには、ビルド プロセス中にfiles/fonts
からコピーされたフォント ファイルが含まれています。このディレクトリに加えられた変更は、今後のビルドによって上書きされます。
img
ディレクトリimg
ディレクトリには、 -i
コマンドで生成されたイメージとファイルが含まれています。コマンドを実行する前に、 favicon.svg
このディレクトリに配置する必要があります。
このディレクトリには以下も含まれている必要があります。
projects.json
のcache_files
オブジェクトに含まれるすべての画像。 cache_files
とprojects.json
のnav.image
オブジェクトに含まれている場合、画像は上部ヘッダーのナビゲーション バーで使用されます。 cache_files
とprojects.json
のheader.image
オブジェクトに含まれている場合、画像はメイン ヘッダーで使用されます。share.jpg
画像。posts.json
に含まれる投稿の注目の画像。投稿の URL にファイル拡張子.jpg
を付けた名前にする必要があります。projects.json
のscreenshots
オブジェクトに含まれるすべての画像。js
ディレクトリjs
ディレクトリには、ビルド プロセス中にfiles/js
からコピーされる.ts
ファイルと、これらの.ts
ファイルとscss
ディレクトリ内のファイルから生成されるbundle.[hash].js
ファイルが含まれます。
このディレクトリにはmain.ts
ファイルも含まれており、これは最初のビルドで空のファイルとして生成されます。将来のビルドによって上書きされることはなく、プロジェクトに固有の機能が含まれている必要があります。
未コンパイルのファイルが必要な場合は、このディレクトリにmain.js
オプションで含めることもできます。これが必要な場合は、このファイルをprojects.json
のcache_files
オブジェクトにも含める必要があります。
scss
ディレクトリscss
ディレクトリには、ビルド プロセス中にfiles/scss
からコピーされる.scss
ファイルが含まれています。
このディレクトリにはstyle.scss
ファイルも含まれています。このファイルは、最初のビルド時に、 projects.json
内の fonts およびcolors
オブジェクトのfonts
と色を含む:root {}
宣言のみを含むファイルとして生成されます。今後のビルドによって上書きされることはなく、プロジェクト固有のスタイルが含まれている必要があります。
project
に応じて、 projects.json
からプロジェクト構成を取得します。$this->project_data['files']['compile']
配列は、ファイルをプロジェクト ディレクトリにコンパイルするために使用されます。$this->project_data['files']['compile']
に追加されます$this->project_data['files']['copy']
配列は、ファイルをプロジェクト ディレクトリにコピーするために使用されます。files/scss
およびfiles/js
内のファイルは$this->project_data['files']['copy']
に追加されます。files/opt
内のファイルは、 projects.json
内のopt_files
オブジェクトにもリストされている場合にのみ$this->project_data['files']['copy']
に追加されます。例: "opt_files": [
"opt/google_auth.js"
]
$this->project_data['files']['copy']
に追加されます。$this->project_data['files']['cache']
配列は、Service Worker によるキャッシュ用のファイルをsw.js
ファイルに追加するために使用されます。data.json
(アプリのような検索エクスペリエンスを作成するための追加ページの生成に使用) とposts.json
(ブログ投稿の生成に使用) は、 $this->project_data['files']['cache']
に追加されます。 $this->project_data['files']['cache']
。projects.json
のcache_files
オブジェクトにリストされているファイルは$this->project_data['files']['cache']
に追加されます。例: "cache_files": [
"img/logo_header.svg",
"img/logo_nav.svg",
"img/shortcut.png"
]
files/opt
内のファイルは、 projects.json
内のopt_files
オブジェクトにもリストされている場合にのみ$this->project_data['files']['cache']
に追加されます。例: "opt_files": [
"opt/google_auth.js"
]
$this->project_data['files']['cache']
に追加されますpost
である場合 (例、 posts.json
から抽出されたもの)、ページの URL と.jpg
ファイル拡張子を使用して、画像も$this->project_data['files']['cache']
に追加されます。$this->project_data['files']['cache']
に追加されます。sitemap.xml
ファイルを生成するためにページ$this->project_data['sitemap']['urls']
を追加します。package.json
ファイルindex.php
ファイルscss
ディレクトリとscss/style.scss
に、 projects.json
内のfonts
およびcolors
オブジェクトのフォントと色を含む:root {}
宣言を含めます。 "fonts": {
"heading": "Roboto Slab",
"body": "Roboto"
},
"colors": {
"main": {
"normal": "92D7DA",
"dark": "489094"
},
"accent": {
"normal": "FA96C0",
"dark": "B34F78"
}
}
js
ディレクトリとjs/main.ts
opt
ディレクトリnode_modules
を含む.gitignore
ファイルsw.js
サービスワーカーファイル$this->project_data['files']['copy']
配列にリストされているファイルをプロジェクト ディレクトリにコピーします。js/*.ts
およびscss/*.scss
ファイルからbundle.[hash].js
ファイルを生成し、引数として渡されたproject
、 page
、およびproject_data
を指定してphp
コマンドを使用します。 $this->project_data['files']['compile']
内の各ファイルを縮小された.html
ファイルにコンパイルします。manifest.json
ファイルを生成します。 manifest.json
ファイルはプロジェクト ディレクトリにコピーされ、 projects.json
の値 ( categories
、 screenshots
、 shortcuts
、 android_app_id
、およびapple_app_id
) に従って変更されます。$this->project_data['files']['compile']
および$this->project_data['files']['copy']
内のファイル内の次のパターンを置き換えます。***FILES***
: $this->project_data['files']['cache']
のファイル***URLS***
: $this->project_data['redirects']
および$this->project_data['sitemap']['urls']
の URL***REDIRECT_URLS***
: $this->project_data['files']['compile']
および$this->project_data['redirects']
の URL***URL***
: $this->project_data['url']
のプロジェクト URL***TITLE***
: $this->project_data['title']
のプロジェクト タイトル***DESCRIPTION***
: $this->project_data['description']
からのプロジェクトの説明***VERSION***
: $this->project_data['version']
のプロジェクト バージョン ( sw.js
から抽出)***DATE***
: 日付('Ym-d') これらは、 projects.json
のfonts
オブジェクトで使用できるフォントです。例:
"fonts": {
"heading": "Roboto Slab",
"body": "Roboto"
}
次のオープン ソース プロジェクトは、PWA Generator を使用して構築されています。以下の Web サイト、GitHub リポジトリ、 projects.json
のプロジェクト構成を確認してください。
{
"url": "nicolefurlan.com",
"title": "Nicole Furlan",
"description": "Software engineer on a pursuit of equality, compassion, and justice for all.",
"keywords": "nicole furlan, nicole pitts",
"categories": [],
"netlify_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"gtm_id": "G-XXXXXXXXXX",
"fbpixel_id": null,
"repixel_id": null,
"google_ads": false,
"amazon_ads": false,
"other_ads": false,
"google_api": {
"google_api_client_id": null,
"google_api_client_key": null,
"google_api_key": null,
"google_api_scope": null,
"google_api_url": null,
"google_api_callback": null
},
"fonts": {
"heading": "Playfair Display",
"body": "Raleway"
},
"fontawesome": true,
"android_app_id": {
"free": null,
"paid": null
},
"apple_app_id": {
"free": null,
"paid": null
},
"screenshots": [
"img/screenshot.png"
],
"shortcuts": null,
"links": [],
"nav": {
"image": "img/logo_nav.svg"
},
"header": {
"title": "Hi! I'm Nicole",
"description": "I'm a Software Engineer working on building a better world for us all",
"image": "img/background.webp",
"image_credit": "Photo by <a href="https://pbase.com/tclout/root" alt="Thomas Cloutier Photography">Thomas Cloutier Photography</a>"
},
"social": {
"mailto": "[email protected]",
"facebook": null,
"twitter": null,
"github": "nikkifurls",
"patreon": null,
"paypal": "donate?hosted_button_id=M7MMF3EWQTLKG",
"portfolio": null,
"yelp": null,
"tripadvisor": null,
"custom": [
{
"url": null,
"label": null,
"text": null,
"link": null
}
]
},
"author": {
"name": "Nicole Furlan",
"twitter": "nicolemfurlan"
},
"redirects": [
{
"from": "/donate",
"to": "https://www.paypal.com/donate?hosted_button_id=M7MMF3EWQTLKG"
}
],
"pages": [],
"cache_files": [
"img/background.webp",
"img/logo_nav.svg"
],
"opt_files": []
}
{
"url": "dogsafefoods.com",
"title": "Dog Safe Foods",
"description": "Sharing food with your dog? Make sure it's safe first",
"keywords": "dog safe foods, dog safe human food, dog safe human foods, safe for dogs to eat, can dogs eat, can my dog eat, can dogs have, can my dog have, good human food for dogs, food dog can eat",
"categories": [
"pets",
"food"
],
"netlify_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"gtm_id": "G-XXXXXXXXXX",
"fbpixel_id": "xxxxxxxxxxxxxxx",
"repixel_id": "xxxxxxxxxxxxxxxxxxxxxxxx",
"google_ads": true,
"amazon_ads": false,
"other_ads": false,
"google_api": {
"google_api_client_id": null,
"google_api_client_key": null,
"google_api_key": null,
"google_api_scope": null,
"google_api_url": null,
"google_api_callback": null
},
"fonts": {
"heading": "Roboto Slab",
"body": "Roboto"
},
"fontawesome": true,
"android_app_id": {
"free": "com.dog_safe_foods.twa",
"paid": "com.dogsafefoods.twa"
},
"apple_app_id": {
"free": null,
"paid": null
},
"screenshots": [
"img/screenshot1.png",
"img/screenshot2.png",
"img/screenshot3.png"
],
"shortcuts": [
{
"name": "View Safe Foods",
"description": "View all foods that are safe for dogs to eat",
"url": "./safe",
"icons": [
{
"src": "img/icon-thumbs-up.png",
"sizes": "512x512"
}
]
},
{
"name": "View Unsafe Foods",
"description": "View all foods that are not safe for dogs to eat",
"url": "./unsafe",
"icons": [
{
"src": "img/icon-thumbs-down.png",
"sizes": "512x512"
}
]
}
],
"links": [],
"nav": {
"image": "img/logo_nav.svg"
},
"header": {
"title": null,
"description": null,
"image": "img/logo_header.svg",
"image_credit": null
},
"social": {
"mailto": "[email protected]",
"facebook": null,
"twitter": "dogsafefoods",
"github": "nikkifurls/dogsafefoods",
"patreon": null,
"paypal": "donate?hosted_button_id=M7MMF3EWQTLKG",
"portfolio": "nicolefurlan.com",
"yelp": null,
"tripadvisor": null,
"custom": [
{
"url": "https://catsafefoods.com",
"label": "Cat Safe Foods",
"text": null,
"link": "<i class='fas fa-cat'></i>"
}
]
},
"author": {
"name": "Nicole Furlan",
"twitter": "nicolemfurlan"
},
"redirects": [
{
"from": "/healthy",
"to": "/safe 301!"
},
{
"from": "/unhealthy",
"to": "/unsafe 301!"
},
{
"from": "/healthy.html",
"to": "/safe 301!"
},
{
"from": "/unhealthy.html",
"to": "/unsafe 301!"
},
{
"from": "/* food=:food",
"to": "/:food 301!"
}
],
"pages": {
"*": {
"url": "",
"title": "",
"description": "Sharing ***TITLE*** with your dog? Make sure it's safe first",
"keywords": "can dogs eat ***TITLE***, can dogs have ***TITLE***, dogs ***TITLE***, dogs and ***TITLE***, ***TITLE*** safe for dogs, ***TITLE*** bad for dogs, ***TITLE*** ok for dogs, is it safe for dogs to eat ***TITLE***, is it safe for dogs to have ***TITLE***"
},
"safe": {
"url": "safe",
"title": "Safe Foods for Dogs",
"description": "Sharing food with your dog? Make sure it's on this list of safe foods for dogs first",
"keywords": "healthy human food for dogs, safe human food for dogs, human food that dogs can eat, good human food for dogs"
},
"unsafe": {
"url": "unsafe",
"title": "Unsafe Foods for Dogs",
"description": "Sharing food with your dog? Make sure it's not on this list of unsafe foods for dogs first",
"keywords": "unhealthy human food for dogs, food not to feed dogs, bad food for dogs, bad human food for dogs"
}
},
"cache_files": [
"img/logo_header.svg",
"img/logo_nav.svg",
"img/icon-thumbs-up.png",
"img/icon-thumbs-down.png",
"ads.txt",
"sellers.json"
],
"opt_files": []
}
貢献は大歓迎です!問題を発見した場合、または改善のアイデアがある場合は、お気軽に問題を作成してください。