2016-09-23 20 views
0

Поэтому у меня есть следующий блок коды:Nodejs получить абсолютный путь по отношению к process.cwd()

#!/usr/bin/env node 

const path = require('path'); 
const yargs = require('yargs').argv; 
const ghpages = require('gh-pages'); 
const randomstring = require("randomstring"); 

const dirName = randomstring.generate({ 
    length: 12, 
    charset: 'alphabetic' 
}); 

console.log(__dirname, dirName, process.cwd(), yargs.directory, yargs.branch); 

ghpages.publish(path.join(process.cwd(), yargs.directory), { 
    branch: yargs.branch, 
    clone: `../../../../tmp/${dirName}` 
},() => { 
    console.log('removing'); 
}); 

Это требует абсолютного пути к clone месту.

Очевидно, что на данный момент я тестировал его жестко, но я хочу, чтобы получить абсолютный путь до /tmp/ от process.cwd().

Поэтому в основном то, что я хочу, если я запускал скрипт в /home/otis../../../../tmp/${dirName} станет ../../tmp/${dirName}, поэтому мне нужно, чтобы создать путь, основанный на process.cwd()

Любые идеи?

Приветствия/

ответ

2

Это плохая практика, чтобы использовать относительный пути, особенно к системным папкам. В случае, если местоположение проекта будет изменено, вам также придется обновить свой код. Если вам нужен временный каталог системы, вы можете использовать следующее:

require('os').tmpdir() 

Это вернет вам исправить абсолютный путь к временной папке, в зависимости от текущей ОС.

+0

Я понимаю это, но параметр' clone' ожидает относительный путь, что означает, что абсолютные пути не будут работать. –

+0

Затем, как предложил @AvraamMavridis, вы можете использовать 'require ('path'). Relative (process.cwd(), require ('os'). Tmpdir())' – itereshchenkov

2

Вы можете использовать path.resolve, чтобы получить абсолютный путь.

например.

path.resolve('../src/tmp') 
// '/Users/yourusername/src/tmp' 

Или вы можете использовать path.relative(from, to), который дает относительный путь между from и to

Так что в вашем случае, я думаю, это

path.relative(process.cwd(), "../../../../tmp/")

+0

Не могли бы вы привести пример из 'process.cwd()' '/ tmp' - это системная папка tmp. –

+0

@OtisWright что значит «абсолютный путь относительный»? Поскольку у вас есть абсолютный url (process.cwd уже дает абсолютный путь), почему вам нужен относительный? –

+0

пример добавлен к вопросу о том, что я имею в виду. –