Подтвердить что ты не робот

Найти абсолютный базовый путь в каталоге проекта

До сих пор мы могли получить абсолютный путь к файлу, который будет открыт позже как readStream с помощью этого фрагмента кода:

var base = path.resolve('.');
var file = base + '/data/test.csv';

fs.createReadStream(file)

Так как Meteor 0.6.5 базовый путь указывает на .meteor/local/build/programs/...

Существует также API-интерфейс Assets, который, но не может вернуть нам путь, но только прочитанный документ. Нам нужен поток для обработки более крупных файлов данных?

4b9b3361

Ответ 1

Начиная с версии 1.3, функция документирована

Assets.absoluteFilePath(assetPath)

Кажется, что это лучший способ надежно получить путь к проекту.

Meteor Github

Ответ 2

Еще один способ найти корневой каталог проекта - это:

var base = process.env.PWD

Обратите внимание, что это не то же самое, что process.cwd(). Вместо этого это каталог, в котором вы запустили команду meteor, которая, как правило, вы ищете. Также обратите внимание, что это, вероятно, не очень полезно при запуске вашего приложения из развернутого пакета.

Ответ 3

Я столкнулся с тем же затруднительным положением, когда обновился до 0.6.5.

То, что я сейчас делаю, - это путь следующим образом:

var meteor_root = Npm.require('fs').realpathSync( process.cwd() + '/../' );

Это возвращает в режиме dev:

/my/application/.meteor/local/build/programs

и в связанном режиме:

/my/application/build/app/programs

Итак, вот я добираюсь до корневого пути моего приложения так:

var application_root = Npm.require('fs').realpathSync( meteor_root + '/../' );

// if running on dev mode
if( Npm.require('path').basename( Npm.require('fs').realpathSync( meteor_root + '/../../../' ) ) == '.meteor' ){
    application_root =  Npm.require('fs').realpathSync( meteor_root + '/../../../../' );
}

Единственный случай, в котором это произойдет, - это то, что вы случайно назовете свою папку приложений ".meteor", но это край.

Относительно этого вы можете получить доступ ко всему, что вам нужно.

Кроме того, вы также можете получить прямой доступ к папке с ресурсами, создаваемой создателем метеоров:

var assets_folder = meteor_root + '/server/assets/' + Npm.require('path').basename( application_root );

Скорее всего, это будет временным, так как я ожидаю, что в конечном итоге будут добавлены API-интерфейсы для взаимодействия с файлами и путями.

Надеюсь, что поможет

Ответ 4

Эй вам не нужно жестко, как в приведенных выше ответах... посмотрите Этот пакет

После установки вы можете получить доступ к корневому пути вашего метеора только с Meteor.rootPath

Ответ 5

Для Meteor 0.8.3,

__meteor_bootstrap__.serverDir выдает рабочий каталог при запуске в режиме сервера.

Пример

if (Meteor.isServer) {
   console.log(__meteor_bootstrap__.serverDir);
}

Ответ 6

Как и Meteor 1.2.1, это работает для меня:

var absoluteBasePath = path.resolve('../../../../../.');

Тот же результат с использованием split:

var absoluteBasePath = path.resolve('.').split(path.sep + '.meteor')[0];

Использование process.cwd():

var absoluteBasePath = path.resolve(process.cwd(), '../../../../../');
var absoluteBasePath = path.resolve(process.cwd()).split(path.sep + '.meteor')[0];