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

Определите рабочий каталог командной строки при запуске node bin script

Я создаю интерфейс командной строки node. Он устанавливается глобально и использует файл bin для выполнения.

Я планирую открыть окно команд в корневом каталоге файлов, над которыми я работаю, а затем просто запустить команду, однако мне не удалось определить текущий рабочий каталог, так как process.cwd() возвращает каталог node пакет. Первоначально предполагалось, что, поскольку код выполняется с использованием пакетного файла в качестве обертки (таким образом, файлы bin могут выполняться без node в начале), тогда это невозможно, но кофе script удается это сделать. Я посмотрел на источник кофе script, но не смог его выполнить (недостаточно опытного).

Чтобы проверить его самостоятельно, создайте пакет с этим пакетом. json файл:

{
  "name": "test-package",
  "version": "1.0.0",
  "bin": {
    "test-package":  "./bin/test-package"
  },
  "main": "/lib/test"
}

этот файл тестового пакета в корзине:

#!/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.

4b9b3361

Ответ 1

  • process.cwd() возвращает каталог, в котором была выполнена команда (а не каталог пакета node), если она не была изменена с помощью 'process.chdir' внутри приложения.
  • __filename возвращает абсолютный путь к файлу, где он размещен.
  • __dirname возвращает абсолютный путь в каталог __filename.

Если вам нужно загрузить файлы из каталога вашего модуля, вам нужно использовать относительные пути.

require('../lib/test');

вместо

var lib  = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');

require(lib + '/test');

Он всегда относится к файлу, в котором он вызвал и не зависит от текущего рабочего каталога.

Ответ 2

В качестве альтернативы, если вы хотите получить только текущий каталог текущего NodeJS script, вы можете попробовать что-то простое. Обратите внимание, что это не будет работать в самом CLI Node:

var fs = require('fs'),
    path = require('path');

var dirString = path.dirname(fs.realpathSync(__filename));

// output example: "/Users/jb/workspace/abtest"
console.log('directory to start walking...', dirString);