# @aspectjs/core 中文文档

规范地址：https://npmcn.com/package/%40aspectjs/core/

版本：0\.5\.4
npm 元数据更新时间：2025-04-11T21:38:27.461Z
中文译文更新时间：2026-11-07T07:18:52.712Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40aspectjs/core
原文对照：https://npmcn.com/package/%40aspectjs/core/?lang=original
项目主页：https://aspectjs.gitlab.io/
源码仓库：https://github.com/NicolasThierion/aspectjs

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：1.8 MB，163 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- peer 依赖：@aspectjs/common ^0\.5\.4
- 首次发布：2020-11-27T23:45:50.460Z
- 最新版本发布：2025-04-11T21:38:27.288Z
- 近 30 天下载量：2013（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：19（近 12 个月 0 个）

## 中文简介

基于装饰器的外观定向编程, 用于浏览器和节点

## 安装

```sh
npm install @aspectjs/core
```

也可以使用：`pnpm add @aspectjs/core`、`yarn add @aspectjs/core`、`bun add @aspectjs/core`

## README

# 外观JS

[![AspectJS logo](https://aspectjs.gitlab.io/logo.png)](https://github.com/NicolasThierion/aspectjs)

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

[![ci-status](https://gitlab.com/aspectjs/aspectjs/badges/main/pipeline.svg)](https://gitlab.com/aspectjs/aspectjs) [![coverage report](https://gitlab.com/aspectjs/aspectjs/badges/main/coverage.svg?job=coverage)](https://gitlab.com/aspectjs/aspectjs/-/commits/main) [![npm version](https://img.shields.io/npm/v/@aspectjs/core.svg)](https://www.npmjs.com/package/@aspectjs/core) [![license](https://img.shields.io/npm/l/@aspectjs/core.svg)](https://www.npmjs.com/package/@aspectjs/core) [![NPM Downloads](https://img.shields.io/npm/dm/@aspectjs/common.svg)](https://www.npmjs.com/package/@aspectjs/core) [![bundlejs](https://deno.bundlejs.com/badge?q=@aspectjs/common,@aspectjs/core&treeshake=%5B*%5D,%5B*%5D)](https://bundlejs.com/?q=%40aspectjs%2Fcommon%2C%40aspectjs%2Fcore&treeshake=%5B*%5D%2C%5B*%5D) [![Latest Release](https://gitlab.com/aspectjs/aspectjs/-/badges/release.svg)](https://gitlab.com/aspectjs/aspectjs/-/releases)

  
  

## 摘要

受到 [视角J](https://www.eclipse.org/aspectj/) java框架, **外观JS** 杠杆 **[ES 装饰者](https://github.com/tc39/proposal-decorators)** 带来 面向Javascript和Typescript.

![example](https://npmcn.com/package/%40aspectjs/core/.assets/aspectjs-example.png)

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

解开 [叠叠](https://stackblitz.com/edit/aspectjs-demo-0-5-1?file=index.ts)。 。 。 .

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

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

-   一个 _注释_ 本质上是标记目标(_类_, (中文(简体) ), _属性_, (中文(简体) ), _方法_ 或者说 _参数_作为进一步增强的候选项目.
-   **方面** 可以选择性地启用,将新行为引入注释元素.

-   无问题
    
    ```ts
    const A = function( target: Function) {
       // behaviorA
    }
    const B = function( target: Function) {
       // behaviorB
    }
     
    @A() 
    @B()
    class MyClass {}
    ```
    
-   四. 与各方面有关的问题
    
    ```ts
    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())
    ```
    

## 开始 :

-   安装软件包
    
    ```bash
    npm i @aspectjs/core @aspectjs/common
    ```
    
-   创建注释 :
    
    ```ts
    // 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() {},
    );
    ```
    
-   在类、属性、方法或参数上使用注释:
    
    ```ts
    // main.ts
    class Main {
      @Toasted()
      run() {
        console.log('run');
      }
    }
    ```
    
-   宣布注释引发的一个方面:
    
    ```ts
    // 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;
      }
    }
    ```
    
-   启用侧面
    
    ```ts
    // aop.ts
    import { getWeaver } from '@aspectjs/core';
    
    getWeaver().enable(new ToastedAspect());
    ```
    

## 页:1

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

麻省理工学院

## 常见问题

### @aspectjs/core 是什么？

基于装饰器的外观定向编程, 用于浏览器和节点

### 如何安装 @aspectjs/core？

在项目目录运行 npm install @aspectjs/core，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@aspectjs/common（^0\.5\.4）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @aspectjs/core 支持 TypeScript 吗？

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

### @aspectjs/core 支持 ESM 还是 CommonJS？

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

### @aspectjs/core 可以商用吗？

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

### @aspectjs/core 的下载量有多少？

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

### @aspectjs/core 还在维护吗？

最新版本 0\.5\.4 发布于 2025/04/12（1\.6 年前）；至今共发布 19 个版本，其中过去 12 个月发布了 0 个；首次发布于 2020/11/28。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

