尝试安装Puppeteer,但是由于某些storage.googleapis.com
安全限制,它在安装过程中尝试从那里下载最新的Chromium二进制文件时仍然失败。在查看了许多相关的GitHub问题(1,2,3)之后,唯一可行的方法是在以下情况下设置npm
的{{3}}命令行标志使用非Nix安装的npm
。
在--unsafe-perm=true
和node2nix --help
输出中找不到如何指定其他main node2nix
README的内容。 (我忽略了什么吗?)
在NPM command line flags下的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
需要被覆盖,我该怎么办?
答案 0 :(得分:0)
最终的Nix表达式取决于node2nix
用例(1和2),但好处是需要重写同一组Nix表达式:>
node2nix
在两种情况下都会生成三个文件:
node-env.nix
定义buildNodeSourceDist
,buildNodePackage
和buildNodeShell
可重写的Nix表达式。后两者都在其参数中都具有npmFlags
属性。
node-packages.nix
定义一个枚举所有依赖项的lambda,并返回一个属性集。
Use case 1的属性集包含
tarball
(通过buildNodeSourceDist
创建源存档)
package
(通过buildNodePackage
构建项目)和
shell
(通过buildNodeShell
为项目设置开发环境)
在use case 2中返回的属性集由输入列表(通常位于buildNodePackage
中)中通过node-packages.json
构建的软件包的名称组成。
default.nix
导入node-packages.nix
,并调用导入的lambda,返回上面两个属性集之一。
要指定标志,可以使用node2nix
自述文件中提到的example覆盖输入属性集:
{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
问题,但是可以解决。