如何设置要在 "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
...
我们的公司网络非常封闭,所以一个正常的方法:
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
...