Node.js package guidelines (Português)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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.jsNonfreeOCamlPerlPHPPythonRRubyRustVCSWebWine

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.

Usando nvm

Quando um aplicativo baseado em node.js requer uma versão diferente para compilamento ou empacotamento, nvmAUR 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')

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

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