@alma-cdk/project

中文文档
3.0.1发布于 2026/08/10Apache-2.0TypeScriptCommonJS构建来源已验证近 30 天下载 1万

“框架”项目

中文使用文档
文档目录5 节
  1. 账户策略
  2. 开始
  3. 文档
  4. 移徙指南
  5. 路线图

Alma CDK Project

Stability: Stable Versioning: SemVer 2.0.0 release Quality Gate Status Coverage


[Tip] 从 v0 改为 v1看到了吗 移徙指南。 。 。 .


有意见的CDK“框架”,包括下列建筑和公用事业:

  • 向多个账户部署多个环境(多对多关系)

  • 通过标准化道具管理账户配置(不再随机配置文件)

  • 查询您的 CDK 代码中的账户和/或环境特定信息

  • 动态和短寿命“环境”

  • 启用定义明确的标记

  • 为CDK项目提供结构和共同公约

  • 通过运行时上下文来选择目标账户和环境( e) :

    npx cdk deploy -c account=dev -c environment=feature/abc-123
    

    ...这意味着你不需要预先定义所有可能的环境!

账户策略

根据使用大小写的不同,您可以在1-3 AWS 账户中选择配置,其环境如下:

  1. 共用账户shared(中文(简体) )数字 :

    default-multi

  2. 多账户dev+ 键prod(中文(简体) )建议数字 :

    default-multi


  1. 多账户dev+ 键preprod+ 键prod(中文(简体) )数字 :

    default-multi


开始

A. 界定《公约》 环境 项目资源; 一开始,它可能看起来很复杂 但一旦你进入 定义你的项目 这种方式开始有意义:

  1. 选择您的 账户战略

  2. 初始化一个新的 Project 改为 cdk.App数字 :

    // bin/app.ts
    import { Project, AccountStrategy } from '@alma-cdk/project';
    
    const project = new Project({
      // Basic info, you could also read these from package.json if you want
      name: 'my-cool-project',
      author: {
        organization: 'Acme Corp',
        name: 'Mad Scientists',
        email: '[email protected]',
      },
    
      // If not set, defaults to one of: $CDK_DEFAULT_REGION, $AWS_REGION or us-east-1
      defaultRegion: 'eu-west-1',
    
      // Configures the project to use 2 AWS accounts (recommended)
      accounts: AccountStrategy.two({
        dev: {
          id: '111111111111',
          config: {
            // whatever you want here as [string]: any
            baseDomain: 'example.net',
          },
        },
        prod: {
          id: '222222222222',
          config: {
            // whatever you want here as [string]: any
            baseDomain: 'example.com',
          },
        },
      }),
    })
    
  3. 定义堆栈 extends SmartStack 资源:

    // lib/my-stack.ts
    import { Construct } from 'constructs';
    import { StackProps, RemovalPolicy } from 'aws-cdk-lib';
    import { SmartStack, Name, UrlName, PathName, EC } from '@alma-cdk/project';
    
    export class MyStack extends SmartStack {
      constructor(scope: Construct, id: string, props: StackProps) {
        super(scope, id, props);
    
        new dynamodb.Table(this, 'Table', {
          removalPolicy: EC.isStable(this) ? RemovalPolicy.RETAIN : RemovalPolicy.DESTROY,
    
          tableName: Name.it(this, 'MyTable'),
          partitionKey: {
            type: dynamodb.AttributeType.STRING,
            name: 'pk',
          },
          // StagingMyTable
        });
    
        new events.EventBus(this, 'EventBus', {
          eventBusName: Name.withProject(this, 'MyEventBus'),
          // MyCoolProjectStagingMyEventBus
        });
    
        new s3.Bucket(this, 'Bucket', {
    
          removalPolicy: EC.isStable(this) ? RemovalPolicy.RETAIN : RemovalPolicy.DESTROY,
          autoDeleteObjects: EC.isStable(this) ? false : true,
    
          bucketName: UrlName.globally(this, 'MyBucket'),
          // acme-corp-my-cool-project-feature-foo-bar-my-bucket
        });
    
        new ssm.StringParameter(this, 'Parameter', {
          stringValue: 'Foo',
          tier: ssm.ParameterTier.ADVANCED,
          parameterName: PathName.withProject(this, 'MyNamespace/MyParameter'),
          // /MyCoolProject/Staging/MyNamespace/MyParameter
        });
      }
    }
    
  4. 定义新 环境 哪个 extends EnvironmentWrapper 并初始化所有环境 SmartStack 在 :

    // lib/environment.ts
    import { Construct } from 'constructs';
    import { EnvironmentWrapper } from '@alma-cdk/project';
    import { MyStack } from './my-stack';
    
    export class Environment extends EnvironmentWrapper {
      constructor(scope: Construct) {
        super(scope);
        new MyStack(this, 'MyStack', { description: 'This is required' });
      }
    }
    

    生成堆栈属性( 已提供) environment=staging:

    财产示例值
    stackName"MyCoolProject-Environment-Staging-MyExampleStack"
    terminationProtectiontrue
    env.account"111111111111"
    env.region"eu-west-1"

    生成堆栈及其资源的标记( 已提供) environment=staging:

    财产示例值
    Accountdev
    Environmentstaging
    Projectmy-cool-project
    AuthorMad Scientists
    OrganizationAcme Corp
    Contact[email protected]
  5. 最后将环境与 Project 范围 :

    // bin/app.ts
    import { Project, Accounts } from '@alma-cdk/project';
    import { Environment } from '../lib/environment';
    
    const project = new Project({/* removed for brevity, see step 1 */})
    
    new Environment(project);
    

文档

请参看关于特定类别和方法的详细文档 构造.dev。 。 。 .

一般来说,你最感兴趣的是:

  • 项目
  • 账户战略
  • 智能软件
  • 账户
  • 账户连接( AC)
  • 环境联系( EC)
  • 名称 / UrlName / 路径Name

移徙指南

从 v0 改为 v1看到了吗 移徙指南。 。 。 .

路线图

现在看 问题36。 。 。 .


版本与发布记录

@alma-cdk/project 共发布 53 个版本,首次发布于 2022/08/16;过去 12 个月发布了 7 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.0.1latest2026/08/102 个月前
3.0.02026/08/102 个月前
2.1.12026/04/077 个月前
2.1.02026/04/077 个月前
2.0.22026/03/187 个月前
2.0.12026/02/168 个月前

其他发布通道:beta → 1.0.0-beta.16。

关于 @alma-cdk/project 的常见问题

@alma-cdk/project 是什么?

“框架”项目

如何安装 @alma-cdk/project?

在项目目录运行 npm install @alma-cdk/project,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:aws-cdk-lib(^2.260.0)、constructs(^10.7.2)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@alma-cdk/project 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@alma-cdk/project 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@alma-cdk/project 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 22 <= 26。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@alma-cdk/project 可以商用吗?

@alma-cdk/project 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@alma-cdk/project 的下载量有多少?

根据 npm 官方下载统计,@alma-cdk/project 在 2026/10/06 – 2026/11/04 这 30 天内被下载 10,361 次,日均约 345 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@alma-cdk/project 还在维护吗?

最新版本 3.0.1 发布于 2026/08/10(2 个月前);至今共发布 53 个版本,其中过去 12 个月发布了 7 个;首次发布于 2022/08/16。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。