如何设置要在 "npm install" 期间使用的环境变量?

How to set an environment variable to be used during "npm install"?

我们的公司网络非常封闭,所以一个正常的方法:

npm install cypress@3.4.1

因为被代理拦截了所以不行,我们需要借助cross-env按下面的方式提供参数CYPRESS_INSTALL_BINARY(因为我们这里主要是微软环境)

cross-env CYPRESS_INSTALL_BINARY='\localserver\cypress.4.1\cypress.zip' npm install cypress@3.4.1

这在第一次安装时很容易做到,但问题是团队中的每个人都需要 运行 这个命令。我希望只需键入 npm install 即可,他们将自动获得所有要求。当我们想要更新 cypress 包时,这一点尤为明显,因为二进制文件 url 每次都需要更改。

我尝试将 preinstall 脚本添加到我的 package.json 中,如下所示:

 "scripts": {
    ...
    "preinstall": "cross-env CYPRESS_INSTALL_BINARY='\localserver\cypress.4.1\cypress.zip'",
    ...
  },

但是在 preinstall 完成并且 install 开始之后,cross-env 设置的环境变量似乎是 "gone",因为 cypress 尝试从网络下载但失败了。我可以接受它是临时的,但它需要在安装命令中持续存在。还看到了 .env 文件的解决方案,但据我所知,其中 none 支持 install 步骤。

我目前的解决方案是 运行 在 preinstall 步骤中安装整个 cypress,它可以工作,但似乎不需要每次 运行 双重安装。

所以,我要求的是一种让开发人员只需 运行 在全新计算机上执行以下命令即可完成的方法。

git clone ...
cd ...
npm install

我该怎么做?

我这边的情况相同,只是我想阻止在本地机器上安装 cypress。

通过在项目的根目录中添加 .npmrc 并添加到版本控制来解决它。


.npmrc 的内容:

CYPRESS_INSTALL_BINARY=0


由于在安装时使用了环境变量,因此无法使用 cross-env 解决方案,因为无法确定 cross-env 是否已经安装。

让我知道它是否有帮助,或者您已经有了其他解决方案。

我最终创建了一个工具,负责根据环境提供正确的二进制文件:

https://github.com/tomasbjerre/dictator-cypress

我公司内部有。当我们需要新版本的 Cypress 时,我们会在内部发布此工具的新版本。

我将该工具添加为 preinstall 脚本:

...
  "scripts": {
    "preinstall": "npx dictator-cypress@0.0.28",
...

以便它在有人执行时运行 npm install:

...
Copy linux cypress to cypress.zip
    Applying: copy linux-x64/cypress.zip to .
.npmrc should have reference to cypress binary
    Up to date: .npmrc should have lines
.gitignore should include the copied zip
    Up to date: .gitignore should have lines
...