Как получить текущий путь к файлу, который запускает 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?
Ответы
Ответ 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