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

Nin*_*ngs 5 environment-variables node.js npm npm-install cypress

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

npm install cypress@3.4.1
Run Code Online (Sandbox Code Playgroud)

不能工作,因为它被代理阻止了,我们需要CYPRESS_INSTALL_BINARY在 cross-env 的帮助下以如下方式提供参数(因为我们这里主要有微软环境)。

cross-env CYPRESS_INSTALL_BINARY='\\localserver\cypress\3.4.1\cypress.zip' npm install cypress@3.4.1
Run Code Online (Sandbox Code Playgroud)

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

我试图向我添加一个preinstall脚本package.json

 "scripts": {
    ...
    "preinstall": "cross-env CYPRESS_INSTALL_BINARY='\\localserver\cypress\3.4.1\cypress.zip'",
    ...
  },
Run Code Online (Sandbox Code Playgroud)

但似乎由 cross-env 设置的环境变量在preinstall完成并install开始后“消失”了,因为 cypress 尝试并未能从网络下载。我认为它是临时的,但它需要通过安装命令持续存在。还看到了带有.env文件的解决方案,但install据我所知,这些解决方案都不支持该步骤。

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

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

npm install cypress@3.4.1
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

小智 6

我这边情况也一样,只是我想阻止在本地机器上安装cypress。

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


.npmrc 的内容:

CYPRESS_INSTALL_BINARY=0


由于环境变量是在安装时使用的,解决方案cross-env是不可能的,因为不能确定cross-env已经安装了。

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

  • 请注意,将名为“MY_ENV”的环境变量添加到 .npmrc 会生成“process.env.npm_config_my_env”。所以在这种情况下它将是“process.env.npm_config_cypress_install_binary”。我猜 cypress 可以处理这两种情况,所以这就是它起作用的原因。但其他图书馆可能不会。 (2认同)