Node.js package guidelines (Português)

From ArchWiki
Jump to: navigation, search
Status de tradução: Esse artigo é uma tradução de Node.js package guidelines. Data da última tradução: 2018-11-04. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.
Diretrizes de criação de pacotes

CLRCrossEclipseFree PascalGNOMEGoHaskellJavaKDEKernelLispMinGWNode.jsNonfreeOCamlPerlPHPPythonRRubyVCSWebWine

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 -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.