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

Как получить текущий путь к файлу, который запускает script в nodejs

Итак, у меня есть node модули, которые могут потребоваться для интернационализации.

Я пытаюсь получить текущий путь к файлу, который запускает мой модуль node внутри модуля узла.

Использовать случай # 1:

Внутри ~/yourProject/node_modules/i18n.js

var current_path_to_locales_dir = path.join(__dirname, "locale");

И путь к серверу:

~/YourUserName/yourProject/app.js

Выполнение var i18n = require("i18n");

И пытаясь получить путь, он вернется

/User/YourUserName/yourProject/node_modules/locale

Это правильно, но я ожидаю, что он будет искать

/User/YourUserName/yourProject/locale

Используйте случай # 2:

Внутри ~/i18nProject/i18n.js

var current_path_to_locales_dir = path.join(__dirname, "locale");

Если у меня есть пример приложения в ~/i18nProject/sample и выполняется var i18n = require("../i18n");

В этом каталоге locale будет

/User/YourUserName/i18nProject/locale

Снова это правильно, но я ожидаю, что это будет

/User/i18nProject/sample/locale/

Теперь мне интересно, есть ли способ, которым я могу получить путь к текущему запуску script?

4b9b3361

Ответ 1

Используйте переменные __filename, __dirname вернет имя и путь к названию модулей/скриптов, см. здесь http://nodejs.org/docs/latest/api/globals.html#globals_filename

Update

В вашем случае вам нужно получить вызывающего модуля / script:

Node.js не делает этого для вас, поэтому технически вам, возможно, придется добавить дополнительную оболочку и параметр в свой модуль и преобразовать его в функцию, которая принимает эту информацию.

Однако для реализации getCaller существует проблема, связанная с использованием Error.prepareStackTrace Эта нить уже имеет ваше решение:

Как получить путь к файлу функции вызывающего абонента в node.js?

Ответ 2

Случай 1:

Если вы хотите по умолчанию использовать каталог locals в проекте пользователя, потребляющего ваш пакет npm, измените эту строку:

var current_path_to_locales_dir = path.join(__dirname, "locale");

в

var current_path_to_locales_dir = path.join(__dirname, "..", "locale");
// The ".." moves back one directory out of node_modules. 

Просто убедитесь, что файл с указанным выше кодом находится в корне вашего пакета npm. Возможно, лучше изменить на path.resolve, но я позволю вам изучить различия, поскольку это выходит за рамки вашего вопроса.

Случай 2:

Если вы хотите получить доступ к образцовому каталогу в своем пакете npm с помощью require("../i18n");, измените эту строку:

var current_path_to_locales_dir = path.join(__dirname, "locale");

в

var current_path_to_locales_dir = path.join(__dirname, "sample", "locale");

То же, что и в случае 1, убедитесь, что файл, выполняющийся над кодом, находится в корне вашего пакета npm