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

时间:2019-08-09 13:45:25

标签: node.js npm environment-variables npm-install cypress

我们的公司网络非常封闭,因此通常的方法是:

npm install cypress@3.4.1

由于代理服务器阻止了它,因此无法正常工作,我们需要在cross-env的帮助下以以下方式提供参数CYPRESS_INSTALL_BINARY(因为这里主要是Microsoft环境)。

cross-env CYPRESS_INSTALL_BINARY='\\localserver\cypress\3.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\3.4.1\cypress.zip'",
    ...
  },

但是,似乎preinstall完成并install开始后,cross-env设置的环境变量已“消失”,因为赛普拉斯尝试从网络下载失败。我认为它是临时的,但它需要在install-command上保留。在我看来,还看到了带有.env文件的解决方案,但是据我所知,这些解决方案都不支持install步骤。

我当前的解决方案是在preinstall步骤中运行整个cypress安装,它可以工作,但是似乎不必每次都进行两次安装。

因此,我要提供的是一种使开发人员只需在全新计算机上运行以下命令即可完成的方法。

git clone ...
cd ...
npm install

我该怎么做?

2 个答案:

答案 0 :(得分:2)

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

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


.npmrc的内容:

CYPRESS_INSTALL_BINARY=0


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

让我知道它对您有帮助还是您已经有了另一种解决方案。

答案 1 :(得分:0)

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

https://github.com/tomasbjerre/dictator-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
...