在公司代理.pac后面使用npm

183

我需要通过npm下载几个包,但我们公司的代理配置是.pac文件(我在Windows上)

我已经尝试过:

npm config set proxy http://mydomain\username:password@1.2.3.4:8181/proxy.pac
npm config set https-proxy http://mydomain\username:password@1.2.3.4:8181/proxy.pac
或者
npm config set proxy http://1.2.3.4:8181/proxy.pac
npm config set https-proxy http://1.2.3.4:8181/proxy.pac

但它不起作用...

有什么建议吗?谢谢。


1
可能是重复的问题,参考有没有办法让npm install命令在代理后面工作? - Sriram
11
我认为这个问题不是重复的,PAC脚本可以根据目标IP/主机地址包含多个代理地址,而Dube只能使用一个代理地址。- 来自评论 - Ferrybig
1
没有一个答案表明如何使用可以包含多个代理地址的PAC脚本,这取决于目标IP/主机地址。有人能帮忙吗? - Partha Sarathi Ghosh
2
对我来说,打开 proxy.pac 文件以从中获取代理地址很有帮助。(在我的情况下,我只需要将端口切换到 8080)。 - sakura-bloom
1
@ParthaSarathiGhosh 你说得对,没错。事实上,没有任何答案能够真正解释如何使用PAC脚本,所以我添加了另一个答案来解决这个问题: https://dev59.com/1F8e5IYBdhLWcg3whqrl#61811444。虽然有些晚了,但总比从未开始好。 - user1031921
28个回答

4

只需在项目文件夹中创建名为.npmrc的文件,即可避免系统级代理设置

#Without password
proxy=http://ipaddress:80
https-proxy=http://ipaddress:80

#With password
proxy=http://<username>:<pass>@proxyhost:<port>
https-proxy=http://<uname>:<pass>@proxyhost:<port>

如果您不使用代理,请像这样进行评论

#proxy=http://ipaddress:80
#https-proxy=http://ipaddress:80

#With password
#proxy=http://<username>:<pass>@proxyhost:<port>
#https-proxy=http://<uname>:<pass>@proxyhost:<port>

4

现有的答案都没有解释如何使用npm与PAC文件配合使用。一些人建议下载PAC文件,手动检查它,并选择其中一个“PROXY…”字符串。但是如果PAC文件需要从多个代理中选择,或者如果PAC文件包含用于跳过某些URL代理的复杂逻辑,则此方法将不起作用。

另外,一些企业代理需要NTLM身份验证。CNTLM可以处理身份验证,但不支持PAC文件。

另一种选择是使用Alpaca,它在JavaScript虚拟机中执行PAC文件,并使用生成的代理进行NTLM身份验证。


4

PASSWORD也许是可选的,不总是必需的。

我知道这里已经有很多答案了,但是对于每个组织,适用的方法可能会有所不同。我曾经遇到过这个问题,通过试错,我能够得到以下可行的解决方案。

请注意,在此配置中没有使用密码,但仍然可以正常工作。

直接从C:\Users\your-username\目录编辑.npmrc文件并应用以下设置。记得打开一个新的命令提示符会话以反映更改。

proxy=http://http.proxy.xxx.com:8000
registry=http://registry.npmjs.org/
strict-ssl=false

这里的xxx是我的公司名,你不能直接在此处配置代理URL,但是你可以在文本编辑器中打开该文件,并查找适当的主机名和端口号来使用。

这是它的外观,以便有一个想法:


2

如果你在公司网络后面使用代理,我刚刚使用了一个NTLM代理工具,并使用NTLM提供的端口和代理,例如我使用了以下配置:

strict-ssl=false
proxy=http://localhost:3125

我希望这有所帮助。

2

您需要使用 "npm config set http-proxy"

用法:

npm config set http-proxy http://1.2.3.4:8181
npm config set https-proxy http://1.2.3.4:8181

2

已经在接受的答案中提到了设置NPM代理,可以解决这个问题。但是,正如您可以在npm问题中看到的那样,有些依赖项使用GIT,这就需要设置git代理,可以按照以下步骤进行:

git config --global http.proxy http://username:password@host:port
git config --global https.proxy http://username:password@host:port

提到的NPM代理设置:

npm config set proxy "http://username:password@host:port"
npm config set https-proxy "http://username:password@host:port"
npm config set strict-ssl false
npm config set registry "http://registry.npmjs.org/"

将 strict-ssl 设置为 false 是一个不好的主意,因为你将无法知道你的安全通信是否已被破坏。 - Alex KeySmith

2

在 cmd 或 GIT Bash 或其他提示符下,请使用以下命令:

$ npm config set proxy "http://192.168.1.101:4128"

$ npm config set https-proxy "http://192.168.1.101:4128"

其中192.168.1.101是代理IP地址,4128是代理端口。根据您的代理设置进行更改。


2

尝试这个,这是唯一对我有效的方法:

npm --proxy http://:@proxyhost: --https-proxy http://:@proxyhost: --strict-ssl false install -g package

注意选项--strict-ssl false

祝你好运。


1

我无法使用CNTLM使其工作。我尝试按照上面发布的所有信息进行操作,但代理仍未授权连接。对于Fiddler,您只需安装它并勾选自动身份验证选项即可。但是为了使其正常工作,我必须从我的用户文件夹中删除.npmrc文件,并且按照此处指示设置环境变量,其中包括这些值:

set npm_config_https-proxy="http://127.0.0.1:8888"

set npm_config_registry="http://registry.npmjs.org/"

1

通过在Google上进行一些搜索,我尝试的第一件事是这个。

npm config set registry http://registry.npmjs.org/
npm config set proxy "your proxy"
npm config set https-proxy "your proxy"

但是当我尝试执行“npm install”时,似乎npm失去了连接。然后我在命令提示符中运行了这行代码,现在我可以使用npm install。
set NODE_TLS_REJECT_UNAUTHORIZED=0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接