コンテンツにスキップ

「Node.js パッケージガイドライン」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
Kgx (トーク | 投稿記録)
npm を使う: 情報を更新
Kgx (トーク | 投稿記録)
npm を使う: パッケージには $srcdir/$pkgdir への参照が含まれていますを翻訳して追加
49行目: 49行目:
それから通常通りにパッケージ化してください:
それから通常通りにパッケージ化してください:
npm run packager
npm run packager

=== パッケージには $srcdir/$pkgdir への参照が含まれています ===

{{Out of date|The package used as an example was [https://lists.archlinux.org/archives/list/aur-requests@lists.archlinux.org/message/SGRO7PXC7M6SJ42XOGKN2TPDVRKWQIYY/ dropped from AUR].}}

残念ながら、''npm'' はソースディレクトリと pkg ディレクトリへの参照を作成します。これは [https://github.com/npm/cli/issues/3828 既知の問題] です。ただし、これらの参照はまったく使用されないため、手動で削除できます。

すべての依存関係には、{{ic|_where}} 属性に {{ic|$pkgdir}} への参照が含まれます。通常、次のように ''sed'' マジックを使用してこれらの属性を削除できます。

find "$pkgdir" -name package.json -print0 | xargs -r -0 sed -i '/_where/d'

メインパッケージには他の参照も含まれます。これらを削除する最も簡単な方法は、下線付きのプロパティをすべて削除することですが、''sed'' の場合はそれほど簡単ではありません。代わりに、次のように {{Pkg|jq}} を使用すると同様の結果が得られます。

{{bc|<nowiki>
local tmppackage="$(mktemp)"
local pkgjson="$pkgdir/usr/lib/node_modules/$_pkgname/package.json"
jq '.|=with_entries(select(.key|test("_.+")|not))' "$pkgjson" > "$tmppackage"
mv "$tmppackage" "$pkgjson"
chmod 644 "$pkgjson"
</nowiki>}}

{{ic|$pkgdir}} への参照が見つかるもう 1 つの場所は、パッケージの {{ic|man}} 属性です。man ページを気にしない場合 (依存関係のためにインストールされるわけではないので)、次のように削除しても構いません。

{{bc|<nowiki>
find "$pkgdir" -type f -name package.json | while read pkgjson; do
local tmppackage="$(mktemp)"
jq 'del(.man)' "$pkgjson" > "$tmppackage"
mv "$tmppackage" "$pkgjson"
chmod 644 "$pkgjson"
done
</nowiki>}}

これら 3 つの手法すべての例は、[https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=readability-cli readability-cli の古い PKGBUILD] で見ることができます。

2023年6月26日 (月) 21:34時点における版

このドキュメントは Node.js パッケージの PKGBUILD を書くときの決まり事とガイドラインを載せています。

パッケージの命名規則

ヒント A custom _pkgname variable can be used instead of pkgname. This variable can generically be defined as follows: _pkgname=${pkgname#nodejs-}

パッケージの名前には最初に nodejs- を付ける必要があります。

ソース

npm は、ダウンロード URL の安定した命名スキームを提供します。PKGBUILD#ソース source=() 配列では、次の URL テンプレートを使用できます。

https://registry.npmjs.org/$_pkgname/-/$_pkgname-$pkgver.tgz

npm を使う

npm を使用してインストールする場合は、ビルドの依存関係として追加します。

makedepends=('npm')

通常、tarball を抽出する必要は、ありません。

noextract=("${_pkgname}-${pkgver}.tgz")

これは最小限の package 関数です。

package() {
    npm install -g --prefix "${pkgdir}/usr" "${srcdir}/${_pkgname}-${pkgver}.tgz"

    # npm gives ownership of ALL FILES to build user
    # https://bugs.archlinux.org/task/63396
    chown -R root:root "${pkgdir}"
}

一時キャッシュの設定

npm は package.json を処理するときにパッケージをビルドするのに必要なパッケージをデフォルトのキャッシュフォルダ $HOME/.npm にダウンロードします。ユーザーのホームフォルダに手を加えないようにするために、--cache フラグでキャッシュフォルダを一時的に設定すると良いでしょう。

依存パッケージを ${srcdir}/npm-cache にダウンロードするには:

npm install --cache "${srcdir}/npm-cache" 

それから通常通りにパッケージ化してください:

npm run packager

パッケージには $srcdir/$pkgdir への参照が含まれています

この記事またはセクションは情報が古くなっています。
理由: The package used as an example was dropped from AUR. (Discuss)

残念ながら、npm はソースディレクトリと pkg ディレクトリへの参照を作成します。これは 既知の問題 です。ただし、これらの参照はまったく使用されないため、手動で削除できます。

すべての依存関係には、_where 属性に $pkgdir への参照が含まれます。通常、次のように sed マジックを使用してこれらの属性を削除できます。

find "$pkgdir" -name package.json -print0 | xargs -r -0 sed -i '/_where/d'

メインパッケージには他の参照も含まれます。これらを削除する最も簡単な方法は、下線付きのプロパティをすべて削除することですが、sed の場合はそれほど簡単ではありません。代わりに、次のように jq を使用すると同様の結果が得られます。

local tmppackage="$(mktemp)"
local pkgjson="$pkgdir/usr/lib/node_modules/$_pkgname/package.json"
jq '.|=with_entries(select(.key|test("_.+")|not))' "$pkgjson" > "$tmppackage"
mv "$tmppackage" "$pkgjson"
chmod 644 "$pkgjson"

$pkgdir への参照が見つかるもう 1 つの場所は、パッケージの man 属性です。man ページを気にしない場合 (依存関係のためにインストールされるわけではないので)、次のように削除しても構いません。

find "$pkgdir" -type f -name package.json | while read pkgjson; do
    local tmppackage="$(mktemp)"
    jq 'del(.man)' "$pkgjson" > "$tmppackage"
    mv "$tmppackage" "$pkgjson"
    chmod 644 "$pkgjson"
done

これら 3 つの手法すべての例は、readability-cli の古い PKGBUILD で見ることができます。