「Node.js パッケージガイドライン」の版間の差分
(ページの作成:「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]] を使用してインストールする場合は、ビルドの依存関係として追加します。 |
|
makedepends=('npm') |
makedepends=('npm') |
||
+ | 通常、tarball を抽出する必要は、ありません。 |
||
− | 以下は最小の {{ic|package}} 関数です: |
||
+ | noextract=("${_pkgname}-${pkgver}.tgz") |
||
− | {{bc| |
||
+ | |||
+ | これは最小限の [[パッケージの作成#関数 package()|package]] 関数です。 |
||
+ | |||
+ | {{bc|<nowiki> |
||
package() { |
package() { |
||
− | + | 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時点における最新版
32ビット – CLR – クロス – Eclipse – Electron – Free Pascal – GNOME – Go – Haskell – Java – KDE – カーネル – Lisp – MinGW – Node.js – ノンフリー – OCaml – Perl – PHP – Python – R – Ruby – Rust – VCS – ウェブ – Wine
このドキュメントは Node.js パッケージの PKGBUILD を書くときの決まり事とガイドラインを載せています。
目次
パッケージの命名規則
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 への参照が含まれています
残念ながら、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')
nvmAUR は NVM_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 ]] }
この関数は nvmAUR や npm など、指定されたバージョンを使うべき Node.js ベースのプログラムとやりとりする前に呼び出す必要があります。
PKGBUILD の使用例
prepare() { _ensure_local_nvm nvm install 14.15.0 } build() { _ensure_local_nvm npm install }
あるいは、素の nvm install
はカレントディレクトリの .nvrc
ファイルからバージョン文字列を探します。