Я создаю интерфейс командной строки узла. Он устанавливается глобально и для выполнения использует файл bin.
Я планирую открыть командное окно в корневом каталоге файлов, над которыми я работаю, а затем просто запустить команду, однако мне не удалось определить текущий рабочий каталог, поскольку process.cwd()
он возвращает каталог пакета узла. Я изначально предполагал, что, поскольку код выполняется с использованием пакетного файла в качестве оболочки (именно так файлы bin могут выполняться без узла в начале), это невозможно, но coffee-script справляется с этим. Я взглянул на исходник кофейного сценария, но не смог его уследить (недостаточно опытный).
Чтобы проверить это на себе, создайте пакет с этим файлом package.json:
{
"name": "test-package",
"version": "1.0.0",
"bin": {
"test-package": "./bin/test-package"
},
"main": "/lib/test"
}
этот файл тестового пакета в bin:
#!/usr/bin/env node
var path = require('path');
var fs = require('fs');
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
require(lib + '/test');
Может ли кто-нибудь пролить свет на это.
а затем попробуйте получить каталог командной строки внутри lib / test.
источник
process.chdir()
, есть ли способ получить оригинал?var originalCwd = process.cwd();
затем выполнить yourprocess.chdir()
, и после этого вы можете вернуться к исходному).../lib/test
портативный компьютер?../lib/test
он переносится, в то время как аналог Windows..\lib\test
- нет ...Текущий рабочий каталог
Чтобы получить текущий рабочий каталог, вы можете использовать:
Однако имейте в виду, что некоторые сценарии, особенно gulp, изменят текущий рабочий каталог на
process.chdir()
.Путь к модулю узла
Вы можете получить путь к текущему модулю с помощью:
__filename
__dirname
Исходный каталог (где была инициирована команда)
Если вы запускаете сценарий из командной строки и хотите, чтобы исходный каталог, из которого был запущен сценарий, независимо от того, в каком каталоге в настоящее время работает сценарий, можно использовать:
Исходный каталог, при работе со скриптами NPM
Иногда желательно запустить сценарий NPM в текущем каталоге, а не в корне проекта.
Эта переменная доступна в сценариях пакета npm как:
У вас должна быть последняя версия NPM. Если эта переменная недоступна, убедитесь, что NPM обновлен.
Это позволит вам получить доступ к текущему пути в вашем package.json, например:
источник
process.env.INIT_CWD
возвращаетpackage.json
В качестве альтернативы, если вы хотите получить только текущий каталог текущего скрипта NodeJS, вы можете попробовать что-то простое, подобное этому. Обратите внимание, что это не будет работать в самом Node CLI:
источник
path.resolve('.')
тоже надежный и чистый вариант, потому что у нас почти всегдаrequire('path')
. Он даст вам абсолютный путь к каталогу, из которого он вызван.источник
Вот что у меня сработало:
источник