Rush Stack商店博客活动
跳至主要内容

启用策略

rush-schema.json JSON 模式定义了可以在rush.json 中指定的其他一些设置。

projectFolderMinDepth: 控制文件夹大小

Rush 仓库可能变得非常大。当您拥有大量项目(可能还有多个仓库)时,强制执行一个标准结构非常有用,该结构可以立即清楚地显示哪些文件夹包含可构建的项目。我们建议使用以下约定

  • 在仓库中,顶层文件夹是“类别文件夹”(例如“~/demo/libraries”)
  • 项目文件夹始终嵌套在类别文件夹下(例如“~/demo/libraries/lib1”)
  • 项目文件夹始终必须位于第二级(例如,我们禁止嵌套,例如“~/demo/libraries/lib1/lib2”)
  • 跨项目文件始终存储在公共文件夹中(例如“~/demo/common/docs”,“~demo/common/scripts”等)
  • 这些规则没有例外

如果我们想为我们的演示仓库采用此策略,我们可以将项目移动到类别文件夹中,如下所示

~/demo/apps/application
~/demo/libraries/lib1
~/demo/libraries/lib2

...然后使用~/demo/rush.json 中的这些设置强制执行项目必须位于第二级

  // The minimum folder depth for the projectFolder field.
// (The default value is 1, i.e. no slashes in the path name.)
"projectFolderMinDepth": 2,
// The maximum folder depth for the projectFolder field.
// (The default value is 2, i.e. a single slash in the path name.)
"projectFolderMaxDepth": 2,

allowedEmailRegExps: 避免私人电子邮件地址

Git 要求每个提交都附带姓名和电子邮件地址。但是,这些字段没有验证,它们的默认值来自您 PC 上的全局设置,很容易忘记。在使用 Git 工作时,人们经常会意外地使用意外的电子邮件地址进行提交,看起来……不太专业。如果仓库托管在 GitHub 上,这些电子邮件地址会立即通过 GitHub REST API 可查询,成为不道德的垃圾邮件发送者的易于获取的目标。(您 GitHub 帐户的隐私设置不会影响“git commit”。)

Rush 可以提供帮助。rush.json 中的“gitPolicy”设置允许您为仓库指定可接受的电子邮件模式列表。这些模式是正则表达式。(由于它们位于 JSON 字符串文字中,请注意反斜杠必须转义两次。)

  "gitPolicy": {
// A list of regular expressions describing allowable e-mail patterns
// for Git commits. They are case-insensitive anchored JavaScript RegExps.
// Example: ".*@example\\.com"
"allowedEmailRegExps": [
// Require GitHub scrubbed e-mails
"[^@]+@users\\.noreply\\.github\\.com"
],

// An example valid e-mail address for "Mr. Example" that conforms to one
// of the allowedEmailRegExps. Example: "mr-example@contoso.com"
"sampleEmail": "mrexample@users.noreply.github.com"
},

无论何时开发者运行rush install,Rush 都会检查他们的电子邮件地址是否符合其中一种模式。如果没有,它会显示类似这样的警告

rush install
Rush Multi-Package Build Tool

Checking Git policy for this repository.

Hey there! To keep things tidy, this repo asks you to submit your Git commmits
using an e-mail like this pattern:

[^@]+@users\.noreply\.github\.com

...but yours is configured like this:

Bob <bobbles@somewhere.sketchy.int>

To fix it, you can use commands like this:

git config --local user.name "Mr. Example"
git config --local user.email "mrexample@users.noreply.github.com"

Aborting, so you can go fix your settings. (Or use --bypass-policy to skip.)

approvedPackagesPolicy: 检查新的 NPM 依赖项

您的团队中是否有些人不断发现令人兴奋的新库并将它们添加到您的 package.json 中?这很快就会失控,尤其是在需要对外部代码进行法律或安全审查的环境中。approvedPackagesPolicy 功能允许您检测何时引入新的 NPM 依赖项。

由于通常需要不同级别的审查(例如,对于交付产品、实习生项目或内部库),我们区分“审查类别”。这使我们能够为整个项目类别批准一个包,同时在其他地方使用该依赖项时仍然收到提醒。

继续来自设置新仓库的示例场景,以下是如何更新rush.json 以定义“已发布”与“内部”项目的审查类别

{
"rushVersion": "4.0.0",
"npmVersion": "5.5.1",
"nodeSupportedVersionRange": ">=8.9.0 <9.0.0",

"approvedPackagesPolicy": {
"reviewCategories": [ "published", "internal" ],
// We don't need to review @types packages, because we can assume
// the untyped package should already have been approved
"ignoredNpmScopes": [ "@types" ]
},

"projects": [
{
"packageName": "application",
"projectFolder": "application",
"reviewCategory": "internal"
},
{
"packageName": "lib1",
"projectFolder": "lib1",
"reviewCategory": "internal"
},
{
"packageName": "lib2",
"projectFolder": "lib2",
"reviewCategory": "published"
}
]
}

当您运行rush install时,它将创建两个文件来报告您的依赖项。这些文件应该添加到 Git 中,并且可以配置为更改需要批准

  • ~/demo/common/config/rush/browser-approved-packages.json: 在 Web 浏览器中批准使用的包。这通常是两种类型中更严格的一种,因此默认情况下,所有新包都会添加到此文件中。对于 Web 浏览器依赖项,审查讨论通常侧重于:最小化后的代码有多大?许可证是什么?是否存在安全问题?
  • ~/demo/common/config/rush/nonbrowser-approved-packages.json: 除了在 Web 浏览器中使用之外,在所有地方都批准使用的包。此审查讨论通常侧重于:它会将多少混乱引入我们的 node_modules 文件夹?我们是否已经拥有等效的包?里面是否包含任何实际代码,还是只是另一个包的脆弱包装?

在运行rush install后,browser-approved-packages.json 文件可能如下所示

{
"packages": [
{
"name": "@rushstack/heft",
"allowedCategories": [ "internal" ]
},
{
"name": "@rushstack/node-library-build",
"allowedCategories": [ "internal", "published" ]
},
{
"name": "semver",
"allowedCategories": [ "internal", "published" ]
}
]
}

例如,此文件显示外部依赖项@rushstack/heft 在“内部”项目的 package.json 文件中找到(假设是~/demo/lib1),但在任何“公共”项目中都没有找到(例如~/demo/application)。

Rush 无法检测 NPM 包是否用于浏览器。由于这些都是非浏览器文件,您必须手动将它们移动到另一个文件browser-approved-packages.json

批准如何工作

无论何时运行rush install,这些文件中的内容都将扩展以匹配 package.json 中的当前内容。此文件应该提交到 Git。当开发者创建拉取请求时,PR 差异可以用于(例如)触发特殊批准。