加载master_preferences时,require()与JSON.parse()的差异

时间:2016-04-22 23:51:07

标签: node.js google-chrome

我正在尝试在NodeJS中加载Chrome master_preferences文件。我尝试过以下尝试:

不起作用

require('./master_preferences')

不起作用(确认文件是带有file -I的utf8)

JSON.parse(fs.readFileSync('master_preferences', 'utf8'));

是否有效(如果我运行cp master_preferences master_preferences.json

require('./master_preferences.json')

JSON.parse()是否比require()更严格? FWIW,python 2.7也无法使用json.load(f)

解析输入

1 个答案:

答案 0 :(得分:2)

require('./master_preferences')无法正常工作,因为没有任何扩展名,节点会将其视为具有.js扩展名的常规javascript文件并尝试编译它。由于仅仅json不是有效的js语法,因此会抛出错误。

由于require('./master_preferences.json')适合您,我认为问题在于BOM特征。在解析文件之前,Becaue require()尝试剥离BOM字符。 See source

function stripBOM(content) {
  if (content.charCodeAt(0) === 0xFEFF) {
    content = content.slice(1);
  }
  return content;
}
JSON.parse(stripBOM(fs.readFileSync('master_preferences', 'utf8')));