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

Расширение/разрешение ~ в node.js

Я новичок в nodejs. Может ли node разрешить ~ (исходный каталог unix) пример ~ foo, ~ bar to/home/foo,/home/bar

> path.normalize('~mvaidya') 
'~mvaidya'
> path.resolve('~mvaidya') 
'/home/mvaidya/~mvaidya'
> 

Этот ответ неверен; Я надеюсь, что ~ mvaidya должен разрешить/home/mvaidya

4b9b3361

Ответ 1

Как Поддержка QZ, вы можете использовать process.env.HOME на OSX/Linux. Здесь простая функция без зависимостей.

const path = require('path');
function resolveHome(filepath) {
    if (filepath[0] === '~') {
        return path.join(process.env.HOME, filepath.slice(1));
    }
    return filepath;
}

Ответ 2

Причина, по которой этого нет в Node, заключается в том, что расширение ~ - это особенность bash (или оболочки). Неясно, как избежать этого правильно. Подробнее см. в этом комментарии.

Существуют различные библиотеки, предлагающие это, большинство всего лишь несколько строк кода...

Таким образом, вы, вероятно, хотите сделать это самостоятельно.

Ответ 3

Эта библиотека NodeJS поддерживает эту функцию через асинхронный обратный вызов. Он использует библиотеку etc-passswd для выполнения расширения, поэтому, вероятно, не переносится на Windows или другие платформы, отличные от Unix/Linux.

Если вы хотите расширить домашнюю страницу для текущего пользователя, тогда этот API-интерфейс с более легким весом может быть всем, что вам нужно. Он также синхронный, настолько простой и доступный для большинства платформ.

<сильные > Примеры:

 expandHomeDir = require('expand-home-dir')

 expandHomeDir('~')
 // => /Users/azer

 expandHomeDir('~/foo/bar/qux.corge')
 // => /Users/azer/foo/bar/qux.corge

Другим родственным lib является home-dir, который возвращает домашний каталог пользователя на любой платформе:

https://www.npmjs.org/package/home-dir

Ответ 4

Пример:

const os = require("os");

"~/Dropbox/sample/music".replace("~", os.homedir)

Ответ 5

Мне просто нужно было это сегодня, и единственной менее уклончивой командой была команда из os.

$ node
> os.homedir()
'/Users/mdesales'

Я не уверен, что ваш синтаксис правильный, поскольку ~ уже является результатом для домашнего каталога текущего пользователя

Ответ 7

Это сочетание некоторых из предыдущих ответов с добавлением немного большей безопасности.

const os = require('os');

function resolveTilde (filePath) {
  if (!filePath || typeof(filePath) !== 'string') {
    return '';
  }
  // '~/folder/path' or '~'
  if (filePath[0] === '~' && (filePath[1] === '/' || filePath.length === 1)) {
    return filePath.replace('~', os.homedir());
  }
  return filePath;
}
  • Использует более современный os.homedir() вместо process.env.HOME.
  • Использует простую вспомогательную функцию, которую можно вызывать из любого места.
  • Имеет базовую проверку типов. Возможно, вы захотите по умолчанию вернуть os.homedir(), если вместо возврата пустой строки передается не-строка.
  • Проверяет, что путь начинается с ~/ или является просто ~, чтобы не заменять другие псевдонимы, такие как ~stuff/.
  • Использует простой подход "заменить первый экземпляр" вместо менее интуитивного .slice(1).