コンテンツにスキップ
asyncmux
日本語
Esc
↑↓移動↵開く⌘Jプレビュー
このページの内容

インストール

asyncmux のインストール方法と、デコレーター・using 構文・再入検出に必要な動作要件を説明します。

パッケージをインストールする

npm install asyncmux
pnpm add asyncmux
yarn add asyncmux
bun add asyncmux
nub add asyncmux
aube add asyncmux

動作要件

asyncmux は ESM 専用のパッケージです。

  • デコレーター API — Stage 3(ES 標準)のデコレーターが必要です。TypeScript では、experimentalDecorators を有効にせずにコンパイルしてください。Stage 3 に対応していない環境で @asyncmux を使うと、DecoratorSupportError が投げられます。
  • using 構文 — ロックの自動解放に使えます。必須ではないため、using が使えない環境でも release() で解放できます。
  • node:async_hooks — 再入の検出に使います。process.getBuiltinModule("node:async_hooks") が利用できる環境(Node.js 22.3 以降や Bun など)では、await をまたいだ再入も検出します。利用できない環境では、同期的な呼び出し範囲のみを対象とする検出に切り替わります。

インポート

import { asyncmux, Asyncmux, LockReleasedError, ReentrantLockError } from "asyncmux";
import type { AsyncmuxLock, AsyncmuxLockOptions } from "asyncmux";

AsyncmuxLock は型としてのみ公開されています。ロックは各 API の戻り値として得られるものを使います。

ピア依存関係

asyncmux は次のパッケージをピア依存関係として参照します。npm 7 以降や pnpm は自動でインストールしますが、必要に応じて明示的に追加してください。

  • @logtape/logtape — デバッグログの出力に使います。
  • valibot — エラーメッセージの言語設定に使います(i18n-error-base のピア依存関係)。

TypeScript の設定

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ESNext",
    "moduleResolution": "Bundler",
    "lib": ["ESNext", "DOM"],
    "experimentalDecorators": false
  }
}

Symbol.dispose の型を使う場合は、それを含む lib(ESNext など)を指定してください。

デバッグログを有効にする

asyncmux は @logtape/logtape のカテゴリー asyncmux にデバッグログを出力します。LogTape を設定すると、ロックの取得・解放やキューの状態を確認できます。

import { configure, getConsoleSink } from "@logtape/logtape";

await configure({
  sinks: {
    console: getConsoleSink(),
  },
  loggers: [{ category: "asyncmux", sinks: ["console"], lowestLevel: "debug" }],
});

このページは役に立ちましたか?