Расширение/разрешение ~ в 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
Ответы
Ответ 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'
Я не уверен, что ваш синтаксис правильный, поскольку ~ уже является результатом для домашнего каталога текущего пользователя
Ответ 6
Сегодня я использовал https://github.com/sindresorhus/untildify
Я работаю на OSX, хорошо работал.
Ответ 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)
.