VOOZH about

URL: https://wiki.archlinux.org/title/Node.js_package_guidelines_(Português)

⇱ Node.js package guidelines (Português) - ArchWiki


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

32-bitCLRCMakeCrossDKMSEclipseElectronFonteFree PascalGNOMEGoHaskellJavaKDEKernelLispMesonMinGWNode.jsNonfreeOCamlPerlPHPPythonRRubyRustShellVCSWebWine

Esse documento cobre padrões e diretrizes de escrita PKGBUILDs para pacotes Node.js.

Nomenclatura de pacote

Nomes de pacote para bibliotecas do Node.js devem iniciar com um prefixo nodejs-. Para aplicativos independentes, use apenas o nome do programa.

Usando npm

Ao instalar com npm, adicione-o como dependência de compilação:

makedepends=('npm')

Geralmente, não há necessidade de extrair o tarball:

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

Essa é uma função package mínima:

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

 # Non-deterministic race in npm gives 777 permissions to random directories.
 # See https://github.com/npm/cli/issues/1103 for details.
 find "${pkgdir}/usr" -type d -exec chmod 755 {} +

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

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

Outro lugar onde você pode encontrar referências a $pkgdir são os atributos man dos pacotes. Se você não se importa com as páginas man (elas não serão instaladas para dependências de qualquer maneira), você pode excluí-las assim:

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

Um exemplo de todas essas três técnicas pode ser visto em readability-cliAUR[link quebrado: package not found].

Usando nvm

Quando um aplicativo baseado em node.js requer uma versão diferente para compilamento ou empacotamento, nvm pode ser aproveitado.

Atenção Isso se aplica apenas às necessidades de compilação/empacotamento do aplicativo e não substitui a dependência de tempo de execução

Adicione-o como uma dependência de compilação:

makedepends=('npm' 'nvm')

nvm usa a variável de ambiente NVM_DIR para procurar por seu prefixo, que é definido com $HOME/.nvm se não especificado antes da inicialização do nvm.

Você pode usar a seguinte função para criar e isolar seu prefixo personalizado da localização do usuário:

_ensure_local_nvm() {
 # lets 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 ]
}

Esta função deve ser chamada antes de interagir com nvm, npm ou outros programas baseados em node.js que devem usar a versão especificada.

Exemplo de uso em um PKGBUILD

prepare() {
 _ensure_local_nvm
 nvm install 14.15.0
}

build() {
 _ensure_local_nvm
 npm install
}

Alternativamente, nvm install padrão vai procurar por uma string de versão no arquivo .nvrc no diretório atual.

Um exemplo deste uso pode ser visto no insomniaAUR.