[DevTools] direnv๋ก ํด๋๋ง๋ค ๋ค๋ฅธ node ๋ฒ์ ์ ์ฉํ๊ธฐ / ์ ์ญ gitignore
ํ๋ก์ ํธ๋ง๋ค ์ฌ์ฉํ๋ Node ๋ฒ์ ์ด ๋ค๋ฅด๋ค๋ฉด nvm์ ์ด์ฉํด์ ๋ฒ์ ์ ๋ณ๊ฒฝํ ์ ์๋ค. ํ์ง๋ง ๋งค๋ฒ ์๋์ผ๋ก ๋
ธ๋ ๋ฒ์ ์ ๋ฐ๊ฟ์ฃผ๋ ๊ฒ์ ๋ฒ๊ฑฐ๋ก์ด ์ผ์ด๋ค. direnv
๋ฅผ ํ์ฉํ๋ฉด ํ๋ก์ ํธ ํด๋๋ฅผ ๋ฐ๊ฟ ๋๋ง๋ค ๋
ธ๋ ๋ฒ์ ์ด ์๋์ผ๋ก ๋ฐ๋๋๋ก ์ค์ ํ ์ ์๋ค. direnv๋ ํด๋๋ณ๋ก ํ๊ฒฝ์ ๊ด๋ฆฌํด์ฃผ๋ ๋๊ตฌ๋ค.
์ค์น
โถ direnv ์ค์น
brew install direnv # homebrew๋ก direnv ์ค์น
โท direnv hook ์ค์ (ํด๋ ์ด๋์ ํด๋น ํด๋์ .envrc
ํ์ผ ์๋ ์คํ).
oh-my-zsh๋ฅผ ์ฌ์ฉํ๋ค๋ฉด `.zshrc` ํ์ผ `plugins` ๋ฐฐ์ด์ `direnv`๋ฅผ ์ถ๊ฐํ๋ฉด ์๋์ผ๋ก ์ค์ ๋๋ค.
# ~/.zshrc
plugins=(... direnv)
oh-my-zsh๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์๋ ์ฝ๋๋ฅผ `.zshrc` ํ์ผ์ ์ถ๊ฐํ๋ค.
# ~/.zshrc
eval "$(direnv hook zsh)"
โธ shell ๋ค์ ์์
source ~/.zshrc
์ค์
์ด์ ํด๋๋ฅผ ์ด๋ํ ๋๋ง๋ค direnv hook์ด ํ์ฌ ๋ฐ ๋ถ๋ชจ ํด๋์ .envrc
์ค์ ํ์ผ์ด ์๋์ง ํ์ธํ๊ณ , ์๋ค๋ฉด ํด๋น ๋๋ ํ ๋ฆฌ๋ง์ ์ํ ์ค์ (.envrc
ํ์ผ์ ์
๋ ฅํ ํ๊ฒฝ๋ณ์ ๋ฑ)์ ๋ก๋ํ๋ค. ๋๋ ํ ๋ฆฌ๋ฅผ ๋น ์ ธ๋์ค๋ฉด ์ด ์ค์ ๋ค์ด ์ธ๋ก๋๋๋ค. ์ด๋ ๊ฒ direnv๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋๋ณ๋ก ๋
ธ๋ ๋ฒ์ ์ด๋ ํ๊ฒฝ๋ณ์๋ฅผ ๊ด๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ชจ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ~/.zshrc
ํ์ผ์ ๋ชฐ์๋ฃ์ง ์์๋ ๋๋ ์ฅ์ ์ด ์๋ค.
.nvmrc ํ์ผ ์์ฑ
๐ก .nvmrc ํ์ผ์ ๊ฐ๋ณ ํ๋ก์ ํธ๋ฅผ ์ํ ์ค์ ํ์ผ๋ก, ํด๋น ํ๋ก์ ํธ๊ฐ ์ฌ์ฉํ๋ ๋ ธ๋ ๋ฒ์ ๋ช ์ํ๋ค.
โถ ํ๋ก์ ํธ ์ต์์ ํด๋์ .nvmrc
ํ์ผ ์์ฑ
touch .nvmrc
โท .nvmrc
ํ์ผ์ ์ฌ์ฉํ๊ณ ์ถ์ node ๋ฒ์ ์
๋ ฅ
# .nvmrc
16.13.1
์ฐธ๊ณ ๋ก .nvmrc
ํ์ผ์ด ์๋ ํด๋์์ nvm use
๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด, .nvmrc
ํ์ผ์ ์
๋ ฅํ ๋
ธ๋ ๋ฒ์ ์ผ๋ก ๊ต์ฒด๋๋ค(nvm use 16.13.1
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ ๊ฒ๊ณผ ๋์ผ).
nvm use
# Found... .nvmrc' with version <16.13.1>
# Now using node v16.13.1 (npm v8.1.2)
.envrc ํ์ผ ์์ฑ
๐ก ํด๋๋ฅผ ์ด๋ํ ๋๋ง๋ค direnv hook์ด ํ์ฌ ๋ฐ ๋ถ๋ชจ ํด๋์ .envrc ์ค์ ํ์ผ์ด ์๋์ง ํ์ธํ๊ณ , ์๋ค๋ฉด ํด๋น ๋๋ ํ ๋ฆฌ๋ง์ ์ํ ์ค์ ์ ๋ก๋ํ๋ค.
โถ ํ๋ก์ ํธ ์ต์์ ํด๋์ .envrc
ํ์ผ ์์ฑ (.nvmrc
ํ์ผ์ ์์ฑํ ๋์ผํ ๊ฒฝ๋ก)
touch .envrc
โท.envrc is blocked...
๊ฒฝ๊ณ ๋ฌธ๊ตฌ๊ฐ ๋์ค๋ฉด direnv allow
๋ช
๋ น์ด๋ก ํ์ฌ ๋๋ ํ ๋ฆฌ์ .envrc
ํ์ผ ๊ถํ์ ํ์ฉํด์ค๋ค. ๊ถํ ํ์ฉ ๋ฉ์์ง๋ .envrc
ํ์ผ์ ์์ ํ ๋๋ง๋ค ๋์จ๋ค.
direnv allow
โธ .envrc
ํ์ผ์ ์๋ ๋ด์ฉ ์ถ๊ฐํ๋ค. ๊ทธ๋ผ ํด๋น ํ๋ก์ ํธ ํด๋๋ก ์ด๋ํ ๋๋ง๋ค .nvmrc
ํ์ผ์ ์
๋ ฅํ node ๋ฒ์ ์ผ๋ก ์๋ ๋ณ๊ฒฝ๋๋ค.
# .envrc
NVM_DIR=$HOME/.nvm # NVM_DIR ๋ณ์์ ~/.nvm ๋๋ ํ ๋ฆฌ ์ง์
# ์กฐ๊ฑด๋ฌธ [[ -e FILE ]] -> FILE์ด ์กด์ฌํ๋ฉด
# ์กฐ๊ฑด๋ฌธ [[ -s FILE ]] -> FILE ์ฌ์ด์ฆ๊ฐ 0 ๋ฐ์ดํธ๋ณด๋ค ํฌ๋ฉด
if [ -s $NVM_DIR/nvm.sh ]; then
source $NVM_DIR/nvm.sh # ์คํฌ๋ฆฝํธ ์คํ(์๋ธ ์์ ์์ฑํ์ง ์๊ณ ํ์ฌ ์์์ ์คํ)
nvm use
fi
Stack OverFlow์ ๋ค๋ฅธ ์ธํ ์ฝ๋. ๊ฒฐ๊ณผ๋ ๋์ผํ๋ค.
nvmrc=~/.nvm/nvm.sh
if [ -e $nvmrc ]; then
source $nvmrc
nvm use
fi
`direnv edit` ๋ช ๋ น์ด๋ก ํ์ฌ ํด๋์ `.envrc` ํ์ผ์ ๋ฐ๋ก ์์ ํ ์๋ ์๋ค. ์ด๋ `EDITOR` ํ๊ฒฝ ๋ณ์๊ฐ ์ค์ ๋์ด ์์ง ์๋ค๋ฉด ํ ์คํธ ํธ์ง๊ธฐ๋ก ์ด๋ฆฐ๋ค. ๋ค๋ฅธ ํธ์ง๊ธฐ๋ก ์ด๊ณ ์ถ๋ค๋ฉด `~/.zsrhc` ํ์ผ์ ์๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ถ๊ฐํ๋ค.
# ~/.zshrc
export EDITOR="code --wait" # VSCode๋ก ํธ์ง๊ธฐ ์ค์
ํ๊ฒฝ ๋ณ์ ์ถ๊ฐ
.envrc
ํ์ผ์ AWS โ์ธ์ฆ ์ ๋ณด ํน์ โํ๋กํ์ ์
๋ ฅํด์ ํด๋น ๋๋ ํ ๋ฆฌ๋ง์ ํ๊ฒฝ ๋ณ์๋ก ์ ์ฅํ ์๋ ์๋ค. ์ธ์ฆ ์ ๋ณด๋ณด๋จ AWS ํ๋กํ์ ํ๊ฒฝ ๋ณ์๋ก ์ง์ ํ๋ ๊ฑธ ์ถ์ฒ.
# AWS ์ธ์ฆ ์ ๋ณด๋ฅผ ์ง์ ์
๋ ฅํ ๋
export AWS_ACCESS_KEY_ID=ACCOUNT_Y_ACCESS_KEY
export AWS_SECRET_ACCESS_KEY=ACCOUNT_Y_SECRET_KEY
export AWS_DEFAULT_REGION=ap-northeast-1
# AWS ํ๋กํ์ ํ๊ฒฝ ๋ณ์๋ก ์ง์ ํ ๋ (์ถ์ฒ)
export AWS_PROFILE=ACCOUNT_X
export AWS_DEFAULT_REGION=ap-northeast-1
.envrc
์ ์ถ๊ฐํด๋ AWS ํ๋กํ ํ๊ฒฝ๋ณ์๋ฅผ ํฐ๋ฏธ๋์ ์
๋ ฅํด๋ณด๋ฉด ์๋์ฒ๋ผ ์ ๋์จ๋ค.
echo $AWS_PROFILE
# ACCOUNT_X
PATH ์ถ๊ฐ
.envrc
์ ์ํ๋ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ ์ ์๋ค. ~/downloads
๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ ๋, ์๋ ์๋์ฒ๋ผ ์
๋ ฅํด์ผ ํ์ง๋ง...
# .envrc
export PATH="~/downloads:$PATH"
.envrc
ํ์ผ์์ PATH_add ๊ฒฝ๋ก
๋ง ์
๋ ฅํ๋ฉด $PATH
๋ณ์์ ์๋์ผ๋ก ์ถ๊ฐ๋๋ค.
# .envrc
PATH_add ~/downloads
echo $PATH
# /Users/uesrname/downloads:/usr/local/opt/sqlite/bin:/Users/uesrname/...
์ ์ญ .gitignore ์ค์
.envrc
์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ํฌํจ๋ ์ ์์ผ๋ฏ๋ก .gitignore
ํ์ผ์ .envrc
.direnv
๋ฅผ ์ถ๊ฐํด๋๋ค.
# .gitignore
.direnv
.envrc
ํ์ง๋ง ํ๋ก์ ํธ๋ง๋ค ๋งค๋ฒ .gitignore
ํ์ผ์ ์ถ๊ฐํ๋๊ฑด ๋ฒ๊ฑฐ๋กญ๋ค. ํ๋ก์ ํธ๊ฐ ๋ง๋ค๋ฉด ๊น๋นกํ๊ณ ์ถ๊ฐํ์ง ์์ ์๋ ์๋ค. ์ด๋ ์ ์ญ(global)์ผ๋ก .gitignore
๋ฅผ ๋ง๋ค์ด์ ๋ชจ๋ ์์คํ
์ ์ ์ฉ๋๋๋ก ํ๋ฉด ๋๋ค. ๊ทธ๋ผ ๋งค ํ๋ก์ ํธ์ .gitignore
ํ์ผ์ ์ผ์ผ์ด ์
๋ ฅํ์ง ์์๋ ๋๋ค.
# ์ฌ์ฉ์ ํ ํด๋์ .gitignore_global ํ์ผ ์์ฑ
touch ~/.gitignore_global
# ~/.gitignore_global ํ์ผ์ด core.excludesfile์ด ๋๋๋ก ์ค์ (์ ์ญ .gitignore)
git config --global core.excludesfile ~/.gitignore_global
# ~/.gitignore_global ํ์ผ์ .envrc์ .direnv ์ถ๊ฐ
echo '.envrc' >> ~/.gitignore_global # >> ์ฐ์ฐ์๋ append
echo '.direnv' >> ~/.gitignore_global
ํ์ฌ ์์คํ
์ ์ค์ ๋ core.excludesfile
์ ํ์ธํ๋ ค๋ฉด ์๋ ์ปค๋งจ๋๋ฅผ ์
๋ ฅํ๋ค
git config --get core.excludesfile
# /Users/username/.gitignore_global
~/.gitignore_global โผ
# ๋ชจ๋ ์์คํ
์ ์ ์ฉ๋ .gitignore
# ์ฌ๊ธฐ์ ๋ช
์ํ ๊ฒ๋ค์ ๋ชจ๋ ํ๋ก์ ํธ์์ ignore ๋จ
# direnv files
.direnv
.envrc
# editor specific files and folders
.idea
.vscode
# misc
.DS_Store
.vercel
*.pem
๋ ํผ๋ฐ์ค
- direnv๋ฅผ ์ฌ์ฉํ ๋๋ ํ ๋ฆฌ(ํ๋ก์ ํธ) ๋ณ ๊ฐ๋ฐํ๊ฒฝ ๊ตฌ์ถ: ๋ฃจ๋น, ํ์ด์ฌ, ๋ ธ๋ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ
- A dotfile that will set the default node version on a project using nvm?
- A guide to manage your environment variables in a better way using direnv
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Git] git revert, git reset ์ฐจ์ด์ ๋ฐ HEAD ๋ถ๋ฆฌ (0) | 2024.05.01 |
---|---|
[HTML/CSS] ์ค๋ฐ๊ฟ ์ ์ด ์์ฑ word-break / word-wrap(overflow-wrap) (0) | 2024.05.01 |
[HTML/CSS] ์์๋๋ฉด ์ ์ฉํ CSS ์ต์ ๊ธฐ๋ฅ 6๊ฐ์ง (0) | 2024.05.01 |
[CS] RISC / CISC ์ํคํ ์ฒ ์ฐจ์ด์ (0) | 2024.05.01 |
[JS] ์๋ฐ์คํฌ๋ฆฝํธ RORO ๋์์ธ ํจํด / ์คํ ํธ๋ ์ด์ค / ์๋ฌ ์ ํ (0) | 2024.05.01 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[Git] git revert, git reset ์ฐจ์ด์ ๋ฐ HEAD ๋ถ๋ฆฌ
[Git] git revert, git reset ์ฐจ์ด์ ๋ฐ HEAD ๋ถ๋ฆฌ
2024.05.01 -
[HTML/CSS] ์ค๋ฐ๊ฟ ์ ์ด ์์ฑ word-break / word-wrap(overflow-wrap)
[HTML/CSS] ์ค๋ฐ๊ฟ ์ ์ด ์์ฑ word-break / word-wrap(overflow-wrap)
2024.05.01 -
[HTML/CSS] ์์๋๋ฉด ์ ์ฉํ CSS ์ต์ ๊ธฐ๋ฅ 6๊ฐ์ง
[HTML/CSS] ์์๋๋ฉด ์ ์ฉํ CSS ์ต์ ๊ธฐ๋ฅ 6๊ฐ์ง
2024.05.01 -
[CS] RISC / CISC ์ํคํ ์ฒ ์ฐจ์ด์
[CS] RISC / CISC ์ํคํ ์ฒ ์ฐจ์ด์
2024.05.01