18 个不稳定版本 (3 个重大变更)

0.4.0 2024 年 6 月 17 日
0.3.0 2024 年 5 月 19 日
0.2.2 2024 年 1 月 14 日
0.2.1 2023 年 11 月 21 日
0.0.0 2023 年 6 月 26 日

#122 in 构建工具

Download history 285/week @ 2024-04-08 28/week @ 2024-04-15 14/week @ 2024-04-22 392/week @ 2024-04-29 240/week @ 2024-05-06 108/week @ 2024-05-13 85/week @ 2024-05-20 5/week @ 2024-05-27 129/week @ 2024-06-03 182/week @ 2024-06-10 171/week @ 2024-06-17 63/week @ 2024-07-01 10/week @ 2024-07-08

73 每月下载次数
cargo-playdate 中使用

MIT/Apache

210KB
5K SLoC

Playdate 包构建工具

包含清单格式和“通过元数据构建资产”的实用工具。


元数据

以下是示例中的元数据格式说明

包信息

以下字段用于生成包清单

# Playdate Package Info
# official doc: https://sdk.play.date/#pdxinfo
[package.metadata.playdate]
bundle-id = "com.yourcompany.game"
name = "My Game"               # default is package.name
author = "Alex"                # default is package.authors
version = "0.0"                # default is package.version
description = "short about"    # default is package.description

image-path = "img/system"
launch-sound-path = "sfx/jump"

content-warning = "This game contains mild realistic, violence and bloodshed."
content-warning2 = "Really scary game."

build-number = 42 # also can be string, e.g "42"

# also extra fields are supported
# acceptable types of values: string, number, boolean
foo = "bar"

注意,仅 bundle-id 是必需的,其他字段是可选的。

特定目标包信息

包信息 可以通过 binexample 的特殊 表格 来覆盖。所有清单字段都是可接受的,但可选。

支持两种格式。第一种类似于 cargo 的目标

[[package.metadata.playdate.example]]
target = "existing-example-name" # pointing to cargo-target name
# next is same as for main manifest fields, all are optional:
bundle-id = "com.yourcompany.game.example"
name = "My Example"

第二种是表格

[package.metadata.playdate.example.existing-example-name]
bundle-id = "com.yourcompany.game.example"
content-warning = "Scary experimental stuff."

重要:你应在同一文档中不要混合这两种格式。

资产

Playdate 包构建系统(如 cargo-playdate)的说明。

描述资产的存储位置,以及它们在包中应该如何存在。

[package.metadata.playdate.assets]

开发资产

仅用于示例或测试的资产,继承自主要资产。

[package.metadata.playdate.dev-assets]

开发资产的工作方式与主要资产相同,以下进一步说明 assets 指的是 assetsdev-assets

设置资产有两种选项 - 列表或表格

资产列表

声明资产最简单的方法是路径列表。

  • 路径可以包含 glob 模式,例如 /**/*o*e.png
  • 路径可以包含环境变量,例如 ${MY_VARIABLE}
  • 路径可以是绝对路径或相对于 crate 根的相对路径

因此,所有匹配的文件都将被包含。

[package.metadata.playdate]
assets = ["assets/**/*.wav", "assets/**/*.png"]

如果路径中包含 glob,则文件的最终路径以匹配的路径部分开始,例如:

  • 对于 assets/**/*.wav,如果 assets 包含 foo 目录,则它将是 foo/some.wav

资产表

这是指定应包含哪些资产的一种复杂方式。

  • 左侧是资产应在包中的路径,

  • 右侧是应找到源(s)的路径。

  • 两侧都可以包含 glob。

  • 两侧都可以包含类似于 ${MY_VARIABLE} 的环境变量查询。

  • 左侧路径相对于构建 playdate-package 根目录是相对的。

  • 右侧路径可以是绝对路径或相对于 crate 根目录的相对路径。

[package.metadata.playdate.assets]
# Next line means that all png-files in SystemAssets dir wil be included and placed in img/system directory
"img/system/" = "${PLAYDATE_SDK_PATH}/Examples/Game Template/Source/SystemAssets/*.png"
# Next line means that jump.wav will be included and placed in package as sfx/jump.wav
"sfx/jump.wav" = "${PLAYDATE_SDK_PATH}/Examples/Level 1-1/Source/sfx/jump.wav"
# Next line means that img.png will be included in root of package
"/" = "assets/img.png" # path is relative to crate root

此外,这种方法还支持简单的包含和排除指令。

"rel-to-crate-root/file-to-include" = true   # left hand is a local path, relative to crate-root,
"file-to-exclude" = false  # OR resulting path that where asset will be in the resulting package.

选项

包构建选项,Playdate 包构建系统(如 cargo-playdate)的指令。

[package.metadata.playdate.options]
workspace = true           # use `workspace.metadata.playdate.options` as defaults (default is `false`)
assets.dependencies = true # just set or override corresponding value from `workspace.metadata`

字段 workspace 与 cargo 的功能 从工作区继承依赖项 类似,通过 workspace.metadata.playdate.options 开启结构继承 package.metadata.playdate.options

可用的选项是 assets,请参阅 资产选项

目前没有更多选项,只是为将来使用而保留。

此配置仅用于主要包。主要包是用户在命令行上选择的包,无论是通过 -p 标志还是根据当前目录和默认工作区成员的默认值。因此,顶级包的 options 应用于整个依赖项树,忽略依赖项的 options。因此,只有最终用户才能控制资产的收集和构建方式。

注意:这取决于实现,上面的示例是如何在参考实现 cargo-playdate 中工作的。

资产选项

这是收集您包中的资产的方式。

[package.metadata.playdate.options.assets]
dependencies = true    # allow to build assets for dependencies (default is `false`)
overwrite = true       # overwrite existing assets in build dir (default is `true`, alias: `override`)
method = "link"        # "copy" or "link"   (default is `link`)  -  how assets should be collected, make symlinks or copy files
follow-symlinks = true # follow symlinks    (default is `true`)

字段 overwrite 还允许更高版本的依赖项覆盖更深依赖项的资产。


此软件不受 Panic 的赞助或支持。

依赖项

~5–17MB
~174K SLoC