Я создаю инструмент, который является главным образом узлом. Этот инструмент можно установить глобально (с опцией -g
) У меня есть несколько статических файлов в модуле для создания отчета. Если модуль вызывается локально, я могу ссылаться на статические файлы с относительным путем ./node_modules/<module>/static/filename
. Но когда инструмент вызывается как команда, как я могу ссылаться на статические файлы? И как я могу определить, вызван ли инструмент как локальный модуль или как команда?Определение расположения модулей узла во время выполнения
ответ
Используйте волшебную переменную __dirname. Он ссылается на каталог, содержащий ваш файл сценария.
Когда инструмент установлен глобально, то, как правило, две записи в системах Unix:
/usr/local/lib/node_modules/<module>/
-> каталог, содержащий все исходные модуль файлы/usr/local/bin/<script.js>
-> символическая к вашему модуль исполняемый скрипт
Поскольку Узел использует реальный путь (т. е. после того, как все символические ссылки были разрешены), чтобы разрешить путь относительно текущего модуля, вам не нужно беспокоиться о различиях между глобальной и локальной установкой.
Что вам нужно для обработки - это, возможно, другой текущий рабочий каталог, в котором выполняется процесс узла. Решение состоит в том, чтобы разрешить относительный путь к вашему статическому файлу против абсолютного пути, где находится ваш модуль, а не предполагать, что процесс узла будет выполняться в определенном каталоге, как в вашем примере.
Есть два способа для этого:
Использование
__dirname
(API docs), который содержит имя каталога (путь) текущего исходного файла:var path = require('path'); // assuming this script is in package root directory var staticFile = path.resolve(__dirname, 'static', 'filename'); // if the script is in lib/ subdirectory, then you want to call var staticFile = path.resolve(__dirname, '..', 'static', 'filename');
Использование
require.resolve()
, который возвращает то же имя файла, которое будет использоваться по вызовуrequire()
:// assuming this script is in package root directory var staticFile = require.resolve('./static/filename'); // if the script is in lib/ subdirectory, then you want to call var staticFile = require.resolve('../static/filename');
- 1. Определение ОС во время выполнения
- 2. определение подкласса во время выполнения
- 3. Определение классов во время выполнения
- 4. Область выполнения модулей узла
- 5. Импорт произвольных модулей во время выполнения
- 6. Перемещение расположения папки модулей
- 7. Определение, какой класс использовать во время выполнения
- 8. Определение типов протоколов во время выполнения
- 9. Определение символа новой строки во время выполнения
- 10. определение парсера StAX во время выполнения
- 11. EclipseLink - определение FetchType во время выполнения
- 12. Инъекция зависимостей - определение аргументов во время выполнения
- 13. Geb: Определение объектов страницы во время выполнения
- 14. Как изменить определение класса во время выполнения?
- 15. Определение производного типа класса во время выполнения
- 16. Определение объекта вкладки во время выполнения
- 17. Определение valueBinding для Ember.TextField во время выполнения
- 18. Определение пути решения во время тестового выполнения
- 19. Определение реализации Python во время выполнения?
- 20. Определение иерархии классов объекта во время выполнения
- 21. Определение сервера приложений во время выполнения?
- 22. Определение аргументов рабочего процесса во время выполнения до выполнения
- 23. Определение во время выполнения, стили которого реализованы с помощью JavaScript
- 24. Избегайте загрузки модулей модулей DOM во время тестирования
- 25. node.js и генерации модулей в/во время выполнения
- 26. Динамически создавать методы тестирования модулей во время выполнения в MSTest
- 27. Dojo amd загрузка междоменных модулей во время выполнения
- 28. Как получить полный список зависимостей модулей ядра во время выполнения
- 29. Получение расположения двух разных модулей
- 30. Определить модуль во время выполнения