NPM 安装后、CA 证书和 Windows

bea*_*onk 6 javascript ssl node.js npm

TLDR;

在 Windows 环境中,是否可以在NODE_EXTRA_CA_CERTS不进行系统更改、配置文件更改或需要管理员级别权限的更改的情况下以与 NPM 包的安装后脚本一起使用的方式进行设置?

细节

这让我发疯。

我通过 imagemin、imagemin-webpack 和各种特定于 imagemin 格式的插件在我们的 Webpack 构建过程中添加了图像优化。

所有 imagemin 插件都有一个共同点——在安装后,它们:

一种。尝试下载预先构建的 EXE。
湾 如果 (a) 失败,他们会尝试从源代码构建 EXE。

IT 窥探我们的流量,因此 (a) 在尝试获取远程 EXE 时由于“链中自签名证书”错误而失败。(b) 失败,因为我们的工作室是基于 Windows 的,而且我们没有安装所有各种构建工具来实现这一目标。将它们安装在npm install可能运行的每台机器上也是不合理的。

我做了一些挖掘(感谢 SO),找到了我们公司的 CA 证书,将其添加到 repo 中,并且能够(a)使用以下命令:

> SET NODE_EXTRA_CA_CERTS=%cd%\ca.cert
> npm install
Run Code Online (Sandbox Code Playgroud)

那时我以为我有空——我所要做的就是将这个 npm 脚本添加到我们的 package.json 中:

{
  "preinstall": "SET NODE_EXTRA_CA_CERTS=%cd%\\ca.cert"
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用。我猜这是因为涉及一个单独的进程,并且环境变量不会转移到另一个进程。

请注意,这确实有效,但绝对糟糕:

{
  "preinstall": "SET NODE_EXTRA_CA_CERTS=%cd%\\ca.cert&& npm install imagemin-gifsicle imagemin-mozjpeg imagemin-optipng imagemin-svgo"
}
Run Code Online (Sandbox Code Playgroud)

有没有办法以一种与 NPM 包的安装后脚本一起工作的方式自动设置这个环境变量?

我希望这对其他团队成员是透明的,以便他们可以继续这样做,npm install而无需任何额外的步骤、系统更改或配置文件更改(如果可能)。一些团队成员不是开发人员,所以虽然他们习惯了运行npm install,但我不想引入任何额外的复杂性。我非常感谢提前提供的任何帮助!

小智 0

你有没有尝试过

npm config set cafile "<path to your certificate file>"
Run Code Online (Sandbox Code Playgroud)