# Node.js package guidelines (Português)

From ArchWiki
Jump to navigation Jump to search
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.

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.

Category:

- Arch package guidelines (Português)