<2020年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

文章分类

导航

订阅

NODEJS调试一例

最近在使用Node.JS开发一个客户端,第一个大问题是网络速度,访问美国的文件真是慢,很影像效率。
文件下载完成后,使用yarn install命令来落实依赖包时,遇到了一个拦路虎。当yarn调用node-gyp构建sqllite3时出错,信息如图:

从下往上理解报错信息,倒数第二行表明是执行node-gyp rebuild命令时出错了,最后一行cwd指示出的当前目录是vscode-sqllite3,二者结合,是node-gyprebuild sqllite3时出错了。

尝试手工切换到这个目录,执行node-gyp rebuild,一切顺利。

再尝试一般,使用yarn install,还是到这里出错。

看来问题有点复杂,搜索一圈,没有找到有效的信息。于是只好自己debug了。看包含stack字样的调用栈,是调用msbuild时出错了,我确实是在用vs 2019来构建windows 版本。

接下来的问题是msbuild为啥出错了?

error MSB6006那一行应该是显示的MSBUILD的错误信息,但现在是乱码,讨厌啊,为什么是乱码呢?

根据老黄牛多年的经验,估计是和中文有关系。最近几年,微软的多语言部门(i18n)特别勤奋,把本来没有翻译成中文的地方都找出来,鬼子进村一般,地毯式的搜索,一看到有英文的地方都要翻译、翻译、翻译......殊不知,有些东西是没有必要翻译为中文的,翻译过来只能是添乱。比如本来是英文的编译错误信息也被翻译了,真是糟糕。对于大多数程序员来说,英文的错误信息很便于理解,也便于在互联网上找到类似的错误,可以一翻译为中文,全废了,不知所云,想搜索,还要先换为英文,才能搜到有用的信息。

上面的乱码也是翻译成中文后的一个恶果。

怎么半呢?首先想到的是设置MSBuild的语言输出,但是没找到方法,估计注册表或者某个地方可以,但是没有找到指导。

想了一下,有了。改系统的语言吧,进控制面板,把首选语言改为英文。可这个代价挺大的,要log off再log in才有效。

登出,再重新登录,重新执行,有效果了,乱码终于变成人话了。

乱码的问题解决后,信息好懂了,msbuild在执行外部命令时出错了,返回的错误是cmd exited with code 1.

而且cmd.exe还输出了一行错误:c:\Python27 不是有效的内部命令或者外部命令

c:\Python27是目录名,当然不是有效命令了。看来,msbuild在调用python时,python的命令行搞错了。

找到错误原因,问题解决了一半,下一步的任务是找出这个错误的python命令行是哪里来的,如何把正确的传进去。要知道,这里面是要经过好多道手的。

使用记事本打开MSBUILD使用的项目文件,看到里面的命令,果然是错误的:

<Command>call call c:\Python27 &quot;..\..\deps\extract.py&quot; &quot;..\..\deps\sqlite-autoconf-3280000.tar.gz&quot; &quot;$(OutDir)obj\global_intermediate&quot;&#xD;&#xA;if %errorlevel% neq 0 exit /b %errorlevel%

这个错误信息哪里来的呢?Yarn install的工作大纲是package.json,于是打开package.json来找源头。整个文件有点长,浏览一下,有关的部分是下面这段:

睁大眼睛看action那一行,有点长,但是左边的重要,因为它是决定python路径的,于是便看到了:

process.env.npm_config_python

搜索一下,这个npm_config_python导致过很多问题,github上也有关于它的bug。没有太多时间深究它,当务之急是怎么改变它,于是想到了npm config set命令,即:

npm config set python c:\Python27\python.exe

运行这个命令会改变当前用户的.npmrc文件,打开一看,果然变了。


再重复一次yarn install,这次问题彻底解决了。


posted on 2020年2月12日 19:09 由 Raymond

Powered by Community Server Powered by CnForums.Net