Node.js package guidelines (Português)
32-bit – CLR – CMake – Cross – DKMS – Eclipse – Electron – Fonte – Free Pascal – GNOME – Go – Haskell – Java – KDE – Kernel – Lisp – Meson – MinGW – Node.js – Nonfree – OCaml – Perl – PHP – Python – R – Ruby – Rust – VCS – Web – Wine
Esse documento cobre padrões e diretrizes de escrita PKGBUILDs para pacotes Node.js.
Nomenclatura de pacote
Nomes de pacote devem iniciar com um prefixo nodejs-
.
Usando npm
Ao instalar com npm, adicione-o como dependência de compilação:
makedepends=('npm')
Essa é uma função package
mínima:
package() { npm install -g --user root --prefix "$pkgdir"/usr "$srcdir"/source-tarball.tar.gz # Disputa não determinística no npm fornece permissões 777 para diretórios aleatórios. # Veja https://github.com/npm/npm/issues/9359 para detalhes. find "${pkgdir}"/usr -type d -exec chmod 755 {} + }
Definindo um cache temporário
Quando o npm processa package.json
para compilar um pacote, ele baixa dependências para sua pasta de cache padrão em $HOME/.npm
. Para evitar encher a pasta pessoa do usuário, podemos definir temporariamente uma pasta de cache diferente com a opção --cache
:
Baixe as dependências para ${srcdir}/npm-cache
e instale-os no diretório do pacote
npm install --cache "${srcdir}/npm-cache"
Continue com empacotamento de costume
npm run packager
Pacote contém referência para $srcdir/$pkgdir
Infelizmente, o npm cria referências ao diretório de origem e ao diretório pkg. Este é um problema conhecido no NPM e, na verdade, considerado um recurso. No entanto, você pode remover essas referências manualmente, pois elas não são usadas de forma alguma.
Todas as dependências conterão uma referência a $pkgdir
, no atributo _where
. Você pode geralmente remover esses atributos com alguma magia do sed da seguinte forma:
find "$pkgdir" -name package.json -print0 | xargs -r -0 sed -i '/_where/d'
Seu pacote principal também terá outras referências. A maneira mais fácil de removê-los é remover todas as propriedades sublinhadas, mas isso não é tão fácil com o sed. Em vez disso, você pode usar jq para obter resultados semelhantes, como segue:
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"
Um exemplo de ambas técnicas podem ser vistas em bower-awayAUR.