JavaScript is required
Blog About Online 🎬

“windows-build-tools”的成与败~

2024/09/08
6 mins read
See this issue
# 踩坑记录器
# 陈年老博客
Back

PS:本文的情况仅发生在Windows的环境中,非Win用户请自行选择食用~

这几天下来了几个工程,其中有两三个是node项目,对node的食用并不能达到行云流水般的操作,一边啃着文档和相关的学习资料一边跑,然鹅… 刚拉下仓库没多久,准备打上依赖跑一道,就出现了:

----------------------------- Python ----------------------------- 
Successfully installed Python 2.x/x.x

or

----------------------------- Python ----------------------------- 
Python 2.x.xx is already installed, not installing again.

还是绿色的~(跟你说是安装成功了的意思)
然后他就在这个位置卡死了…

到这里,我们先熟悉下这个windows-build-tools(以下简称:wbt)是用来作甚的,那又为何到此就执行不下去了呢?

1、关于wbt,我个人的理解是算作很底层的一个编译器,而且仅发生在window环境内。 比如进行项目编译时,应用程序构建时,以及我最最最难以接受为啥前端的一个npm install/run build都会涉及到这个玩意…
其实不然,因为这个东西就连图片压缩的时候都会被牵扯进来用作底层的一个依赖库,而这个东西本身并不是在第三方发起,它就在于windows系统的本身提供了这样的一套完整的构建工具,导致产生了wbt这么个npm,玩C的小伙伴应该更熟悉一点,他在windows内部是构建工具链中一个非常关键的一环,没错,他就是C++的Build Tools;
有看我之前的文章的人应该有知道,很多时候装一个npm会出现乱七八糟的问题,其中pngquant、libpng-dev、windows-build-tools(三个人的电影)说过这个玩意的难缠点,但是现在回头来看,好像并不能覆盖百分百的成功率,而加上本篇的方案来走,几乎99.99%是没有问题的吧~ 好,关于wbt的了解不知道各位有没有一个浅浅的认识(总之,他就是一个非常非常底层的构建工具,然后被各种前端中间件的作者利用,打通连接到window内C++编译工具的使用或编译链接了C++的原生api,大概就是这么回事了吧…官方详细说明

2、关于windows安装出现的问题,综合了多篇文章及源码的查看,这个应该是作者写的一个bug。为何如此判断?在install后,各种环境依赖确实也完成了,但是在判断是否安装构建工具成功时的条件属性 BUILD_TOOLS.version 即构建工具版本时,是依据不同的版本里面包含不同的log日志,其中就有关键的:

Closing installer. Return code: 3010.

-----------------或-----------------

Closing installer. Return code: 0.

-----------------或-----------------

Closing the installer with exit code 0

这么三个条件值即可以满足安装成功的条件;下面的两图就是根据条件值检索到的逻辑块,至于后续的一个执行,我理解应该到图二的时候就被stop掉了,导致后续的代码没有被继续执行到;

image.png

image.png

但是实际上并非这样,根据该大佬的解释 image.png 原来,作者是根据日志文件的内容,来决定里面的判断值是否命中(成功安装所需的环境和依赖),也是泪目了~

再综合几条文章来看:
1、installation-hangs-after-successfully-installed-python-2-7-while-installing-pr
2、npm安装windows-build-tools时卡在Python 2.7 is already installed, not installing again.
3、npm install --global --production windows-build-tools卡在Successfully installed Python 2.7不动

以上,前1、2条指向的都是本文阐述的一个比较赞同的原因,而第三条在经过实操并调整简便的操作后一样可以解决:
(推荐!!!)①、在安装前,确认本地是否已安装python,若已安装,可以先卸载本地的python,再:

npm i -g windows-build-tools --registry=https://registry.npmjs.org/

②、本地若已安装python,可以去系统环境变量中移除掉python的环境变量,再:

npm i -g windows-build-tools --registry=https://registry.npmjs.org/

祝:各老板2024万事顺意~