如何用'node2nix'设置NPM命令行标志?

roejwanj  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(115)

尝试安装Puppeteer,但由于storage.googleapis.com的安全限制,安装过程一直失败,因为安装过程试图从那里下载最新的Chromium二进制文件。在查看了许多相关的GitHub问题(123)后,唯一有效的方法是在使用非Nix安装的npm时设置npm--unsafe-perm=true命令行标志。
我在main node2nix READMEnode2nix --help输出中找不到任何关于如何指定附加NPM command line flags的内容。(我忽略了什么吗?)
node2nix source中找到以下buildNodePackage lambda,其中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需要被覆盖,我该怎么做呢?

ee7vknir

ee7vknir1#

最终的Nix表达式取决于node2nix用例(1和2),但好的方面是需要覆盖同一组Nix表达式:
node2nix将在两种情况下生成三个文件:
1.node-env.nix
定义buildNodeSourceDistbuildNodePackagebuildNodeShell可重写的Nix表达式。后两者的参数中都有npmFlags属性。
1.一个月七个月一个月
定义枚举所有相依性的Lambda,并传回属性集。

  • 用例1的属性集包含

tarball(通过buildNodeSourceDist制作源归档)
package(通过buildNodePackage构建项目),以及
shell(通过buildNodeShell为项目设置开发环境)

  • 用例2中返回的属性集包含通过buildNodePackage构建的包的名称,这些包来自输入列表(通常位于node-packages.json中)。

1.**default.nix**汇入node-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";
  };
}

相关问题