Node.js package guidelines (Português)

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-bit
–
CLR
–
CMake
–
Cross
–
DKMS
–
Eclipse
–
Electron
–
Fonte
–
Free Pascal
–
GNOME
–
Go
–
Haskell
–
Java
–
KDE
–
Kernel
–
Lisp
–
Meson
–
MinGW
–
Node.js
–
Nonfree
–
OCaml
–
Perl
–
PHP
–
Python
–
R
–
Ruby
–
Rust
–
Shell
–
VCS
–
Web
–
Wine
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-cli
AUR
[
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
insomnia
AUR
.