npm安装模块报错:msb4025的解决方法

问题

在win8.1下安装npm模块的时候控制台报错error MSB4025: 未能加载项目文件,给定编码中的字符无效
网上查找的结果是说和中文用户名有关(以后文件夹、用户名请尽量不要用中文),造成编码转换失败。

原因

windows下的中文默认用的是GBK编码,而vcxproj文件默认的编码方式是utf-8。node的gyp工具,并没有很好的处理多语言编码的问题。这样导致生成的vcxproj文件是ANSI编码,内部的中文字符是GBK编码,等到调用VS2013编译模块时,就会导致VS2013无法正确使用vcxproj文件,导致编译安装失败。

解决

在node.js的安装目录下,找到node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\easy_xml.py这个文件,找到# It has changed, write it这一行。
修改前:

# It has changed, write it
  if existing != xml_string:
    f = open(path, 'w' ,'utf_8_sig')
    f.write(xml_string)
    f.close()

修改一下,加个编码的判断:

# It has changed, write it
  if existing != xml_string:
    if path.endswith('vcxproj'):
      #use utf_8 encoding to generate vcxproj file
      f = codecs.open(path, 'w', 'utf_8_sig')
      #convert GBK string to Unicode string to ensure the later utf_8 encoding
      f.write(xml_string.decode('gbk'))
    else:
      f = open(path, 'w')
      f.write(xml_string)
    f.close()

然后在文件开头加上
import codecs
注意一下,python文件的一个恶心之处就是必须遵守严格的缩进,这里的换行缩进都是2个空格
修改完成后保存,再次执行安装命令应该就可以成功了~

参考文章


一部由众多技术专家推荐, 帮你成为具有全面能力和全局视野工程师的进阶利器—— 《了不起的JavaScript工程师》出版了! 点击下方链接即刻踏上进阶之路!


亚里士朱德 wechat
更多WEB技术分享请订阅微信公众号“WEB学习社”