files
inc
templates
dan Direktori template-parts
fonts
img
js
scss
Generator PWA adalah generator situs statis yang membangun situs web statis berdasarkan konfigurasi proyek yang ditentukan di projects.json
. Ini dapat menghasilkan semua yang diperlukan agar situs web berfungsi sebagai aplikasi web progresif, misalnya berfungsi offline dan dapat diinstal. Itu juga dapat menyebarkannya ke Netlify.
Cantumkan semua proyek yang dikonfigurasi untuk dibangun di projects.json
./pwagenerator.php projects
Bangun, terapkan, dan/atau buat ikon untuk proyek menggunakan konfigurasi proyek di projects.json
./pwagenerator.php [project] [option]
options:
-v verbose
-b build
-i generate icons
-d deploy
Misalnya:
./pwagenerator exampleproject.com -b
Untuk membuat proyek baru, tambahkan ke projects.json
, lalu buat.
-v
): Memberikan keluaran yang lebih verbose untuk opsi lain yang dipilih ( -b
, -i
, atau -d
),-b
): Membangun proyek. Selama proses ini, PWA Generator menghasilkan semua file yang diperlukan agar proyek dapat berfungsi. Lihat Proses Pembuatan untuk informasi lebih lanjut.-i
): Menghasilkan ikon untuk proyek. Selama proses ini, Generator PWA menyiapkan array konfigurasi dan menghasilkan sekumpulan favicon dari file img/favicon.svg
di direktori proyek menggunakan real-favicon.-d
): Menyebarkan proyek. Selama proses ini, Generator PWA menambah versi proyek dan menyebarkan direktori proyek ke Netlify menggunakan set netlify_id
di projects.json
dan netlify-cli. files
Direktori files
berisi file yang disalin ke dalam proyek saat proyek dibuat.
Font di direktori fonts
hanya akan disalin jika terdaftar di objek fonts
di projects.json
, misalnya:
"fonts": {
"heading": "Roboto Slab",
"body": "Roboto"
}
File di direktori opt
hanya akan disalin jika terdaftar di objek opt_files
di projects.json
, misalnya:
"opt_files": [
"opt/google_auth.js"
]
inc
Direktori inc
berisi file yang digunakan untuk menjalankan tugas proyek.
class-build.php
berisi fungsionalitas untuk membangun, menerapkan, dan menghasilkan favicon.class-cli.php
berisi fungsionalitas untuk operasi baris perintah.class-projects.php
berisi fungsionalitas untuk mendapatkan proyek dari projects.json
.class-text.php
berisi fungsionalitas untuk memformat teks.templates
dan Direktori template-parts
Direktori templates
dan template-parts
berisi file yang digunakan untuk membuat halaman.
Ketika sebuah proyek dibangun untuk pertama kalinya, beberapa file dan direktori dibuat di direktori proyek.
index.php
: Tidak akan ditimpa oleh build selanjutnya dan harus berisi markup dan fungsionalitas apa pun yang khusus untuk proyek tersebut.js/main.ts
: Tidak akan ditimpa oleh build mendatang dan harus berisi fungsionalitas khusus untuk proyek tersebut.scss/style.scss
: Tidak akan ditimpa oleh build mendatang dan harus berisi gaya apa pun yang khusus untuk proyek tersebut._redirects
: Netlify mengalihkan file. Dapat berisi aturan pengalihan dan penulisan ulang..gitignore
: Git mengabaikan file. Berisi daftar file dan folder yang tidak boleh dilacak oleh Git.manifest.json
: File manifes aplikasi web. Berisi data yang memberi tahu browser tentang aplikasi web progresif dan bagaimana perilakunya saat dipasang.package.json
: file data proyek npm
. Berisi data proyek untuk manajer paket npm
.package-lock.json
: file versi ketergantungan npm
. Berisi versi ketergantungan untuk paket yang diinstal oleh manajer paket npm
. Ini secara otomatis dihasilkan oleh npm
ketika sebuah paket diinstal.robots.txt
: File robot. Berisi daftar aturan untuk membantu mesin pencari menentukan halaman mana yang harus dan tidak boleh dirayapi.sitemap.xml
: File peta situs. Berisi daftar halaman untuk membantu mesin pencari dengan penemuan konten dan dengan demikian meningkatkan optimasi mesin pencari (SEO).sw.js
: File pekerja layanan. Berisi fungsionalitas yang menyimpan cache aset dan memungkinkan penjelajahan offline dan pengalaman "seperti aplikasi" yang dapat diunduh.tsconfig.json
: File konfigurasi kompilasi Webpack TypeScript.webpack.config.js
: File konfigurasi webpack untuk menghasilkan bundle.[hash].js
dari file js/*.ts
dan scss/*.scss
.fonts
Direktori fonts
berisi file font yang disalin dari files/fonts
selama proses pembuatan. Setiap perubahan yang dilakukan pada direktori ini akan ditimpa oleh versi selanjutnya.
img
Direktori img
berisi gambar dan file yang dihasilkan melalui perintah -i
. favicon.svg
harus ditempatkan di direktori ini sebelum menjalankan perintah itu.
Direktori ini juga harus berisi:
cache_files
di projects.json
. Jika disertakan dalam cache_files
dan objek nav.image
di projects.json
, gambar tersebut akan digunakan di bilah navigasi header atas. Jika disertakan dalam cache_files
dan objek header.image
di projects.json
, gambar tersebut akan digunakan di header utama.share.jpg
yang digunakan untuk berbagi media sosial.posts.json
, yang harus diberi nama URL postingan dengan ekstensi file .jpg
.screenshots
di projects.json
.js
Direktori js
berisi file .ts
yang disalin dari files/js
selama proses pembuatan, dan file bundle.[hash].js
yang dihasilkan dari file .ts
ini dan file di direktori scss
.
Direktori ini juga berisi file main.ts
, yang akan dibuat sebagai file kosong pada build awal. Itu tidak akan ditimpa oleh build selanjutnya dan harus berisi fungsionalitas apa pun yang spesifik untuk proyek tersebut.
Direktori ini juga dapat berisi main.js
jika diperlukan file yang belum dikompilasi. Jika diperlukan, file ini juga harus disertakan dalam objek cache_files
di projects.json
.
scss
Direktori scss
berisi file .scss
yang disalin dari files/scss
selama proses pembuatan.
Direktori ini juga berisi file style.scss
, yang akan dihasilkan pada build awal sebagai file yang hanya berisi deklarasi :root {}
yang berisi font dan warna dari objek fonts
dan colors
di projects.json
. Itu tidak akan ditimpa oleh build selanjutnya dan harus berisi gaya apa pun yang spesifik untuk proyek tersebut.
projects.json
bergantung pada project
yang diteruskan melalui baris perintah.$this->project_data['files']['compile']
digunakan untuk mengkompilasi file ke dalam direktori proyek.$this->project_data['files']['compile']
$this->project_data['files']['copy']
digunakan untuk menyalin file ke direktori proyek.files/scss
dan files/js
ditambahkan ke $this->project_data['files']['copy']
.files/opt
hanya ditambahkan ke $this->project_data['files']['copy']
jika file tersebut juga terdaftar di objek opt_files
di projects.json
, misalnya: "opt_files": [
"opt/google_auth.js"
]
$this->project_data['files']['copy']
.$this->project_data['files']['cache']
digunakan untuk menambahkan file ke file sw.js
untuk di-cache oleh pekerja layanan.data.json
(digunakan untuk membuat halaman tambahan guna menciptakan pengalaman penelusuran seperti aplikasi) dan posts.json
(digunakan untuk membuat postingan blog), ditambahkan ke $this->project_data['files']['cache']
.cache_files
di projects.json
ditambahkan ke $this->project_data['files']['cache']
, misalnya: "cache_files": [
"img/logo_header.svg",
"img/logo_nav.svg",
"img/shortcut.png"
]
files/opt
hanya ditambahkan ke $this->project_data['files']['cache']
jika file tersebut juga terdaftar di objek opt_files
di projects.json
, misalnya: "opt_files": [
"opt/google_auth.js"
]
$this->project_data['files']['cache']
post
(misalnya diekstraksi dari posts.json
), gambar juga ditambahkan ke $this->project_data['files']['cache']
, menggunakan URL halaman dan ekstensi file .jpg
.$this->project_data['files']['cache']
$this->project_data['sitemap']['urls']
untuk membuat file sitemap.xml
nanti.package.json
index.php
scss
dan scss/style.scss
dengan deklarasi :root {}
yang berisi font dan warna dari objek fonts
dan colors
di projects.json
, misalnya "fonts": {
"heading": "Roboto Slab",
"body": "Roboto"
},
"colors": {
"main": {
"normal": "92D7DA",
"dark": "489094"
},
"accent": {
"normal": "FA96C0",
"dark": "B34F78"
}
}
js
dan js/main.ts
opt
direktori.gitignore
dengan node_modules
sw.js
$this->project_data['files']['copy']
ke dalam direktori proyek.bundle.[hash].js
dari file js/*.ts
dan scss/*.scss
yang disediakan menggunakan Webpack melalui webpack-cli, kemudian menggunakan perintah php
dengan project
, page
, dan project_data
diteruskan sebagai argumen untuk kompilasi setiap file dalam $this->project_data['files']['compile']
menjadi file .html
yang diperkecil.manifest.json
. File manifest.json
disalin ke direktori proyek, kemudian dimodifikasi sesuai dengan nilai di projects.json
( categories
, screenshots
, shortcuts
, android_app_id
, dan apple_app_id
).$this->project_data['files']['compile']
dan $this->project_data['files']['copy']
:***FILES***
: File dari $this->project_data['files']['cache']
***URLS***
: URL dari $this->project_data['redirects']
dan $this->project_data['sitemap']['urls']
***REDIRECT_URLS***
: URL dari $this->project_data['files']['compile']
dan $this->project_data['redirects']
***URL***
: URL proyek dari $this->project_data['url']
***TITLE***
: Judul proyek dari $this->project_data['title']
***DESCRIPTION***
: Deskripsi proyek dari $this->project_data['description']
***VERSION***
: Versi proyek dari $this->project_data['version']
(diekstrak dari sw.js
)***DATE***
: tanggal('Ym-d') Ini adalah font yang tersedia untuk digunakan di objek fonts
di projects.json
, misalnya:
"fonts": {
"heading": "Roboto Slab",
"body": "Roboto"
}
Proyek sumber terbuka berikut telah dibangun menggunakan PWA Generator. Lihat situs web, repo GitHub, dan konfigurasi proyek untuk projects.json
di bawah.
{
"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": []
}
Kontribusi dipersilakan! Jika Anda menemukan masalah, atau mempunyai ide untuk perbaikan, jangan ragu untuk membuat masalah.