Jump to content

# Node.js package guidelines (Português)

3 languages

- English
- 日本語
- 中文（简体）

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.

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.

Category:

- Arch package guidelines (Português)

Hidden category:

- Pages with broken package links