如何使用“node2nix”设置NPM命令行标志?

如何使用“node2nix”设置NPM命令行标志?,npm,nix,Npm,Nix,正在尝试安装Puppeter,但由于安装过程试图从那里下载最新的Chromium二进制文件,由于一些storage.googleapis.com安全限制,它一直失败。在研究了许多相关的GitHub问题(、)之后,唯一有效的方法是在使用非Nix安装的npm时设置npm的命令行标志 我在和的node2nix--help输出中找不到关于如何指定附加值的任何内容。(我忽略了什么吗?) 在中找到以下参数,其中的npmFlags参数默认为空字符串: # Builds and composes an NP

正在尝试安装Puppeter,但由于安装过程试图从那里下载最新的Chromium二进制文件,由于一些
storage.googleapis.com
安全限制,它一直失败。在研究了许多相关的GitHub问题(、)之后,唯一有效的方法是在使用非Nix安装的
npm
时设置
npm
的命令行标志

我在和的
node2nix--help
输出中找不到关于如何指定附加值的任何内容。(我忽略了什么吗?)

在中找到以下参数,其中的
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
,我将如何执行此操作?

最终的Nix表达式取决于
node2nix
用例(和),但好的是需要重写同一组Nix表达式:

node2nix
在任何一种情况下都将生成三个文件:

  • 节点环境nix

    定义可重写的Nix表达式。后两个参数中都有
    npmFlags
    属性

  • 节点包.nix

    定义枚举所有依赖项的lambda,并返回属性集

    • 的属性集包含
      tarball
      (通过
      buildNodeSourceList
      进行源代码归档)
      package
      (通过
      buildNodePackage
      构建项目)和
      shell
      (通过
      buildNodeShell
      为项目设置开发环境)

    • 中返回的属性集包含从输入列表(通常位于
      节点packages.json
      中)通过
      buildNodePackage
      生成的包的名称

  • 默认.nix
    导入
    节点packages.nix
    ,并调用导入的lambda,返回上述两个属性集之一

  • 要指定标志,可以使用
    node2nix
    自述文件中提到的覆盖输入属性集:

    {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";
      };
    }
    
    {pkgs?导入{
    继承制度;
    },system?内置。currentSystem}:
    让
    nodePackages=import./default.nix{
    继承pkgs系统;
    };
    在里面
    节点包//{
    #用例1
    # ==========
    #shell=nodePackages.shell.override{
    #package=nodePackages.package.override{
    #用例2
    # ==========
    aPackageName=nodePackages.aPackageName.override{
    npmFlags=“--unsafe perm=true”;
    };
    }
    

    注意:最后,这并没有解决我的
    木偶演员问题,但这确实解决了