此包的最新版本(3.0.1)没有可用的许可证信息。

使用Statamic生成静态站点。

安装数: 198,386

依赖: 0

建议者: 0

安全性: 0

星标: 230

关注者: 12

分支: 24

公开问题: 33

类型:statamic-addon

3.0.1 2024-05-17 19:40 UTC

This package is auto-updated.

Last update: 2024-08-25 16:13:16 UTC


README

使用Statamic生成静态站点。

安装

您可以使用以下命令安装Static Site Generator包

php please install:ssg

该命令将通过Composer安装statamic/ssg包,可选地发布配置文件,并提示您是否希望安装spatie/fork包以运行多个工作进程

用法

运行以下命令

php please ssg:generate

您的站点将被生成到您可以根据需要部署的目录中。以下面的部署示例获取灵感。

多个工作进程

为了提高性能,您可以将页面生成分散到多个工作进程中。这需要Spatie的Fork包。然后您可以选择要使用的工人数。您可以使用与CPU核心数一样多的工作进程。

composer require spatie/fork
php please ssg:generate --workers=4

路由

路由将不会自动生成。您可以通过将它们添加到配置文件中的urls数组来生成任何您希望生成的额外URL。

'urls' => [
    '/this-route',
    '/that-route',
],

您还可以排除单个路由或带有通配符的路由组。这将覆盖urls配置中的任何内容。

'exclude' => [
    '/secret-page',
    '/cheat-codes/*',
],

动态路由

您可以通过向addUrls方法提供一个返回数组的闭包来动态添加URL。

use Statamic\StaticSite\SSG;

class AppServiceProvider extends Provider
{
    public function boot()
    {
        SSG::addUrls(function () {
            return ['/one', '/two'];
        });
    }
}

分页路由

在您的antlers模板中检测到分页的地方(例如,如果您在collection标签上使用paginate参数),将自动生成多个页面,具有/articles/page/2样式的URL。

您可以在config/statamic/ssg.php中配置自定义路由样式。

'pagination_route' => '{url}/{page_name}/{page_number}',

生成后回调

您可以选择在站点生成后定义额外的步骤执行。

use Statamic\StaticSite\SSG;

class AppServiceProvider extends Provider
{
    public function boot()
    {
        SSG::after(function () {
            // eg. copy directory to some server
        });
    }
}

Glide图片

Statamic的默认配置是使用“动态”图片,这意味着glide标签将只输出URL。图片本身将在访问URL时生成。对于静态站点,这不再有意义,因为通常会在没有动态Glide路由的地方部署。

默认情况下,SSG将自动重新配置Glide,在每次使用glide标签时将图片生成到img目录中。这本质上是Glide的自定义静态路径选项

您可以自定义图片的生成位置

'glide' => [
    'directory' => 'images',
],

如果您正在使用自定义Glide磁盘,您可以将SSG告知不要更改它

'glide' => [
    'override' => false,
],

然后生成完成后复制图片(或创建符号链接)

SSG::after(function () {
    $from = public_path('img');
    $to = config('statamic.ssg.destination').'/img';

    app('files')->copyDirectory($from, $to);
    // or
    app('files')->link($from, $to);
});

触发命令失败

如果您在CI环境中使用SSG,您可能希望如果任何页面没有生成(例如,防止部署不完整的站点),则防止命令成功。

默认情况下,即使有未生成的页面,命令也会完成并退出,返回成功代码。您可以配置SSG在出现错误时提前失败,甚至是在警告时。

'failures' => 'errors', // or 'warnings'

部署示例

以下示例假设您的流程是在本地创作内容,而不是在生产中使用控制面板。

部署到 Netlify

部署由提交到Git并将代码推送到GitHub触发。

  • 在您的 Netlify 账户中创建一个站点
  • 将站点链接到您希望使用的GitHub仓库
  • 添加构建命令 php please ssg:generate(如果需要编译css/js,请确保添加该命令并在生成静态站点文件夹之前执行它。例如,npm install && npm run build && php please ssg:generate)。
  • 设置发布目录 storage/app/static

当您的站点有了 APP_URL...

  • 将其设置为环境变量。添加 APP_URL https://thats-numberwang-47392.netlify.com

最后,在本地使用 php artisan key:generate 生成一个 APP_KEY 并复制其值,然后...

  • 将其设置为环境变量。添加 APP_KEY [your app key value]

S3 资产容器

如果您将资产存储在S3桶中,使用的.env需要与Laravel默认的有所不同,因为它们已被Netlify保留。例如,您可以修改如下

# .env
AWS_S3_ACCESS_KEY_ID=
AWS_S3_SECRET_ACCESS_KEY=
AWS_S3_DEFAULT_REGION=
AWS_S3_BUCKET=
AWS_URL=

务必也更新您的 s3 磁盘配置中的这些设置

// config/filesystems.php
's3' => [
    'driver' => 's3',
    'key' => env('AWS_S3_ACCESS_KEY_ID'),
    'secret' => env('AWS_S3_SECRET_ACCESS_KEY'),
    'region' => env('AWS_S3_DEFAULT_REGION'),
    'bucket' => env('AWS_S3_BUCKET'),
    'url' => env('AWS_URL'),
],

部署到 Vercel

部署由提交到Git并将代码推送到GitHub触发。

  • 创建一个名为 ./build.sh 的新文件,并粘贴下面的代码片段。
  • 在终端运行 chmod +x build.sh 确保文件在部署时可以被执行。
  • 在您的 Vercel 账户中导入一个新的站点
  • 将站点链接到您希望使用的GitHub仓库
  • 添加构建命令 ./build.sh
  • 设置输出目录为 storage/app/static
  • 在项目设置中添加环境变量:APP_KEY <从开发中复制 & 粘贴>

build.sh 代码

将以下片段添加到 build.sh 文件中,以安装PHP、Composer并运行 ssg:generate 命令

#!/bin/sh

# Install PHP & WGET
yum install -y amazon-linux-extras
amazon-linux-extras enable php7.4
yum clean metadata
yum install php php-{common,curl,mbstring,gd,gettext,bcmath,json,xml,fpm,intl,zip,imap}
yum install wget

# INSTALL COMPOSER
EXPECTED_CHECKSUM="$(wget -q -O - https://composer.github.io/installer.sig)"
php -r "copy('https://getcomposer.org.cn/installer', 'composer-setup.php');"
ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")"

if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ]
then
    >&2 echo 'ERROR: Invalid installer checksum'
    rm composer-setup.php
    exit 1
fi

php composer-setup.php --quiet
rm composer-setup.php

# INSTALL COMPOSER DEPENDENCIES
php composer.phar install

# GENERATE APP KEY
php artisan key:generate

# BUILD STATIC SITE
php please ssg:generate

部署到 Surge

前提条件:使用 npm install --global surge 进行安装。您的第一次部署将涉及通过命令行创建账户。

  • 使用命令 php please ssg:generate 进行构建
  • 使用 surge storage/app/static 进行部署

部署到 Firebase hosting

前提条件:按照指示进行开始使用Firebase hosting

  • 一旦设置好托管,请确保您的 firebase.json 中的 public 配置设置为 storage/app/static
  • (可选)添加 predeploy 配置以运行 php please ssg:generate
  • 运行 firebase deploy