Denoのnpmパッケージサポート
概要
以下のように、npm:<パッケージ名>@<バージョン>というような形式でimportを記述することで、npmパッケージを利用できます code:sh
import chalk from "npm:chalk@5.0.1";
console.info(chalk.green("Hello, world!"));
また、npxライクにコマンドを実行することもできます code:shell
$ deno run --allow-env --allow-read --allow-write npm:make-dir-cli@3.0.0 src/components
code:shell
# 1. chalk@5.3.0をダウンロードし、deno.jsonのimportsに"chalk": "npm:chalk@5.3.0"というマッピングを定義します
$ deno add npm:chalk@5.3.0
$ cat deno.json | jq .imports.chalk
"npm:chalk@5.3.0"
code:javascript
import chalk from "chalk";
chalk.green("Hello");
code:shell
$ deno remove chalk
--node-modules-dirオプションを指定する
code:package.json
{
"dependencies": {
"chalk": "^5.2.0",
"koa": "2"
},
"devDependencies": {
"cowsay": "^1.5.0"
},
"scripts": {
"hello": "cowsay Hello"
}
}
"bare specifier"の解決
code:javascript
import chalk from "chalk"; // => npm:chalk@^5.2.0
import Koa from "koa"; // => npm:koa@2
const app = new Koa();
app.use((ctx) => {
ctx.body = "Hello world";
});
app.listen(3000, () => {
console.log(chalk.blue.bold("Listening on port 3000"));
});
code:shell
$ deno task hello
# package.jsonの内容を元に、deno run -A npm:cowsay@^1.5.0 helloが実行されます。
BYONMは"Bring your own node_modules"の略です。
有効化方法
Deno v1) --unstable-byonmを指定する または deno.jsonで"unstable": ["byonm"]を指定すると有効化できます。 code:deno.json
{
}
ライフサイクルスクリプトの実行
DenoはBunと同様に、デフォルトではnpmパッケージに含まれるライフサイクルスクリプトを実行しません Denoの本体にはNode.js組み込みパッケージが搭載されており、node:<パッケージ名>でimportできます。(※一部、未実装のため読み込めないパッケージやAPIなどもまだあります) code:javascript
import { EventEmitter } from "node:events";
const emitter = new EventEmitter();
emitter.on("foo", console.log);
emitter.emit("foo", "bar");
関連ページ