2015-11-17 4 views
2

В узле 5.0 есть синтаксис для require, где он распознает файл как json без расширения .json?Поддерживает ли nodejs «require» для json-файла без расширения .json?

Например, я хочу иметь возможность читать в файле .bowerrc (json-файл) с инструкцией require, подобной этому.

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

но узел бросает токены ошибки, потому что он думает, что это яваскрипт и не 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 как двоичный аддон. СТОП

Вы можете сделать свой собственный JSON-погрузчик:

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

Я смотрю на встроенный в опции требуют как 'требуют ('xx.is-JSON', {формат: '' JSON }); ' –

+1

Хотя это не используется, я недавно наткнулся на модуль, в который вы можете загрузить любой файл конфигурационного типа и указать тип файла независимо от имени файла. https://www.npmjs.com/package/app-etc-load Так вот в одном лайнере 'var bowerrc = require ('app-etc-load') (" ./. bowerrc ", json); ' – DKebler

+0

Катить собственное решение не совсем то же самое. требуется путь относительно файла, из которого он был вызван. Это решение относится к рабочему каталогу приложения. –

Смежные вопросы