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

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ページの作成:「Category:パッケージ開発 en:Node.js package guidelines {{Package Guidelines}} このドキュメントは Node.js パッケージの PKGBUILD を...」)
 
(他言語へのリンクを追加)
 
(3人の利用者による、間の8版が非表示)
1行目: 1行目:
 
[[Category:パッケージ開発]]
 
[[Category:パッケージ開発]]
 
[[en:Node.js package guidelines]]
 
[[en:Node.js package guidelines]]
  +
[[pt:Node.js package guidelines]]
  +
[[zh-hans:Node.js package guidelines]]
 
{{Package Guidelines}}
 
{{Package Guidelines}}
   
7行目: 9行目:
 
== パッケージの命名規則 ==
 
== パッケージの命名規則 ==
   
  +
{{Tip|1={{ic|pkgname}} の代わりにカスタムの {{ic|_pkgname}} 変数を使用できます。この変数は一般に次のように定義できます: {{ic|1=_pkgname=${pkgname#nodejs-} }} }}
パッケージの名前には最初に {{ic|nodejs-}} を付ける必要があります。
 
  +
  +
Node.js ライブラリのパッケージ名は、{{ic|nodejs-}} プレフィックスで始まる必要があります。スタンドアロンアプリケーションの場合は、プログラム名のみを使用します。
  +
  +
== ソース ==
  +
  +
[[npm]] は、ダウンロード URL の安定した命名スキームを提供します。[[PKGBUILD#ソース]] {{ic|1=source=()}} 配列では、次の URL テンプレートを使用できます。
  +
  +
<nowiki>https://registry.npmjs.org/$_pkgname/-/$_pkgname-$pkgver.tgz</nowiki>
   
 
== npm を使う ==
 
== npm を使う ==
   
''npm'' を使てインストールする場合、''npm'' をビルドの依存パッケージに追加してください:
+
[[npm]] を使用してインストールする場合、ビルドの依存関係として追加します。
   
 
makedepends=('npm')
 
makedepends=('npm')
   
  +
通常、tarball を抽出する必要は、ありません。
以下は最小の {{ic|package}} 関数です:
 
   
  +
noextract=("${_pkgname}-${pkgver}.tgz")
{{bc|
 
  +
  +
これは最小限の [[パッケージの作成#関数 package()|package]] 関数です。
  +
  +
{{bc|<nowiki>
 
package() {
 
package() {
cd $srcdir/$pkgname-$pkgver
+
npm install -g --prefix "${pkgdir}/usr" "${srcdir}/${_pkgname}-${pkgver}.tgz"
  +
npm install -g --user root --prefix "$pkgdir"/usr
 
  +
# npm gives ownership of ALL FILES to build user
  +
# https://bugs.archlinux.org/task/63396
  +
chown -R root:root "${pkgdir}"
 
}
 
}
  +
</nowiki>}}
}}
 
  +
  +
=== 一時キャッシュの設定 ===
  +
  +
npm は {{ic|package.json}} を処理するときにパッケージをビルドするのに必要なパッケージをデフォルトのキャッシュフォルダ {{ic|$HOME/.npm}} にダウンロードします。ユーザーのホームフォルダに手を加えないようにするために、{{ic|--cache}} フラグでキャッシュフォルダを一時的に設定すると良いでしょう。
  +
  +
依存パッケージを {{ic|${srcdir}/npm-cache}} にダウンロードするには:
  +
  +
npm install --cache "${srcdir}/npm-cache"
  +
  +
それから通常通りにパッケージ化してください:
  +
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] で見ることができます。
  +
  +
== nvm の使用 ==
  +
  +
[[node.js]] ベースのアプリケーションで ’’’ビルド''' または '''パッケージ化''' に異なるバージョンが必要な場合は、{{AUR|nvm}} を活用できます。
  +
  +
{{Warning|これはアプリケーションの構築/パッケージ化のニーズにのみ適用され、実行時の依存関係は置き換えられません。}}
  +
  +
ビルドの依存関係として追加します。
  +
  +
makedepends=('npm' 'nvm')
  +
  +
{{AUR|nvm}} は {{ic|NVM_DIR}} を使います。[[環境変数]] を使ってプレフィックスを探します。プレフィックスは {{ic|$HOME/.nvm}} に設定されますが、{{AUR|nvm}} の初期化前に指定されていなければ、{{ic|$HOME/.nvm}} になります。
  +
  +
次の関数を使用して、カスタムプレフィックスを作成し、ユーザーの場所から分離できます。
  +
  +
{{bc|<nowiki>
  +
_ensure_local_nvm() {
  +
# let's be sure we are starting clean
  +
which nvm >/dev/null 2>&1 && nvm deactivate && nvm unload
  +
export NVM_DIR="${srcdir}/.nvm"
  +
  +
# The init script returns 3 if version specified
  +
# in ./.nvrc is not (yet) installed in $NVM_DIR
  +
# but nvm itself still gets loaded ok
  +
source /usr/share/nvm/init-nvm.sh || [[ $? != 1 ]]
  +
}
  +
</nowiki>}}
  +
  +
この関数は {{AUR|nvm}} や {{Pkg|npm}} など、指定されたバージョンを使うべき [[Node.js]] ベースのプログラムとやりとりする前に呼び出す必要があります。
  +
  +
=== PKGBUILD の使用例 ===
  +
  +
{{bc|<nowiki>
  +
prepare() {
  +
_ensure_local_nvm
  +
nvm install 14.15.0
  +
}
  +
  +
build() {
  +
_ensure_local_nvm
  +
npm install
  +
}
  +
</nowiki>}}
  +
  +
あるいは、素の {{ic|nvm install}} はカレントディレクトリの {{ic|.nvrc}} ファイルからバージョン文字列を探します。
  +
  +
この使用例は、{{AUR|insomnia}} で見ることができます。詳細については、[[PKGBUILD]] を参照してください。

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

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

パッケージの命名規則

ヒント: pkgname の代わりにカスタムの _pkgname 変数を使用できます。この変数は一般に次のように定義できます: _pkgname=${pkgname#nodejs-}

Node.js ライブラリのパッケージ名は、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 で見ることができます。

nvm の使用

node.js ベースのアプリケーションで ’’’ビルド または パッケージ化 に異なるバージョンが必要な場合は、nvmAUR を活用できます。

警告: これはアプリケーションの構築/パッケージ化のニーズにのみ適用され、実行時の依存関係は置き換えられません。

ビルドの依存関係として追加します。

makedepends=('npm' 'nvm')

nvmAURNVM_DIR を使います。環境変数 を使ってプレフィックスを探します。プレフィックスは $HOME/.nvm に設定されますが、nvmAUR の初期化前に指定されていなければ、$HOME/.nvm になります。

次の関数を使用して、カスタムプレフィックスを作成し、ユーザーの場所から分離できます。

_ensure_local_nvm() {
    # let's be sure we are starting clean
    which nvm >/dev/null 2>&1 && nvm deactivate && nvm unload
    export NVM_DIR="${srcdir}/.nvm"

    # The init script returns 3 if version specified
    # in ./.nvrc is not (yet) installed in $NVM_DIR
    # but nvm itself still gets loaded ok
    source /usr/share/nvm/init-nvm.sh || [[ $? != 1 ]]
}

この関数は nvmAURnpm など、指定されたバージョンを使うべき Node.js ベースのプログラムとやりとりする前に呼び出す必要があります。

PKGBUILD の使用例

prepare() {
    _ensure_local_nvm
    nvm install 14.15.0
}

build() {
    _ensure_local_nvm
    npm install
}

あるいは、素の nvm install はカレントディレクトリの .nvrc ファイルからバージョン文字列を探します。

この使用例は、insomniaAUR で見ることができます。詳細については、PKGBUILD を参照してください。