2016-04-22 53 views
0

我試圖在NodeJS中加載Chrome master_preferences文件。我嘗試了以下嘗試:加載master_preferences時require()vs JSON.parse()的差異

不工作

require('./master_preferences') 

不工作(已確認該文件是UTF8與file -I

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

不工作(如果我跑cp master_preferences master_preferences.json

require('./master_preferences.json') 

JSON.parse()比require()更嚴格嗎? FWIW,蟒蛇2.7也無法解析使用json.load(f)

+0

JSON.parse()會引發錯誤嗎?第一次嘗試不起作用,因爲沒有'.json'文件擴展名。 [Here](https://nodejs.org/api/modules.html#modules_all_together)是嘗試加載文件/模塊時'require()'遵循的邏輯。 – dvlsg

+0

SyntaxError:意外的令牌是從NodeJS拋出的內容。節點版本是5.9.1 – David

回答

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')));