#package-json #json-schema #json #package #json-file #node #npm

package_json_schema

解析 package.json 文件内容并作为 PackageJson 结构体消耗结果

5 个版本

0.2.1 2023年6月7日
0.2.0 2022年12月11日
0.1.2 2022年8月1日
0.1.1 2022年8月1日
0.1.0 2022年8月1日

#852编码

Download history 4/week @ 2024-03-13 1/week @ 2024-03-20 13/week @ 2024-03-27 29/week @ 2024-04-03 2/week @ 2024-04-24 8/week @ 2024-05-01 8/week @ 2024-05-08 41/week @ 2024-05-15 18/week @ 2024-05-22 6/week @ 2024-05-29 13/week @ 2024-06-05 29/week @ 2024-06-12 34/week @ 2024-06-19 52/week @ 2024-06-26

每月 129 次下载
4 个 包中使用

Unlicense 协议

37KB
586

📦️ package_json_schema


package.json 文件加载为 PackageJson 结构体

Crate Docs Continuous integration badge for github actions License


为什么?

您希望加载一个 package.json 文件并将其作为结构体进行交互。


安装

将此行添加到您的 [dependencies] 部分 Cargo.toml

package_json_schema = "0.2.1"

如果您想包含验证,请添加 validate 功能。

package_json_schema = { version = "0.2.1", features = ["validate"] }

这会将 validator 包作为依赖项添加,并将 .validate() 方法添加到 PackageJson 结构体中。字段将根据 JSON 模式规范 进行验证。


用法

以下示例展示了如何加载一个 package.json 文件并将其作为结构体使用。

use package_json_schema::PackageJson;

let contents = r###"
{
  "name": "my-package",
  "version": "0.0.1",
  "dependencies": {
    "@sveltejs/kit": "1.0.0-next.396"
  },
  "peerDependencies": {
    "aws-sdk": "2.1185.0"
  }
}
"###;

let package_json = PackageJson::try_from(contents).unwrap();
assert_eq!(package_json.name.unwrap(), "my-package");
assert_eq!(package_json.version.unwrap(), "0.0.1");

此包将加载 package.json 文件内容的工作留给了用户。以下是从文件内容中加载并解析内容到结构体的示例。

use std::fs::read_to_string;
use package_json_schema::PackageJson;

let contents = read_to_string("./tests/fixtures/1/package.json").unwrap();
let package_json = PackageJson::try_from(contents).unwrap();

assert_eq!(package_json.name.unwrap(), "test");

您也可以从构建器创建 package.json 文件。

use package_json_schema::PackageJson;
use package_json_schema::AdditionalFields;
use package_json_schema::Person;
use indexmap::IndexMap;

let mut additional_fields: AdditionalFields = IndexMap::new();
additional_fields.insert("custom".into(), "value".into());

let package_json = PackageJson::builder()
  .name("awesome")
  .author(Person::String("Tester".into()))
  .other(additional_fields)
  .build();
let string_value = package_json.try_to_string().unwrap();

assert_eq!(
  string_value,
  r#"{"name":"awesome","author":"Tester","custom":"value"}"#
);

要验证 package.json 字段,请启用 validate 功能。

package_json_schema = { version = "0.2.1", features = ["validate"] }

然后使用 validate 方法。

use std::fs::read_to_string;
use package_json_schema::PackageJson;
#[cfg(feature = "validate")]
use validator::Validate;

let contents = read_to_string("./tests/fixtures/1/package.json").unwrap();
let package_json = PackageJson::try_from(contents).unwrap();

#[cfg(feature = "validate")]
package_json.validate().unwrap();

贡献

devenv 用于为该项目提供一个可重复的开发环境。请按照 入门说明 操作。

为了自动加载环境,您应该 安装 direnv,然后加载 direnv

# The security mechanism didn't allow to load the `.envrc`.
# Since we trust it, let's allow it execution.
direnv allow .

此时,您应该能在终端看到可用的 nix 命令。

devenv 升级

如果您有 devenv 的旧版本,可以通过运行以下命令来更新它。如果您有更简单的方法,请创建一个 PR,我将更新这些文档。

nix profile list # find the index of the nxi package
nix profile remove <index>
nix profile install --accept-flake-config github:cachix/devenv/<version>

许可证

本项目采用 Unlicense 许可证

依赖项

~4–6MB
~111K SLoC