尝试安装Puppeteer,但由于某些storage.googleapis.com
安全限制,由于安装过程试图从那里下载最新的Chromium二进制文件,因此它始终失败。看着许多相关的GitHub的问题(后1,2,3),该作品是设置唯一npm
的--unsafe-perm=true
使用时,命令行标志非尼克斯安装npm
。
在主node2nix
自述文件和node2nix --help
如何指定其他NPM命令行标志的输出中找不到任何内容。(我忽略了什么吗?)
在源代码中找到以下buildNodePackage
lambda,其参数默认为空字符串:node2nix
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
用例(1和2),但好处是需要重写同一组Nix表达式:
node2nix
无论哪种情况,都会生成三个文件:
node-env.nix
定义buildNodeSourceDist
,buildNodePackage
和buildNodeShell
可覆盖的Nix表达式。后两者npmFlags
在其参数中都具有属性。
node-packages.nix
定义一个枚举所有依赖项的lambda,并返回一个属性集。
default.nix
Imports 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] 删除。
我来说两句