2015-11-17 26 views
2

在節點5.0中是否存在require的語法,在該語法中,它會將文件識別爲不帶.json擴展名的json?nodejs是否支持不帶.json擴展名的json文件的「require」

例如,我希望能夠用這樣的require語句閱讀.bowerrc文件(一個json文件)。

var bowerrc = require("./.bowerrc");

,而是因爲它認爲它的JavaScript,而不是一個JSON文件節點拋出一個標記錯誤。

如果我暫時將.bowerrc改爲.bowerrc.json(以及文件名),那麼一切都很好,所以我知道這是發生了什麼。

我看到有一個requirejs插件用於支持json!nameofile的瀏覽器,但在節點中不起作用。

回答

2

不,沒有辦法使require()將它視爲JSON,如果它沒有正確的文件擴展名。

相反,你只需要閱讀文件並自己解析它。

下面是Node.js的文檔的相關部分:

.js文件被解釋爲JavaScript的文本文件,並以.json文件 被解析爲JSON的文本文件。 .node文件被解釋爲編譯爲 用dlopen加載的插件模塊。

LOAD_AS_FILE(X)

  1. 如果X是一個文件,負載X如JavaScript文本。 STOP
  2. 如果X.js是一個文件,請將X.js作爲JavaScript文本加載。 STOP
  3. 如果X.json是一個文件,則將X.json解析爲JavaScript對象。 STOP
  4. 如果X.node是一個文件,請將X.node加載爲二進制附件。 STOP

你可以使自己的JSON裝載機:

function loadJSON(file) { 
    var data = fs.readFileSync(file); 
    return JSON.parse(data);   
} 
+0

我找了內置的選項需要像'需要( 'xx.is JSON的',{格式: 'JSON' });' –

+1

儘管它沒有使用require,但我最近遇到了一個模塊,您可以在其中加載任何配置類型文件並指定文件類型,而不考慮文件名。 https://www.npmjs.com/package/app-etc-load 所以像這樣在一個班輪 'var bowerrc = require('app-etc-load')(「./。bowerrc」,json );' – DKebler

+0

你自己的解決方案並不完全相同。需要路徑是相對於它被調用的文件。該解決方案與應用程序的工作目錄相關。 –