Следующий код работает для загрузки локального статического файла JSON:
var stories = require('../stories/stories.json');
Теперь я хочу загрузить файл на основе переменной, например. сделать что-то вроде этого:
var storiesPath = '../stories/stories.json';
var stories = require(storiesPath);
Но это вызывает ошибку:
Error: Cannot find module '../stories/stories.json'
at require (packages/modules-runtime.js:123:19)
at meteorInstall.server.main.js (server/main.js:7:15)
Есть ли способ заставить это работать? Я предполагаю, что вместо этого я мог бы загрузить свой файл через http-пакет Meteor, но я бы предпочел не добавлять другой пакет, если я могу этого избежать.
Спасибо за ваши подсказки
Npm.require
??
Как я уже сказал в комментарии, вы можете легко использовать переменную в запросе, например,
> var x = 'fs';
> require(x).readFile
[Function]
Так что это не проблема, с которой вы имеете дело. Вы уверены, что ваш первый случай действительно работает? Это было бы удивительно. Я думаю, вы можете столкнуться с проблемами макета файла проекта из-за использования относительного пути. Я бы держался подальше от этого. И, к счастью, вы можете легко это сделать, используя актив! Вы можете поместить свой файл json в private/
в папку проекта, а затем использовать:
const stories = JSON.parse(Assets.getText('stories.json'));
Я до сих пор не понимаю, почему мой запрос с путем, взятым из переменной, не работает. Вероятно, разница в том, что в вашем тесте вы использовали модуль, а я использовал файл JSON. В любом случае: опция JSON.parse работает как шарм. Большое спасибо за этот вариант!
Это на самом деле отлично работает для меня, проверено с помощью
fs
:var x = 'fs'; require(x).readFile
работает отлично.