Как установить флаги командной строки NPM с помощью `node2nix`? - PullRequest
0 голосов
/ 19 мая 2019

Попытка установить Puppeteer, но она не работает из-за некоторых ограничений безопасности storage.googleapis.com, так как процесс установки пытается загрузить оттуда последний бинарный файл Chromium.После рассмотрения многих связанных проблем GitHub ( 1 , 2 , 3 ), единственное, что работает, это установка npm s --unsafe-perm=true флаг командной строки при использовании не установленного Nix npm.

Я не смог найти ничего в main node2nix README и в node2nix --helpвывод о том, как задать дополнительные флаги командной строки NPM .(Я что-то упустил?)

Нашел buildNodePackage лямбда ниже в node2nix source с аргументом npmFlags, по умолчанию равным пустой строке:

  # Builds and composes an NPM package including all its dependencies
  buildNodePackage =
    { name
    , packageName
    , version
    , dependencies ? []
    , buildInputs ? []
    , production ? true
    , npmFlags ? ""
    , dontNpmInstall ? false
    , bypassCache ? false
    , reconstructLock ? false
    , preRebuild ? ""
    , dontStrip ? true
    , unpackPhase ? "true"
    , buildPhase ? "true"
    , ... }@args:

Если это npmFlags нужно переопределить, как бы я это сделал?

1 Ответ

0 голосов
/ 20 мая 2019

Окончательное выражение Nix зависит от варианта использования node2nix ( 1 и 2 ), но хорошо то, что один и тот же набор выражений Nix необходимо переопределить:

node2nix сгенерирует три файла в любом случае:

  1. node-env.nix
    Определяет buildNodeSourceDist, buildNodePackagebuildNodeShell переопределяемые выражения Nix.Оба последних имеют оба атрибута npmFlags в своем аргументе.

  2. node-packages.nix
    Определяет лямбду, перечисляющую все зависимости, и возвращаетнабор атрибутов.

    • Набор атрибутов варианта использования 1 содержит
      tarball (для создания исходного архива через buildNodeSourceDist)
      package (длясобрать проект с помощью buildNodePackage) и
      shell (чтобы настроить среду разработки для проекта с помощью buildNodeShell)

    • Набор атрибутов, возвращенный в вариант использования 2 состоит из имени пакетов, созданных с помощью buildNodePackage, из списка ввода (обычно находится в node-packages.json).

  3. default.nix Импортирует node-packages.nix и вызывает импортированную лямбду, возвращая любой из двух указанных выше наборов атрибутов.

Чтобы указать флаги, можно переопределитьнабор атрибутов ввода, используя пример , упомянутый в node2nix README:

{pkgs ? import <nixpkgs> {
    inherit system;
}, system ? builtins.currentSystem}:

let
  nodePackages = import ./default.nix {
    inherit pkgs system;
  };
in
nodePackages // {

  # use case 1
  # ==========
  # shell   = nodePackages.shell.override {
  # package = nodePackages.package.override {

  # use case 2
  # ==========
  aPackageName = nodePackages.aPackageName.override {
    npmFlags = "--unsafe-perm=true";
  };
}

note : В конце концов, это нерешить мою puppeteer проблему, но это помогло.

...