nodejs安裝jsdom模塊出現MSB4025錯誤

    在安裝jsdom模塊的過程當中遇到這麼一個MSB4025錯誤:(win8.1 下,已經安裝了vs2013 for desktop express版) node

error MSB4025: 未能加載項目文件,給定編碼中的字符無效

    在網上查了一些資料,說是由於編碼的問題,由於在windows下使用,用戶名是中文,致使在生成vcxproj文件時,有些依賴路徑裏包含了中文字符。好吧,我認可我安裝模塊的路徑的確是包含中文名稱...... python

    windows下的中文默認用的是GBK編碼,而vcxproj文件默認的編碼方式是utf-8。node的gyp工具,並無很好的處理多語言編碼的問題。這樣致使生成的vcxproj文件是ANSI編碼,內部的中文字符是GBK編碼,等到調用VS 2013編譯模塊時,就會致使VS2013沒法正確使用vcxproj文件,致使編譯安裝失敗。 express

nodejs的gyp工具使用的python,在安裝目錄下能夠找到gyp相關的python代碼,修改其中用於生成vcxproj的代碼,使其用utf-8編碼生成文件內容並存儲,便可解決此問題。


    網上找到資料說是修改 C:\Program Files (x86)\nodejs\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp>下的 easy_xml.py文件(這裏的 ‘C:\Program Files (x86)\nodejs’指的是本人nodejs的安裝路徑,實際操做中要換成對應的路徑,通常是‘C:\Program Files\nodejs‘) npm

    找到 「# It has changed, write it」這一行,將下面的判斷代碼修改,原來是: windows

# 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()


    值得注意的是,代碼中使用到了「codecs.open」,因此要再開頭處引入codecs,要否則會報錯說變量找不到,在開頭處加上:
import codecs

    完成後保存,在運行一下安裝jsdom的命令,發現已成功安裝。 dom

相關文章
相關標籤/搜索