@aspectjs/common

中文文档
0.5.4发布于 2025/04/12MITTypeScriptESM + CJS零依赖近 30 天下载 2205

Spectjs - 常用工厂和工厂

中文使用文档
文档目录6 节
  1. Typescript的AOP框架,与浏览器和节点兼容.
  2. 摘要
  3. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF…
  4. 为什么?
  5. 开始 :
  6. 页:1

外观JS

AspectJS logo

Typescript的AOP框架,与浏览器和节点兼容.

ci-status coverage report npm version license NPM Downloads bundlejs Latest Release



摘要

受到 视角J java框架, 外观JS 杠杆 ES 装饰者 带来 面向Javascript和Typescript.

example

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我们得去见见见

解开 叠叠。 。 。 .

为什么?

ECMAScript 装饰器 很棒: 它们允许开发者 隐藏锅炉板代码 简单 @ 签名,保持代码干净,容易读取,容易写作。 广泛用于流行项目,例如: 角质, (中文(简体) ), (原始内容存档于2019-09-21) (英语). Nest.js 或者说 类型ORM,装饰者有一个主要的缺点:他们带着自己的内置行为来,使得工具之间的互操作性变得困难,并且防止它们被重新用于其他用途.

外观JS 采取不同的做法,提出两个重要概念: 说明 财务报告和审定财务报表 方面。 。 。 .

  • 一个 注释 本质上是标记目标(类, (中文(简体) ), 属性, (中文(简体) ), 方法 或者说 参数作为进一步增强的候选项目.
  • 方面 可以选择性地启用,将新行为引入注释元素.
  • 无问题
    const A = function( target: Function) {
       // behaviorA
    }
    const B = function( target: Function) {
       // behaviorB
    }
     
    @A() 
    @B()
    class MyClass {}
    
  • 四. 与各方面有关的问题
    const af = new AnnotationFactory('my.org')
    const A = af.create('A');
    const B = af.create('B');
    
    @A()
    @B()
    class MyClass {}
    
    @Aspect()
    class AB_Aspect {
      // behavior A
      // behavior B
    }
    
    getWeaver().enable(new AB_Aspect())
    

开始 :

  • 安装软件包

    npm i @aspectjs/core @aspectjs/common
    
  • 创建注释 :

    // toasted.annotation.ts
    import { AnnotationFactory, AnnotationKind } from '@aspectjs/common';
    
    const ANNOTATION_FACTORY = new AnnotationFactory('demo');
    const Toasted = ANNOTATION_FACTORY.create(
      AnnotationKind.METHOD,
      'Toasted', 
      function Toasted() {},
    );
    
  • 在类、属性、方法或参数上使用注释:

    // main.ts
    class Main {
      @Toasted()
      run() {
        console.log('run');
      }
    }
    
  • 宣布注释引发的一个方面:

    // toasted.aspect.ts
    import { Around, AroundContext, Aspect, JoinPoint, on } from '@aspectjs/core';
    @Aspect()
    class ToastedAspect {
      @Around(on.methods.withAnnotations(Toasted))
      toast(ctxt: AroundContext, jp: JoinPoint, jpArgs: unknown[]) {
        const result = jp(...jpArgs);
        const text = `${ctxt.target.label} completed successfully`;
        showToast(text);
        return result;
      }
    }
    
  • 启用侧面

    // aop.ts
    import { getWeaver } from '@aspectjs/core';
    
    getWeaver().enable(new ToastedAspect());
    

页:1

关于更高级的用法,请读取文件: https://aspectjs.gitlab.io/ 互联网档案馆的存檔,存档日期2013-12-02。 。 。 .

麻省理工学院

版本与发布记录

@aspectjs/common 共发布 17 个版本,首次发布于 2023/07/05;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.5.4latest2025/04/121.6 年前
0.5.32024/09/242 年前
0.5.12024/09/232 年前
0.5.02024/09/232 年前
0.4.42024/09/232 年前
0.4.32024/09/172 年前

关于 @aspectjs/common 的常见问题

@aspectjs/common 是什么?

Spectjs - 常用工厂和工厂

如何安装 @aspectjs/common?

在项目目录运行 npm install @aspectjs/common,或使用 pnpm add / yarn add / bun add。

@aspectjs/common 支持 TypeScript 吗?

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

@aspectjs/common 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@aspectjs/common 可以商用吗?

@aspectjs/common 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@aspectjs/common 的下载量有多少?

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

@aspectjs/common 还在维护吗?

最新版本 0.5.4 发布于 2025/04/12(1.6 年前);至今共发布 17 个版本,其中过去 12 个月发布了 0 个;首次发布于 2023/07/05。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。