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

托拉里特

尝试安装Puppeteer,但由于某些storage.googleapis.com安全限制,由于安装过程试图从那里下载最新的Chromium二进制文件,因此它始终失败看着许多相关的GitHub的问题(后123),该作品是设置唯一npm--unsafe-perm=true使用时,命令行标志非尼克斯安装npm

node2nix自述文件node2nix --help如何指定其他NPM命令行标志输出中找不到任何内容(我忽略了什么吗?)

源代码中找到以下buildNodePackagelambda,其参数默认为空字符串:node2nixnpmFlags

  # 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用例(12),但好处是需要重写同一组Nix表达式:

node2nix 无论哪种情况,都会生成三个文件:

  1. node-env.nix
    定义buildNodeSourceDistbuildNodePackagebuildNodeShell可覆盖的Nix表达式。后两者npmFlags在其参数中都具有属性。

  2. node-packages.nix
    定义一个枚举所有依赖项的lambda,并返回一个属性集。

    • 用例1的属性集包含
      tarball(通过创建资源档案buildNodeSourceDist
      package(通过进行项目构建buildNodePackage)和
      shell(通过设置项目的开发环境buildNodeShell

    • 用例2中返回的属性集buildNodePackage输入列表(通常位于中node-packages.json)中通过所构建的软件包的名称组成

  3. default.nixImports 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";
  };
}

注意:最后,这并不能解决我的puppeteer问题,但是确实可以。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章