One Tool
Manage each of your project runtimes with a single CLI tool and command interface.
commit fef8bdafae34225a90c709478f584311640c2570 Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed Dec 18 20:10:43 2024 +0000 Deploy to GitHub pages diff --git a/404.html b/404.html new file mode 100644 index 00000000..5681025e --- /dev/null +++ b/404.html @@ -0,0 +1,22 @@ + + +
+ + +asdf
core contribution guide.
Fork asdf
on GitHub and/or Git clone the default branch:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
The tools for core development are in this repo's .tool-versions
. If you wish to manage with asdf
itself, add the plugins:
asdf plugin add bats https://github.com/timgluz/asdf-bats.git
+asdf plugin add shellcheck https://github.com/luizm/asdf-shellcheck.git
+asdf plugin add shfmt https://github.com/luizm/asdf-shfmt.git
Install the versions to develop asdf
with:
asdf install
It may be useful to not use asdf
to manage the tools during development on your local machine as you may need to break functionality which would then break your dev tooling. Here's the raw list of tools:
If you want to try out your changes without making change to your installed asdf
, you can set the $ASDF_DIR
variable to the path where you cloned the repository, and temporarily prepend the bin
and shims
directory of the directory to your path.
It is best to format, lint and test your code locally before you commit or push to the remote. Use the following scripts/commands:
# Lint
+./scripts/lint.bash --check
+
+# Fix & Format
+./scripts/lint.bash --fix
+
+# Test: all tests
+./scripts/test.bash
+
+# Test: for specific command
+bats test/list_commands.bash
TIP
Add tests! - Tests are required for new features and speed up review of bug fixes. Please cover new code paths before you create a Pull Request. See bats-core documentation
The following is the .gitignore
file in the asdf-vm/asdf
repository. We ignore project-specific files. Files specific to your OS, tools or workflows should be ignored in your global .gitignore
configuration, see here for more details.
/installs
+/downloads
+/shims
+repository
+.vagrant
+keyrings
+/tmp
+
+dist/
.git-blame-ignore-revs
asdf
uses a .git-blame-ignore-revs
to reduce noise when running a blame. See the git blame documentation for more information.
Use the file with git blame
like so:
git blame --ignore-revs-file .git-blame-ignore-revs ./test/install_command.bats
Optionally, configure to use the file on every invocation of blame
without manually supplying it:
git config blame.ignoreRevsFile .git-blame-ignore-revs
It is possible to configure IDEs to use this file. For example, when using VSCode (with GitLens), write the following to .vscode/settings.json
:
{
+ "gitlens.advanced.blame.customArguments": [
+ "--ignore-revs-file",
+ ".git-blame-ignore-revs"
+ ]
+}
Execute tests locally with:
./scripts/test.bash
Before writing tests please read:
test/
scripts/test.bash
Bats debugging can be difficult at times. Using the TAP output with -t
flag will enable you to print outputs with the special file descriptor >&3
during test execution, simplifying debugging. As an example:
# test/some_tests.bats
+
+printf "%s\\n" "Will not be printed during bats test/some_tests.bats"
+printf "%s\\n" "Will be printed during bats -t test/some_tests.bats" >&3
This is further documented in bats-core Printing to the Terminal.
asdf
is using an automated release tool called Release Please to automatically bump the SemVer version and generate the Changelog. This information is determined by reading the commit history since the last release.
Conventional Commit messages define the format of the Pull Request Title which becomes the commit message format on the default branch. This is enforced with GitHub Action amannn/action-semantic-pull-request
.
Conventional Commit follows this format:
<type>[optional scope][optional !]: <description>
+
+<!-- examples -->
+fix: some fix
+feat: a new feature
+docs: some documentation update
+docs(website): some change for the website
+feat!: feature with breaking change
The full list of <types>
are: feat
, fix
, docs
, style
, refactor
, perf
, test
, build
, ci
, chore
, revert
.
!
: indicates a breaking changefix
: will create a new SemVer patch
feat
: will create a new SemVer minor
<type>!
: will create a new SemVer major
The Pull Request Title must follow this format.
TIP
Use Conventional Commit message format for your Pull Request Title.
The asdf-alpine and asdf-ubuntu projects are an ongoing effort to provide Dockerized images of some asdf tools. You can use these docker images as base for your development servers, or for running your production apps.
`,47)]))}const k=e(n,[["render",l]]);export{g as __pageData,k as default}; diff --git a/assets/contribute_core.md.Dwn6SPRK.lean.js b/assets/contribute_core.md.Dwn6SPRK.lean.js new file mode 100644 index 00000000..214bc256 --- /dev/null +++ b/assets/contribute_core.md.Dwn6SPRK.lean.js @@ -0,0 +1,39 @@ +import{_ as e,c as a,a2 as i,o as t}from"./chunks/framework.BQmytedh.js";const g=JSON.parse('{"title":"asdf","description":"","frontmatter":{},"headers":[],"relativePath":"contribute/core.md","filePath":"contribute/core.md","lastUpdated":1728309110000}'),n={name:"contribute/core.md"};function l(o,s,p,r,h,d){return t(),a("div",null,s[0]||(s[0]=[i(`asdf
core contribution guide.
Fork asdf
on GitHub and/or Git clone the default branch:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
The tools for core development are in this repo's .tool-versions
. If you wish to manage with asdf
itself, add the plugins:
asdf plugin add bats https://github.com/timgluz/asdf-bats.git
+asdf plugin add shellcheck https://github.com/luizm/asdf-shellcheck.git
+asdf plugin add shfmt https://github.com/luizm/asdf-shfmt.git
Install the versions to develop asdf
with:
asdf install
It may be useful to not use asdf
to manage the tools during development on your local machine as you may need to break functionality which would then break your dev tooling. Here's the raw list of tools:
If you want to try out your changes without making change to your installed asdf
, you can set the $ASDF_DIR
variable to the path where you cloned the repository, and temporarily prepend the bin
and shims
directory of the directory to your path.
It is best to format, lint and test your code locally before you commit or push to the remote. Use the following scripts/commands:
# Lint
+./scripts/lint.bash --check
+
+# Fix & Format
+./scripts/lint.bash --fix
+
+# Test: all tests
+./scripts/test.bash
+
+# Test: for specific command
+bats test/list_commands.bash
TIP
Add tests! - Tests are required for new features and speed up review of bug fixes. Please cover new code paths before you create a Pull Request. See bats-core documentation
The following is the .gitignore
file in the asdf-vm/asdf
repository. We ignore project-specific files. Files specific to your OS, tools or workflows should be ignored in your global .gitignore
configuration, see here for more details.
/installs
+/downloads
+/shims
+repository
+.vagrant
+keyrings
+/tmp
+
+dist/
.git-blame-ignore-revs
asdf
uses a .git-blame-ignore-revs
to reduce noise when running a blame. See the git blame documentation for more information.
Use the file with git blame
like so:
git blame --ignore-revs-file .git-blame-ignore-revs ./test/install_command.bats
Optionally, configure to use the file on every invocation of blame
without manually supplying it:
git config blame.ignoreRevsFile .git-blame-ignore-revs
It is possible to configure IDEs to use this file. For example, when using VSCode (with GitLens), write the following to .vscode/settings.json
:
{
+ "gitlens.advanced.blame.customArguments": [
+ "--ignore-revs-file",
+ ".git-blame-ignore-revs"
+ ]
+}
Execute tests locally with:
./scripts/test.bash
Before writing tests please read:
test/
scripts/test.bash
Bats debugging can be difficult at times. Using the TAP output with -t
flag will enable you to print outputs with the special file descriptor >&3
during test execution, simplifying debugging. As an example:
# test/some_tests.bats
+
+printf "%s\\n" "Will not be printed during bats test/some_tests.bats"
+printf "%s\\n" "Will be printed during bats -t test/some_tests.bats" >&3
This is further documented in bats-core Printing to the Terminal.
asdf
is using an automated release tool called Release Please to automatically bump the SemVer version and generate the Changelog. This information is determined by reading the commit history since the last release.
Conventional Commit messages define the format of the Pull Request Title which becomes the commit message format on the default branch. This is enforced with GitHub Action amannn/action-semantic-pull-request
.
Conventional Commit follows this format:
<type>[optional scope][optional !]: <description>
+
+<!-- examples -->
+fix: some fix
+feat: a new feature
+docs: some documentation update
+docs(website): some change for the website
+feat!: feature with breaking change
The full list of <types>
are: feat
, fix
, docs
, style
, refactor
, perf
, test
, build
, ci
, chore
, revert
.
!
: indicates a breaking changefix
: will create a new SemVer patch
feat
: will create a new SemVer minor
<type>!
: will create a new SemVer major
The Pull Request Title must follow this format.
TIP
Use Conventional Commit message format for your Pull Request Title.
The asdf-alpine and asdf-ubuntu projects are an ongoing effort to provide Dockerized images of some asdf tools. You can use these docker images as base for your development servers, or for running your production apps.
`,47)]))}const k=e(n,[["render",l]]);export{g as __pageData,k as default}; diff --git a/assets/contribute_documentation.md.BrHjmG2Y.js b/assets/contribute_documentation.md.BrHjmG2Y.js new file mode 100644 index 00000000..fd64bada --- /dev/null +++ b/assets/contribute_documentation.md.BrHjmG2Y.js @@ -0,0 +1,42 @@ +import{_ as i,c as a,a2 as e,o as n}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"Docs & Site","description":"","frontmatter":{},"headers":[],"relativePath":"contribute/documentation.md","filePath":"contribute/documentation.md","lastUpdated":1687069487000}'),t={name:"contribute/documentation.md"};function l(p,s,h,o,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`Documentation & site contribution guide.
Fork asdf
on GitHub and/or Git clone the default branch:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
The tools for Docs site development are managed with asdf
in the docs/.tool-versions
. Add the plugins with:
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
Install the tool version(s) with:
asdf install
Install Node.js dependencies from docs/package.json
:
npm install
VitePress (v2) is the Static Site Generator (SSG) we use to build the asdf documentation site. It was chosen to replace Docsify.js and subsequently VuePress as we would like to support an HTML only fallback when users do not have JavaScript available or enabled. This was not possible with Docsify & VitePress quicly supplanted VuePress. Other than this, the feature-set is largely the same, with the focus on writing Markdown files with minimal configuration.
package.json
contains the scripts required for development:
To start the local development server:
npm run dev
Format the code before committing:
npm run format
asdf
is using an automated release pipeline which relies on Conventional Commits in PR titles. Detailed documentation found in the core contribution guide.
When creating a PR for documentation changes please make the PR title with the Conventional Commit type docs
in the format docs: <description>
.
Configuration of the site is contained within a few TypeScript files with JS Objects used to represent the config. They are:
docs/.vitepress/config.js
: the root config file for the site. Read the VitePress documentation for it's spec.To simplify the root config, the larger JS Objects representing the navbar and sidebar configuration have been extracted and separated by their locale. See both in:
docs/.vitepress/navbars.js
docs/.vitepress/sidebars.js
With the official documentation for these configs living in the Default Theme Reference.
VitePress has first-class support for internationalization. The root config docs/.vitepress/config.js
defines the supported locales with their URL, title in the selection dropdown menu and navbar/sidebar configs references.
The navbar/sidebar configs are captured in the aforementioned config files, separated by locale and exported individually.
The markdown content for each locale must fall under a folder with the same name as the keys for locales
in the root config. That is:
// docs/.vitepress/config.js
+export default defineConfig({
+ ...
+ locales: {
+ root: {
+ label: "English",
+ lang: "en-US",
+ themeConfig: {
+ nav: navbars.en,
+ sidebar: sidebars.en,
+ },
+ },
+ "pt-br": {
+ label: "Brazilian Portuguese",
+ lang: "pr-br",
+ themeConfig: {
+ nav: navbars.pt_br,
+ sidebar: sidebars.pt_br,
+ },
+ },
+ "zh-hans": {
+ label: "简体中文",
+ lang: "zh-hans",
+ themeConfig: {
+ nav: navbars.zh_hans,
+ sidebar: sidebars.zh_hans,
+ },
+ },
+ },
+})
/pt-BR/
will require the same set of markdown files located under docs/pt-BR/
, like so:
docs
+├─ README.md
+├─ foo.md
+├─ nested
+│ └─ README.md
+└─ pt-BR
+ ├─ README.md
+ ├─ foo.md
+ └─ nested
+ └─ README.md
The official VitePress i18n documentation goes into more detail.
`,37)]))}const g=i(t,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/contribute_documentation.md.BrHjmG2Y.lean.js b/assets/contribute_documentation.md.BrHjmG2Y.lean.js new file mode 100644 index 00000000..fd64bada --- /dev/null +++ b/assets/contribute_documentation.md.BrHjmG2Y.lean.js @@ -0,0 +1,42 @@ +import{_ as i,c as a,a2 as e,o as n}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"Docs & Site","description":"","frontmatter":{},"headers":[],"relativePath":"contribute/documentation.md","filePath":"contribute/documentation.md","lastUpdated":1687069487000}'),t={name:"contribute/documentation.md"};function l(p,s,h,o,r,d){return n(),a("div",null,s[0]||(s[0]=[e(`Documentation & site contribution guide.
Fork asdf
on GitHub and/or Git clone the default branch:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
The tools for Docs site development are managed with asdf
in the docs/.tool-versions
. Add the plugins with:
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
Install the tool version(s) with:
asdf install
Install Node.js dependencies from docs/package.json
:
npm install
VitePress (v2) is the Static Site Generator (SSG) we use to build the asdf documentation site. It was chosen to replace Docsify.js and subsequently VuePress as we would like to support an HTML only fallback when users do not have JavaScript available or enabled. This was not possible with Docsify & VitePress quicly supplanted VuePress. Other than this, the feature-set is largely the same, with the focus on writing Markdown files with minimal configuration.
package.json
contains the scripts required for development:
To start the local development server:
npm run dev
Format the code before committing:
npm run format
asdf
is using an automated release pipeline which relies on Conventional Commits in PR titles. Detailed documentation found in the core contribution guide.
When creating a PR for documentation changes please make the PR title with the Conventional Commit type docs
in the format docs: <description>
.
Configuration of the site is contained within a few TypeScript files with JS Objects used to represent the config. They are:
docs/.vitepress/config.js
: the root config file for the site. Read the VitePress documentation for it's spec.To simplify the root config, the larger JS Objects representing the navbar and sidebar configuration have been extracted and separated by their locale. See both in:
docs/.vitepress/navbars.js
docs/.vitepress/sidebars.js
With the official documentation for these configs living in the Default Theme Reference.
VitePress has first-class support for internationalization. The root config docs/.vitepress/config.js
defines the supported locales with their URL, title in the selection dropdown menu and navbar/sidebar configs references.
The navbar/sidebar configs are captured in the aforementioned config files, separated by locale and exported individually.
The markdown content for each locale must fall under a folder with the same name as the keys for locales
in the root config. That is:
// docs/.vitepress/config.js
+export default defineConfig({
+ ...
+ locales: {
+ root: {
+ label: "English",
+ lang: "en-US",
+ themeConfig: {
+ nav: navbars.en,
+ sidebar: sidebars.en,
+ },
+ },
+ "pt-br": {
+ label: "Brazilian Portuguese",
+ lang: "pr-br",
+ themeConfig: {
+ nav: navbars.pt_br,
+ sidebar: sidebars.pt_br,
+ },
+ },
+ "zh-hans": {
+ label: "简体中文",
+ lang: "zh-hans",
+ themeConfig: {
+ nav: navbars.zh_hans,
+ sidebar: sidebars.zh_hans,
+ },
+ },
+ },
+})
/pt-BR/
will require the same set of markdown files located under docs/pt-BR/
, like so:
docs
+├─ README.md
+├─ foo.md
+├─ nested
+│ └─ README.md
+└─ pt-BR
+ ├─ README.md
+ ├─ foo.md
+ └─ nested
+ └─ README.md
The official VitePress i18n documentation goes into more detail.
`,37)]))}const g=i(t,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/contribute_first-party-plugins.md.An0qw423.js b/assets/contribute_first-party-plugins.md.An0qw423.js new file mode 100644 index 00000000..c0831574 --- /dev/null +++ b/assets/contribute_first-party-plugins.md.An0qw423.js @@ -0,0 +1 @@ +import{_ as r,c as t,a2 as a,o as i}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"First-Party Plugins","description":"","frontmatter":{},"headers":[],"relativePath":"contribute/first-party-plugins.md","filePath":"contribute/first-party-plugins.md","lastUpdated":1627017981000}'),o={name:"contribute/first-party-plugins.md"};function s(l,e,n,d,c,f){return i(),t("div",null,e[0]||(e[0]=[a('The asdf core team has authored some plugins relevant to their daily work life. Help is always welcome in maintaining and improving these plugins. See the associated repo for each linked below:
For community plugins, see:
asdf-community
organisation: A collaborative, community-driven project for long-term maintenance of asdf
plugins.asdf-plugins
shortname repo: Short-name list used by asdf
core to lookup popular asdf
plugins.asdf-plugin
topic searchThe asdf core team has authored some plugins relevant to their daily work life. Help is always welcome in maintaining and improving these plugins. See the associated repo for each linked below:
For community plugins, see:
asdf-community
organisation: A collaborative, community-driven project for long-term maintenance of asdf
plugins.asdf-plugins
shortname repo: Short-name list used by asdf
core to lookup popular asdf
plugins.asdf-plugin
topic searchasdf
installation involves:
asdf
coreasdf
.tool-versions
config filesasdf primarily requires git
& curl
. Here is a non-exhaustive list of commands to run for your package manager (some might automatically install these tools in later steps).
OS | Package Manager | Command |
---|---|---|
linux | Aptitude | apt install curl git |
linux | DNF | dnf install curl git |
linux | Pacman | pacman -S curl git |
linux | Zypper | zypper install curl git |
macOS | Homebrew | brew install coreutils curl git |
macOS | Spack | spack install coreutils curl git |
Note
sudo
may be required depending on your system configuration.
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.15.0
We highly recommend using the official git
method.
Method | Command |
---|---|
Homebrew | brew install asdf |
Pacman | git clone https://aur.archlinux.org/asdf-vm.git && cd asdf-vm && makepkg -si or use your preferred AUR helper |
There are many different combinations of Shells, OSs & Installation methods all of which affect the configuration here. Expand the selection below that best matches your system.
macOS users, be sure to read the warning about path_helper
at the end of this section.
Add the following to ~/.bashrc
:
. "$HOME/.asdf/asdf.sh"
Completions must be configured by adding the following to your .bashrc
:
. "$HOME/.asdf/completions/asdf.bash"
If using macOS Catalina or newer, the default shell has changed to ZSH. Unless changing back to Bash, follow the ZSH instructions.
Add the following to ~/.bash_profile
:
. "$HOME/.asdf/asdf.sh"
Completions must be configured manually with the following entry in your .bash_profile
:
. "$HOME/.asdf/completions/asdf.bash"
Add asdf.sh
to your ~/.bashrc
with:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bashrc
Completions will need to be configured as per Homebrew's instructions or with the following:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bashrc
If using macOS Catalina or newer, the default shell has changed to ZSH. Unless changing back to Bash, follow the ZSH instructions.
Add asdf.sh
to your ~/.bash_profile
with:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bash_profile
Completions will need to be configured as per Homebrew's instructions or with the following:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bash_profile
Add the following to ~/.bashrc
:
. /opt/asdf-vm/asdf.sh
bash-completion
needs to be installed for the completions to work.
Add the following to ~/.config/fish/config.fish
:
source ~/.asdf/asdf.fish
Completions must be configured manually with the following command:
mkdir -p ~/.config/fish/completions; and ln -s ~/.asdf/completions/asdf.fish ~/.config/fish/completions
Add asdf.fish
to your ~/.config/fish/config.fish
with:
echo -e "\\nsource "(brew --prefix asdf)"/libexec/asdf.fish" >> ~/.config/fish/config.fish
Completions are handled by Homebrew for the Fish shell. Friendly!
Add the following to ~/.config/fish/config.fish
:
source /opt/asdf-vm/asdf.fish
Completions are automatically configured on installation by the AUR package.
Add asdf.elv
to your ~/.config/elvish/rc.elv
with:
mkdir -p ~/.config/elvish/lib; ln -s ~/.asdf/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
Completions are automatically configured.
Add asdf.elv
to your ~/.config/elvish/rc.elv
with:
mkdir -p ~/.config/elvish/lib; ln -s (brew --prefix asdf)/libexec/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
Completions are automatically configured.
Add asdf.elv
to your ~/.config/elvish/rc.elv
with:
mkdir -p ~/.config/elvish/lib; ln -s /opt/asdf-vm/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
Completions are automatically configured.
Add the following to ~/.zshrc
:
. "$HOME/.asdf/asdf.sh"
OR use a ZSH Framework plugin like asdf for oh-my-zsh which will source this script and setup completions.
Completions are configured by either a ZSH Framework asdf
plugin or by adding the following to your .zshrc
:
# append completions to fpath
+fpath=(\${ASDF_DIR}/completions $fpath)
+# initialise completions with ZSH's compinit
+autoload -Uz compinit && compinit
compinit
setup, ensure compinit
is below your sourcing of asdf.sh
compinit
setup with a ZSH Framework, ensure compinit
is below your sourcing of the frameworkWarning
If you are using a ZSH Framework the associated asdf
plugin may need to be updated to use the new ZSH completions properly via fpath
. The Oh-My-ZSH asdf plugin is yet to be updated, see ohmyzsh/ohmyzsh#8837.
Add asdf.sh
to your ~/.zshrc
with:
echo -e "\\n. $(brew --prefix asdf)/libexec/asdf.sh" >> \${ZDOTDIR:-~}/.zshrc
OR use a ZSH Framework plugin like asdf for oh-my-zsh which will source this script and setup completions.
Completions are configured by either a ZSH Framework asdf
or will need to be configured as per Homebrew's instructions. If you are using a ZSH Framework the associated plugin for asdf may need to be updated to use the new ZSH completions properly via fpath
. The Oh-My-ZSH asdf plugin is yet to be updated, see ohmyzsh/ohmyzsh#8837.
Add the following to ~/.zshrc
:
. /opt/asdf-vm/asdf.sh
Completions are placed in a ZSH friendly location, but ZSH must be configured to use the autocompletions.
Add the following to ~/.config/powershell/profile.ps1
:
. "$HOME/.asdf/asdf.ps1"
Add asdf.sh
to your ~/.config/powershell/profile.ps1
with:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.ps1\\"" >> ~/.config/powershell/profile.ps1
Add the following to ~/.config/powershell/profile.ps1
:
. /opt/asdf-vm/asdf.ps1
Add asdf.nu
to your ~/.config/nushell/config.nu
with:
"\\n$env.ASDF_DIR = ($env.HOME | path join '.asdf')\\n source " + ($env.HOME | path join '.asdf/asdf.nu') | save --append $nu.config-path
Completions are automatically configured
Add asdf.nu
to your ~/.config/nushell/config.nu
with:
"\\n$env.ASDF_DIR = (brew --prefix asdf | str trim | into string | path join 'libexec')\\n source " + (brew --prefix asdf | str trim | into string | path join 'libexec/asdf.nu') | save --append $nu.config-path
Completions are automatically configured
Add asdf.nu
to your ~/.config/nushell/config.nu
with:
"\\n$env.ASDF_DIR = '/opt/asdf-vm/'\\n source /opt/asdf-vm/asdf.nu" | save --append $nu.config-path
Completions are automatically configured.
Add the following to ~/.profile
:
export ASDF_DIR="$HOME/.asdf"
+. "$HOME/.asdf/asdf.sh"
Add asdf.sh
to your ~/.profile
with:
echo -e "\\nexport ASDF_DIR=\\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
+echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
Add the following to ~/.profile
:
export ASDF_DIR="/opt/asdf-vm"
+. /opt/asdf-vm/asdf.sh
asdf
scripts need to be sourced after you have set your $PATH
and after you have sourced your framework (oh-my-zsh etc).
WARNING
On macOS, starting a Bash or Zsh shell automatically calls a utility called path_helper
. path_helper
can rearrange items in PATH
(and MANPATH
), causing inconsistent behavior for tools that require specific ordering. To workaround this, asdf
on macOS defaults to forcibly adding its PATH
-entries to the front (taking highest priority). This is controllable with the ASDF_FORCE_PREPEND
variable.
Restart your shell so that PATH
changes take effect. Opening a new terminal tab will usually do it.
This completes the installation of the asdf
core 🎉
asdf
is only useful once you install a plugin, install a tool and manage its versions. Continue the guide below to learn how to do this.
For demonstration purposes we will install & set Node.js via the asdf-nodejs
plugin.
Each plugin has dependencies so we need to check the plugin repo where they should be listed. For asdf-nodejs
they are:
OS | Dependency Installation |
---|---|
Debian | apt-get install dirmngr gpg curl gawk |
CentOS/ Rocky Linux/ AlmaLinux | yum install gnupg2 curl gawk |
macOS | brew install gpg gawk |
We should install dependencies first as some Plugins have post-install hooks.
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
Now we have a plugin for Node.js we can install a version of the tool.
We can see which versions are available with asdf list all nodejs
or a subset of versions with asdf list all nodejs 14
.
We will just install the latest
available version:
asdf install nodejs latest
Note
asdf
enforces exact versions. latest
is a helper throughout asdf
that will resolve to the actual version number at the time of execution.
asdf
performs a version lookup of a tool in all .tool-versions
files from the current working directory up to the $HOME
directory. The lookup occurs just-in-time when you execute a tool that asdf
manages.
WARNING
Without a version listed for a tool execution of the tool will error. asdf current
will show you the tool & version resolution, or absence of, from your current directory so you can observe which tools will fail to execute.
Global defaults are managed in $HOME/.tool-versions
. Set a global version with:
asdf global nodejs latest
$HOME/.tool-versions
will then look like:
nodejs 16.5.0
Some OSs already have tools installed that are managed by the system and not asdf
, python
is a common example. You need to tell asdf
to pass the management back to the system. The Versions reference section will guide you.
Local versions are defined in the $PWD/.tool-versions
file (your current working directory). Usually, this will be the Git repository for a project. When in your desired directory execute:
asdf local nodejs latest
$PWD/.tool-versions
will then look like:
nodejs 16.5.0
asdf
supports the migration from existing version files from other version managers. Eg: .ruby-version
for the case of rbenv
. This is supported on a per-plugin basis.
asdf-nodejs
supports this via both .nvmrc
and .node-version
files. To enable this, add the following to your asdf
configuration file $HOME/.asdfrc
:
legacy_version_file = yes
See the configuration reference page for more config options.
That completes the Getting Started guide for asdf
🎉 You can now manage nodejs
versions for your project. Follow similar steps for each type of tool in your project!
asdf
has many more commands to become familiar with, you can see them all by running asdf --help
or asdf
. The core of the commands are broken into three categories:
asdf
installation involves:
asdf
coreasdf
.tool-versions
config filesasdf primarily requires git
& curl
. Here is a non-exhaustive list of commands to run for your package manager (some might automatically install these tools in later steps).
OS | Package Manager | Command |
---|---|---|
linux | Aptitude | apt install curl git |
linux | DNF | dnf install curl git |
linux | Pacman | pacman -S curl git |
linux | Zypper | zypper install curl git |
macOS | Homebrew | brew install coreutils curl git |
macOS | Spack | spack install coreutils curl git |
Note
sudo
may be required depending on your system configuration.
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.15.0
We highly recommend using the official git
method.
Method | Command |
---|---|
Homebrew | brew install asdf |
Pacman | git clone https://aur.archlinux.org/asdf-vm.git && cd asdf-vm && makepkg -si or use your preferred AUR helper |
There are many different combinations of Shells, OSs & Installation methods all of which affect the configuration here. Expand the selection below that best matches your system.
macOS users, be sure to read the warning about path_helper
at the end of this section.
Add the following to ~/.bashrc
:
. "$HOME/.asdf/asdf.sh"
Completions must be configured by adding the following to your .bashrc
:
. "$HOME/.asdf/completions/asdf.bash"
If using macOS Catalina or newer, the default shell has changed to ZSH. Unless changing back to Bash, follow the ZSH instructions.
Add the following to ~/.bash_profile
:
. "$HOME/.asdf/asdf.sh"
Completions must be configured manually with the following entry in your .bash_profile
:
. "$HOME/.asdf/completions/asdf.bash"
Add asdf.sh
to your ~/.bashrc
with:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bashrc
Completions will need to be configured as per Homebrew's instructions or with the following:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bashrc
If using macOS Catalina or newer, the default shell has changed to ZSH. Unless changing back to Bash, follow the ZSH instructions.
Add asdf.sh
to your ~/.bash_profile
with:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bash_profile
Completions will need to be configured as per Homebrew's instructions or with the following:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bash_profile
Add the following to ~/.bashrc
:
. /opt/asdf-vm/asdf.sh
bash-completion
needs to be installed for the completions to work.
Add the following to ~/.config/fish/config.fish
:
source ~/.asdf/asdf.fish
Completions must be configured manually with the following command:
mkdir -p ~/.config/fish/completions; and ln -s ~/.asdf/completions/asdf.fish ~/.config/fish/completions
Add asdf.fish
to your ~/.config/fish/config.fish
with:
echo -e "\\nsource "(brew --prefix asdf)"/libexec/asdf.fish" >> ~/.config/fish/config.fish
Completions are handled by Homebrew for the Fish shell. Friendly!
Add the following to ~/.config/fish/config.fish
:
source /opt/asdf-vm/asdf.fish
Completions are automatically configured on installation by the AUR package.
Add asdf.elv
to your ~/.config/elvish/rc.elv
with:
mkdir -p ~/.config/elvish/lib; ln -s ~/.asdf/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
Completions are automatically configured.
Add asdf.elv
to your ~/.config/elvish/rc.elv
with:
mkdir -p ~/.config/elvish/lib; ln -s (brew --prefix asdf)/libexec/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
Completions are automatically configured.
Add asdf.elv
to your ~/.config/elvish/rc.elv
with:
mkdir -p ~/.config/elvish/lib; ln -s /opt/asdf-vm/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
Completions are automatically configured.
Add the following to ~/.zshrc
:
. "$HOME/.asdf/asdf.sh"
OR use a ZSH Framework plugin like asdf for oh-my-zsh which will source this script and setup completions.
Completions are configured by either a ZSH Framework asdf
plugin or by adding the following to your .zshrc
:
# append completions to fpath
+fpath=(\${ASDF_DIR}/completions $fpath)
+# initialise completions with ZSH's compinit
+autoload -Uz compinit && compinit
compinit
setup, ensure compinit
is below your sourcing of asdf.sh
compinit
setup with a ZSH Framework, ensure compinit
is below your sourcing of the frameworkWarning
If you are using a ZSH Framework the associated asdf
plugin may need to be updated to use the new ZSH completions properly via fpath
. The Oh-My-ZSH asdf plugin is yet to be updated, see ohmyzsh/ohmyzsh#8837.
Add asdf.sh
to your ~/.zshrc
with:
echo -e "\\n. $(brew --prefix asdf)/libexec/asdf.sh" >> \${ZDOTDIR:-~}/.zshrc
OR use a ZSH Framework plugin like asdf for oh-my-zsh which will source this script and setup completions.
Completions are configured by either a ZSH Framework asdf
or will need to be configured as per Homebrew's instructions. If you are using a ZSH Framework the associated plugin for asdf may need to be updated to use the new ZSH completions properly via fpath
. The Oh-My-ZSH asdf plugin is yet to be updated, see ohmyzsh/ohmyzsh#8837.
Add the following to ~/.zshrc
:
. /opt/asdf-vm/asdf.sh
Completions are placed in a ZSH friendly location, but ZSH must be configured to use the autocompletions.
Add the following to ~/.config/powershell/profile.ps1
:
. "$HOME/.asdf/asdf.ps1"
Add asdf.sh
to your ~/.config/powershell/profile.ps1
with:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.ps1\\"" >> ~/.config/powershell/profile.ps1
Add the following to ~/.config/powershell/profile.ps1
:
. /opt/asdf-vm/asdf.ps1
Add asdf.nu
to your ~/.config/nushell/config.nu
with:
"\\n$env.ASDF_DIR = ($env.HOME | path join '.asdf')\\n source " + ($env.HOME | path join '.asdf/asdf.nu') | save --append $nu.config-path
Completions are automatically configured
Add asdf.nu
to your ~/.config/nushell/config.nu
with:
"\\n$env.ASDF_DIR = (brew --prefix asdf | str trim | into string | path join 'libexec')\\n source " + (brew --prefix asdf | str trim | into string | path join 'libexec/asdf.nu') | save --append $nu.config-path
Completions are automatically configured
Add asdf.nu
to your ~/.config/nushell/config.nu
with:
"\\n$env.ASDF_DIR = '/opt/asdf-vm/'\\n source /opt/asdf-vm/asdf.nu" | save --append $nu.config-path
Completions are automatically configured.
Add the following to ~/.profile
:
export ASDF_DIR="$HOME/.asdf"
+. "$HOME/.asdf/asdf.sh"
Add asdf.sh
to your ~/.profile
with:
echo -e "\\nexport ASDF_DIR=\\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
+echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
Add the following to ~/.profile
:
export ASDF_DIR="/opt/asdf-vm"
+. /opt/asdf-vm/asdf.sh
asdf
scripts need to be sourced after you have set your $PATH
and after you have sourced your framework (oh-my-zsh etc).
WARNING
On macOS, starting a Bash or Zsh shell automatically calls a utility called path_helper
. path_helper
can rearrange items in PATH
(and MANPATH
), causing inconsistent behavior for tools that require specific ordering. To workaround this, asdf
on macOS defaults to forcibly adding its PATH
-entries to the front (taking highest priority). This is controllable with the ASDF_FORCE_PREPEND
variable.
Restart your shell so that PATH
changes take effect. Opening a new terminal tab will usually do it.
This completes the installation of the asdf
core 🎉
asdf
is only useful once you install a plugin, install a tool and manage its versions. Continue the guide below to learn how to do this.
For demonstration purposes we will install & set Node.js via the asdf-nodejs
plugin.
Each plugin has dependencies so we need to check the plugin repo where they should be listed. For asdf-nodejs
they are:
OS | Dependency Installation |
---|---|
Debian | apt-get install dirmngr gpg curl gawk |
CentOS/ Rocky Linux/ AlmaLinux | yum install gnupg2 curl gawk |
macOS | brew install gpg gawk |
We should install dependencies first as some Plugins have post-install hooks.
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
Now we have a plugin for Node.js we can install a version of the tool.
We can see which versions are available with asdf list all nodejs
or a subset of versions with asdf list all nodejs 14
.
We will just install the latest
available version:
asdf install nodejs latest
Note
asdf
enforces exact versions. latest
is a helper throughout asdf
that will resolve to the actual version number at the time of execution.
asdf
performs a version lookup of a tool in all .tool-versions
files from the current working directory up to the $HOME
directory. The lookup occurs just-in-time when you execute a tool that asdf
manages.
WARNING
Without a version listed for a tool execution of the tool will error. asdf current
will show you the tool & version resolution, or absence of, from your current directory so you can observe which tools will fail to execute.
Global defaults are managed in $HOME/.tool-versions
. Set a global version with:
asdf global nodejs latest
$HOME/.tool-versions
will then look like:
nodejs 16.5.0
Some OSs already have tools installed that are managed by the system and not asdf
, python
is a common example. You need to tell asdf
to pass the management back to the system. The Versions reference section will guide you.
Local versions are defined in the $PWD/.tool-versions
file (your current working directory). Usually, this will be the Git repository for a project. When in your desired directory execute:
asdf local nodejs latest
$PWD/.tool-versions
will then look like:
nodejs 16.5.0
asdf
supports the migration from existing version files from other version managers. Eg: .ruby-version
for the case of rbenv
. This is supported on a per-plugin basis.
asdf-nodejs
supports this via both .nvmrc
and .node-version
files. To enable this, add the following to your asdf
configuration file $HOME/.asdfrc
:
legacy_version_file = yes
See the configuration reference page for more config options.
That completes the Getting Started guide for asdf
🎉 You can now manage nodejs
versions for your project. Follow similar steps for each type of tool in your project!
asdf
has many more commands to become familiar with, you can see them all by running asdf --help
or asdf
. The core of the commands are broken into three categories:
asdf
is a tool version manager. All tool version definitions are contained within one file (.tool-versions
) which you can check in to your project's Git repository to share with your team, ensuring everyone is using the exact same versions of tools.
The old way of working required multiple CLI version managers, each with their distinct API, configurations files and implementation (e.g. $PATH
manipulation, shims, environment variables, etc...). asdf
provides a single interface and configuration file to simplify development workflows, and can be extended to all tools and runtimes via a simple plugin interface.
Once asdf
core is set up with your Shell configuration, plugins are installed to manage particular tools. When a tool is installed by a plugin, the executables that are installed have shims created for each of them. When you try and run one of these executables, the shim is run instead, allowing asdf
to identify which version of the tool is set in .tool-versions
and execute that version.
Tools like nvm, n and rbenv are all written as Shell scripts which create shims for the executables installed by these tools.
asdf
is very similar and was built to compete in this space of tool/runtime version management. The differentiating factor for asdf
is its plugin system which removes the need for a manager per tool/runtime, different commands per manager and different *-version
files in your repo.
augments existing shells with a new feature that can load and unload environment variables depending on the current directory.
asdf
does not manage Environment Variables, however there is a plugin asdf-direnv
to integrate direnv behaviour with asdf
.
See direnv docs for more.
The Missing Package Manager for macOS (or Linux)
Homebrew manages your packages and their upstream dependencies. asdf
does not manage upstream dependencies, it is not a package manager, that burden is upon the user, though we try and keep the dependency list small.
See Homebrew docs for more.
Nix is a tool that takes a unique approach to package management and system configuration
NixOS aims to build truly reproducible environments by managing exact versions of packages up the entire dependency tree of each tool, something asdf
does not do. NixOS does this with its own programming language, many CLI tools and a package collection of over 60,000 packages.
Again, asdf
does not manage upstream dependencies and is not a package manager.
See NixOS docs for more.
asdf
ensures teams are using the exact same versions of tools, with support for many tools via a plugin system, and the simplicity and familiarity of being a single Shell script you include in your Shell config.
Note
asdf
is not intended to be a system package manager. It is a tool version manager. Just because you can create a plugin for any tool and manage its versions with asdf
, does not mean that is the best course of action for that specific tool.
asdf
is a tool version manager. All tool version definitions are contained within one file (.tool-versions
) which you can check in to your project's Git repository to share with your team, ensuring everyone is using the exact same versions of tools.
The old way of working required multiple CLI version managers, each with their distinct API, configurations files and implementation (e.g. $PATH
manipulation, shims, environment variables, etc...). asdf
provides a single interface and configuration file to simplify development workflows, and can be extended to all tools and runtimes via a simple plugin interface.
Once asdf
core is set up with your Shell configuration, plugins are installed to manage particular tools. When a tool is installed by a plugin, the executables that are installed have shims created for each of them. When you try and run one of these executables, the shim is run instead, allowing asdf
to identify which version of the tool is set in .tool-versions
and execute that version.
Tools like nvm, n and rbenv are all written as Shell scripts which create shims for the executables installed by these tools.
asdf
is very similar and was built to compete in this space of tool/runtime version management. The differentiating factor for asdf
is its plugin system which removes the need for a manager per tool/runtime, different commands per manager and different *-version
files in your repo.
augments existing shells with a new feature that can load and unload environment variables depending on the current directory.
asdf
does not manage Environment Variables, however there is a plugin asdf-direnv
to integrate direnv behaviour with asdf
.
See direnv docs for more.
The Missing Package Manager for macOS (or Linux)
Homebrew manages your packages and their upstream dependencies. asdf
does not manage upstream dependencies, it is not a package manager, that burden is upon the user, though we try and keep the dependency list small.
See Homebrew docs for more.
Nix is a tool that takes a unique approach to package management and system configuration
NixOS aims to build truly reproducible environments by managing exact versions of packages up the entire dependency tree of each tool, something asdf
does not do. NixOS does this with its own programming language, many CLI tools and a package collection of over 60,000 packages.
Again, asdf
does not manage upstream dependencies and is not a package manager.
See NixOS docs for more.
asdf
ensures teams are using the exact same versions of tools, with support for many tools via a plugin system, and the simplicity and familiarity of being a single Shell script you include in your Shell config.
Note
asdf
is not intended to be a system package manager. It is a tool version manager. Just because you can create a plugin for any tool and manage its versions with asdf
, does not mean that is the best course of action for that specific tool.
asdf versions 0.15.0 and older were written in Bash and distributed as a set of Bash scripts with the asdf
function loaded into your shell. asdf version 0.15.0 is a complete rewrite of asdf in Go. Since it is a complete rewrite there are a number of breaking changes and it is now distributed as a binary rather than a set of scripts.
download
is now a required callback for plugins Previously download
was optional, now it is required. If a plugin lacks this callback any installs of any version of that plugin will fail.
asdf version 0.15.0 and earlier supported by hyphenated and non-hyphenated versions of certain commands. With version 0.15.0 only the non-hyphenated versions are supported. The affected commands:
asdf list-all
-> asdf list all
asdf plugin-add
-> asdf plugin add
asdf plugin-list
-> asdf plugin list
asdf plugin-list-all
-> asdf plugin list all
asdf plugin-update
-> asdf plugin update
asdf plugin-remove
-> asdf plugin remove
asdf plugin-test
-> asdf plugin test
asdf shim-versions
-> asdf shimversions
asdf global
and asdf local
commands have been removed asdf global
and asdf local
have been removed. The "global" and "local" terminology was wrong and also misleading. asdf doesn't actually support "global" versions that apply everywhere. Any version that was specified with asdf global
could easily be overridden by a .tool-versions
file in your current directory specifying a different version. This was confusing to users. The plan is to introduce an asdf set
command in the near future that better conveys how asdf works and provides similar functionality to asdf global
and asdf local
.
asdf update
command has been removed Updates can no longer be performed this way. Use your OS package manager or download the latest binary manually. Additionally, the asdf update
command present in versions 0.15.0 and older cannot upgrade to version 0.15.0 because the install process has changed. You cannot upgrade to the latest Go implementation using asdf update
.
asdf shell
command has been removed This command actually set an environment variable in the user's current shell session. It was able to do this because asdf
was actually a shell function, not an executable. The new rewrite removes all shell code from asdf, and it is now a binary rather than a shell function, so setting environment variables directly in the shell is no longer possible.
asdf current
has changed Instead of three columns in the output, with the last being either the location the version is set or a suggested command that could be run to set or install a version. The third column has been split into two columns. The third column now only indicates the source of the version if it is set (typically either version file or environment variable) and the fourth is a boolean indicating whether the specified version is actually installed. If it is not installed, a suggested install command is shown.
cmd
Previously plugin extension commands could be run like this:
asdf nodejs nodebuild --version
Now they must be prefixed with cmd
to avoid causing confusion with built-in commands:
asdf cmd nodejs nodebuild --version
There are a number of breaking changes for plugin extension commands:
exec
syscall. If your extension commands are shell scripts in order to be run with exec
they must start with a proper shebang line..bash
extension as it is misleading.Additionally, only the first argument after plugin name is used to determine the extension command to run. This means effectively there is the default command
extension command that asdf defaults to when no command matching the first argument after plugin name is found. For example:
foo/\n lib/commands/\n command\n command-bar\n command-bat-man
Previously these scripts would work like this:
$ asdf cmd foo # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command`\n$ asdf cmd foo bar # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bar`\n$ asdf cmd foo bat man # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat-man`
Now:
$ asdf cmd foo # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command`\n$ asdf cmd foo bar # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bar`\n$ asdf cmd foo bat man # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command bat man`
syscall.Exec
The most obvious example of this breaking change are scripts that lack a proper shebang line. asdf 0.15.0 and older were implemented in Bash, so as long it was an executable that could be executed with Bash it would run. This mean that scripts lacking a shebang could still be run by asdf exec
. With asdf 0.15.x implemented in Go we now invoke executables via Go's syscall.Exec
function, which cannot handle scripts lacking a shebang.
In practice this isn't much of a problem. Most shell scripts DO contain a shebang line. If a tool managed by asdf provides scripts that don't have a shebang line one will need to be added to them.
This was a rarely used feature. The only plugin maintained by the core team that used it was the Elixir plugin, and it no longer needs it. This feature was originally added so that shim that get evaluated by a program rather than executed contain code that is suitable for evaluation by a particular program (in the case of Elixir this was the iex
shell). Upon further investigation it seems this feature only exists because the PATH
for executables was sometimes improperly set to include the shims rather than the other executables for the selected version(s).
Installation of version 0.15.0 is much simpler than previous versions of asdf. It's just three steps:
asdf
binary for your operating system/architecture combo and place it in a directory on your $PATH
ASDF_DATA_DIR
to the directory you'd like asdf to install plugins, versions, and shims.$ASDF_DATA_DIR/shims
to the front of your `$PATH.If your operating system's package manager already offers asdf 0.15.0 that is probably the best method for installing it. Upgrading asdf is now only possible via OS package managers and manual installation. There is no self-upgrade feature.
You can upgrade to the latest version of asdf without losing your existing install data. It's the same sequence of steps as above.
asdf
binary for your operating system & architecture Download the binary and place it in a directory on your path. I chose to place the asdf binary in $HOME/bin
and then added $HOME/bin
to the front of my $PATH
:
# In .zshrc, .bashrc, etc...\nexport PATH="$HOME/bin:$PATH"`
ASDF_DATA_DIR
Run asdf info
and copy the line containing the ASDF_DATA_DIR
variable:
...\nASDF_DATA_DIR="/home/myuser/.asdf"\n...
In your shell RC file (.zshrc
if Zsh, .bashrc
if Bash, etc...) add a line to the end setting ASDF_DATA_DIR
to that same value:
export ASDF_DATA_DIR="/home/myuser/.asdf"
$ASDF_DATA_DIR/shims
to the front of your `$PATH In your shell RC file (same file as step #2) add $ASDF_DATA_DIR/shims
to the front of your path:
export ASDF_DATA_DIR="/home/myuser/.asdf"\nexport PATH="$ASDF_DATA_DIR/shims:$PATH"
If you aren't sure if the upgrade to 0.15.0 will break things for you can you can test by installing 0.15.0 in addition to your existing version as described above in "Upgrading Without Losing Data". If it turns out that the upgrade to 0.15.0 breaks things for you simply remove the lines you added to your shell RC file.
',54)]))}const m=a(t,[["render",i]]);export{u as __pageData,m as default}; diff --git a/assets/guide_upgrading-from-v0-15-to-v0-16.md.BSJSfnUt.lean.js b/assets/guide_upgrading-from-v0-15-to-v0-16.md.BSJSfnUt.lean.js new file mode 100644 index 00000000..c43b3d57 --- /dev/null +++ b/assets/guide_upgrading-from-v0-15-to-v0-16.md.BSJSfnUt.lean.js @@ -0,0 +1 @@ +import{_ as a,c as s,a2 as n,o}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"Upgrading From Version 0.15.x to 0.16.0","description":"","frontmatter":{},"headers":[],"relativePath":"guide/upgrading-from-v0-15-to-v0-16.md","filePath":"guide/upgrading-from-v0-15-to-v0-16.md","lastUpdated":1734549004000}'),t={name:"guide/upgrading-from-v0-15-to-v0-16.md"};function i(d,e,l,r,c,h){return o(),s("div",null,e[0]||(e[0]=[n('asdf versions 0.15.0 and older were written in Bash and distributed as a set of Bash scripts with the asdf
function loaded into your shell. asdf version 0.15.0 is a complete rewrite of asdf in Go. Since it is a complete rewrite there are a number of breaking changes and it is now distributed as a binary rather than a set of scripts.
download
is now a required callback for plugins Previously download
was optional, now it is required. If a plugin lacks this callback any installs of any version of that plugin will fail.
asdf version 0.15.0 and earlier supported by hyphenated and non-hyphenated versions of certain commands. With version 0.15.0 only the non-hyphenated versions are supported. The affected commands:
asdf list-all
-> asdf list all
asdf plugin-add
-> asdf plugin add
asdf plugin-list
-> asdf plugin list
asdf plugin-list-all
-> asdf plugin list all
asdf plugin-update
-> asdf plugin update
asdf plugin-remove
-> asdf plugin remove
asdf plugin-test
-> asdf plugin test
asdf shim-versions
-> asdf shimversions
asdf global
and asdf local
commands have been removed asdf global
and asdf local
have been removed. The "global" and "local" terminology was wrong and also misleading. asdf doesn't actually support "global" versions that apply everywhere. Any version that was specified with asdf global
could easily be overridden by a .tool-versions
file in your current directory specifying a different version. This was confusing to users. The plan is to introduce an asdf set
command in the near future that better conveys how asdf works and provides similar functionality to asdf global
and asdf local
.
asdf update
command has been removed Updates can no longer be performed this way. Use your OS package manager or download the latest binary manually. Additionally, the asdf update
command present in versions 0.15.0 and older cannot upgrade to version 0.15.0 because the install process has changed. You cannot upgrade to the latest Go implementation using asdf update
.
asdf shell
command has been removed This command actually set an environment variable in the user's current shell session. It was able to do this because asdf
was actually a shell function, not an executable. The new rewrite removes all shell code from asdf, and it is now a binary rather than a shell function, so setting environment variables directly in the shell is no longer possible.
asdf current
has changed Instead of three columns in the output, with the last being either the location the version is set or a suggested command that could be run to set or install a version. The third column has been split into two columns. The third column now only indicates the source of the version if it is set (typically either version file or environment variable) and the fourth is a boolean indicating whether the specified version is actually installed. If it is not installed, a suggested install command is shown.
cmd
Previously plugin extension commands could be run like this:
asdf nodejs nodebuild --version
Now they must be prefixed with cmd
to avoid causing confusion with built-in commands:
asdf cmd nodejs nodebuild --version
There are a number of breaking changes for plugin extension commands:
exec
syscall. If your extension commands are shell scripts in order to be run with exec
they must start with a proper shebang line..bash
extension as it is misleading.Additionally, only the first argument after plugin name is used to determine the extension command to run. This means effectively there is the default command
extension command that asdf defaults to when no command matching the first argument after plugin name is found. For example:
foo/\n lib/commands/\n command\n command-bar\n command-bat-man
Previously these scripts would work like this:
$ asdf cmd foo # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command`\n$ asdf cmd foo bar # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bar`\n$ asdf cmd foo bat man # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat-man`
Now:
$ asdf cmd foo # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command`\n$ asdf cmd foo bar # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bar`\n$ asdf cmd foo bat man # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command bat man`
syscall.Exec
The most obvious example of this breaking change are scripts that lack a proper shebang line. asdf 0.15.0 and older were implemented in Bash, so as long it was an executable that could be executed with Bash it would run. This mean that scripts lacking a shebang could still be run by asdf exec
. With asdf 0.15.x implemented in Go we now invoke executables via Go's syscall.Exec
function, which cannot handle scripts lacking a shebang.
In practice this isn't much of a problem. Most shell scripts DO contain a shebang line. If a tool managed by asdf provides scripts that don't have a shebang line one will need to be added to them.
This was a rarely used feature. The only plugin maintained by the core team that used it was the Elixir plugin, and it no longer needs it. This feature was originally added so that shim that get evaluated by a program rather than executed contain code that is suitable for evaluation by a particular program (in the case of Elixir this was the iex
shell). Upon further investigation it seems this feature only exists because the PATH
for executables was sometimes improperly set to include the shims rather than the other executables for the selected version(s).
Installation of version 0.15.0 is much simpler than previous versions of asdf. It's just three steps:
asdf
binary for your operating system/architecture combo and place it in a directory on your $PATH
ASDF_DATA_DIR
to the directory you'd like asdf to install plugins, versions, and shims.$ASDF_DATA_DIR/shims
to the front of your `$PATH.If your operating system's package manager already offers asdf 0.15.0 that is probably the best method for installing it. Upgrading asdf is now only possible via OS package managers and manual installation. There is no self-upgrade feature.
You can upgrade to the latest version of asdf without losing your existing install data. It's the same sequence of steps as above.
asdf
binary for your operating system & architecture Download the binary and place it in a directory on your path. I chose to place the asdf binary in $HOME/bin
and then added $HOME/bin
to the front of my $PATH
:
# In .zshrc, .bashrc, etc...\nexport PATH="$HOME/bin:$PATH"`
ASDF_DATA_DIR
Run asdf info
and copy the line containing the ASDF_DATA_DIR
variable:
...\nASDF_DATA_DIR="/home/myuser/.asdf"\n...
In your shell RC file (.zshrc
if Zsh, .bashrc
if Bash, etc...) add a line to the end setting ASDF_DATA_DIR
to that same value:
export ASDF_DATA_DIR="/home/myuser/.asdf"
$ASDF_DATA_DIR/shims
to the front of your `$PATH In your shell RC file (same file as step #2) add $ASDF_DATA_DIR/shims
to the front of your path:
export ASDF_DATA_DIR="/home/myuser/.asdf"\nexport PATH="$ASDF_DATA_DIR/shims:$PATH"
If you aren't sure if the upgrade to 0.15.0 will break things for you can you can test by installing 0.15.0 in addition to your existing version as described above in "Upgrading Without Losing Data". If it turns out that the upgrade to 0.15.0 breaks things for you simply remove the lines you added to your shell RC file.
',54)]))}const m=a(t,[["render",i]]);export{u as __pageData,m as default}; diff --git a/assets/index.md.Bl7STBtd.js b/assets/index.md.Bl7STBtd.js new file mode 100644 index 00000000..14d80acc --- /dev/null +++ b/assets/index.md.Bl7STBtd.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as i}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"asdf","text":"The Multiple Runtime Version Manager","tagline":"Manage all your runtime versions with one tool!","actions":[{"theme":"brand","text":"Get Started","link":"/guide/getting-started"},{"theme":"alt","text":"What is asdf?","link":"/guide/introduction"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/asdf-vm/asdf"}]},"features":[{"title":"One Tool","details":"Manage each of your project runtimes with a single CLI tool and command interface.","icon":"🎉"},{"title":"Plugins","details":"Large ecosystem of existing runtimes & tools. Simple API to add support for new tools as you need!","icon":"🔌"},{"title":"Backwards Compatible","details":"Support for existing config files .nvmrc, .node-version, .ruby-version for smooth migration!","icon":"⏮"},{"title":"One Config File","details":".tool-versions to manage all your tools, runtimes and their versions in a single, sharable place.","icon":"📄"},{"title":"Shells","details":"Supports Bash, ZSH, Fish & Elvish with completions available.","icon":"🐚"},{"title":"GitHub Actions","details":"Provides a GitHub Action to install and utilize your .tool-versions in your CI/CD workflows.","icon":"🤖"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1700090238000}'),o={name:"index.md"};function n(a,s,l,r,d,c){return i(),t("div")}const p=e(o,[["render",n]]);export{u as __pageData,p as default}; diff --git a/assets/index.md.Bl7STBtd.lean.js b/assets/index.md.Bl7STBtd.lean.js new file mode 100644 index 00000000..14d80acc --- /dev/null +++ b/assets/index.md.Bl7STBtd.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as i}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"asdf","text":"The Multiple Runtime Version Manager","tagline":"Manage all your runtime versions with one tool!","actions":[{"theme":"brand","text":"Get Started","link":"/guide/getting-started"},{"theme":"alt","text":"What is asdf?","link":"/guide/introduction"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/asdf-vm/asdf"}]},"features":[{"title":"One Tool","details":"Manage each of your project runtimes with a single CLI tool and command interface.","icon":"🎉"},{"title":"Plugins","details":"Large ecosystem of existing runtimes & tools. Simple API to add support for new tools as you need!","icon":"🔌"},{"title":"Backwards Compatible","details":"Support for existing config files .nvmrc, .node-version, .ruby-version for smooth migration!","icon":"⏮"},{"title":"One Config File","details":".tool-versions to manage all your tools, runtimes and their versions in a single, sharable place.","icon":"📄"},{"title":"Shells","details":"Supports Bash, ZSH, Fish & Elvish with completions available.","icon":"🐚"},{"title":"GitHub Actions","details":"Provides a GitHub Action to install and utilize your .tool-versions in your CI/CD workflows.","icon":"🤖"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1700090238000}'),o={name:"index.md"};function n(a,s,l,r,d,c){return i(),t("div")}const p=e(o,[["render",n]]);export{u as __pageData,p as default}; diff --git a/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 new file mode 100644 index 00000000..b6b603d5 Binary files /dev/null and b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 differ diff --git a/assets/inter-italic-cyrillic.By2_1cv3.woff2 b/assets/inter-italic-cyrillic.By2_1cv3.woff2 new file mode 100644 index 00000000..def40a4f Binary files /dev/null and b/assets/inter-italic-cyrillic.By2_1cv3.woff2 differ diff --git a/assets/inter-italic-greek-ext.1u6EdAuj.woff2 b/assets/inter-italic-greek-ext.1u6EdAuj.woff2 new file mode 100644 index 00000000..e070c3d3 Binary files /dev/null and b/assets/inter-italic-greek-ext.1u6EdAuj.woff2 differ diff --git a/assets/inter-italic-greek.DJ8dCoTZ.woff2 b/assets/inter-italic-greek.DJ8dCoTZ.woff2 new file mode 100644 index 00000000..a3c16ca4 Binary files /dev/null and b/assets/inter-italic-greek.DJ8dCoTZ.woff2 differ diff --git a/assets/inter-italic-latin-ext.CN1xVJS-.woff2 b/assets/inter-italic-latin-ext.CN1xVJS-.woff2 new file mode 100644 index 00000000..2210a899 Binary files /dev/null and b/assets/inter-italic-latin-ext.CN1xVJS-.woff2 differ diff --git a/assets/inter-italic-latin.C2AdPX0b.woff2 b/assets/inter-italic-latin.C2AdPX0b.woff2 new file mode 100644 index 00000000..790d62dc Binary files /dev/null and b/assets/inter-italic-latin.C2AdPX0b.woff2 differ diff --git a/assets/inter-italic-vietnamese.BSbpV94h.woff2 b/assets/inter-italic-vietnamese.BSbpV94h.woff2 new file mode 100644 index 00000000..1eec0775 Binary files /dev/null and b/assets/inter-italic-vietnamese.BSbpV94h.woff2 differ diff --git a/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 new file mode 100644 index 00000000..2cfe6153 Binary files /dev/null and b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 differ diff --git a/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 new file mode 100644 index 00000000..e3886dd1 Binary files /dev/null and b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 differ diff --git a/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 new file mode 100644 index 00000000..36d67487 Binary files /dev/null and b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 differ diff --git a/assets/inter-roman-greek.BBVDIX6e.woff2 b/assets/inter-roman-greek.BBVDIX6e.woff2 new file mode 100644 index 00000000..2bed1e85 Binary files /dev/null and b/assets/inter-roman-greek.BBVDIX6e.woff2 differ diff --git a/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 new file mode 100644 index 00000000..9a8d1e2b Binary files /dev/null and b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 differ diff --git a/assets/inter-roman-latin.Di8DUHzh.woff2 b/assets/inter-roman-latin.Di8DUHzh.woff2 new file mode 100644 index 00000000..07d3c53a Binary files /dev/null and b/assets/inter-roman-latin.Di8DUHzh.woff2 differ diff --git a/assets/inter-roman-vietnamese.BjW4sHH5.woff2 b/assets/inter-roman-vietnamese.BjW4sHH5.woff2 new file mode 100644 index 00000000..57bdc22a Binary files /dev/null and b/assets/inter-roman-vietnamese.BjW4sHH5.woff2 differ diff --git a/assets/ja-jp_contribute_core.md.CJW3eeff.js b/assets/ja-jp_contribute_core.md.CJW3eeff.js new file mode 100644 index 00000000..7a499b47 --- /dev/null +++ b/assets/ja-jp_contribute_core.md.CJW3eeff.js @@ -0,0 +1,31 @@ +import{_ as a,c as e,a2 as i,o as t}from"./chunks/framework.BQmytedh.js";const k=JSON.parse('{"title":"asdf","description":"","frontmatter":{},"headers":[],"relativePath":"ja-jp/contribute/core.md","filePath":"ja-jp/contribute/core.md","lastUpdated":1704890757000}'),n={name:"ja-jp/contribute/core.md"};function l(p,s,h,o,r,d){return t(),e("div",null,s[0]||(s[0]=[i(`これは、asdf
コアのコントリビューションガイドです。
GitHubでasdf
をフォークするか、デフォルトのブランチをGitクローンしてください:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
コア開発用のツールは、このリポジトリの.tool-versions
で定義されています。asdf
自身でこれらのツールを管理したい場合は、下記のようにプラグインを追加してください:
asdf plugin add bats https://github.com/timgluz/asdf-bats.git
+asdf plugin add shellcheck https://github.com/luizm/asdf-shellcheck.git
+asdf plugin add shfmt https://github.com/luizm/asdf-shfmt.git
asdf
の開発に必要なバージョンを、下記のようにインストールします:
asdf install
開発ツールに影響を与える特定の機能を壊す可能性もあるため、ローカルマシンで開発する際は、asdf
を使用しないほうが 良いかもしれません 。下記に、使用しているツールを列挙します:
インストール済みのasdf
に変更を加えずに、あなたが開発した変更内容を試したいときは、$ASDF_DIR
変数に、クローンしたリポジトリのパスを設定し、そのディレクトリのbin
とshims
ディレクトリを一時的にパスの先頭へ追加します。
リモートにコミットまたはプッシュする前に、コードをローカルでフォーマット、Lint、およびテストすることを推奨します。その際は、次のスクリプト/コマンドを使用してください:
# Lint
+./scripts/lint.bash --check
+
+# Fix & Format
+./scripts/lint.bash --fix
+
+# Test: all tests
+./scripts/test.bash
+
+# Test: for specific command
+bats test/list_commands.bash
ヒント
テストを作ってください! - 新機能にとってテストは必要不可欠であり、バグ修正のレビューをスピードアップさせることができます。プルリクエストを作成する前に、新しいコードをカバーするようなテストを作成してください。bats-coreのドキュメントもご覧ください。
下記は、asdf-vm/asdf
リポジトリの.gitignore
ファイルです。プロジェクト固有のファイルは無視をしています。使用しているOS、ツール、およびワークフロー固有のファイルは、グローバルな.gitignore
構成で無視する必要があります。詳しくはこちらをご覧ください。
.git-blame-ignore-revs
asdf
では、.git-blame-ignore-revs
を使用して、Blameを実行する際のノイズを減らしています。詳しくは、git blameのドキュメントをご覧ください。
git blame
を実行するときは、下記のように、このファイルと共に使います:
git blame --ignore-revs-file .git-blame-ignore-revs ./test/install_command.bats
毎回手動でファイルを指定しなくても、gitのオプションで、blame
を呼び出すたびにこのファイルを使うように設定することもできます:
git config blame.ignoreRevsFile .git-blame-ignore-revs
このファイルを使用するように、IDEを設定することもできます。例えば、VSCode(およびGitLens)を使う場合は、.vscode/settings.json
に下記のように記述します:
{
+ "gitlens.advanced.blame.customArguments": [
+ "--ignore-revs-file",
+ ".git-blame-ignore-revs"
+ ]
+}
ローカルでテストを実行するには、下記のようにテストを呼び出します:
./scripts/test.bash
テストを作成する前に、下記項目を一通り参照してください:
test/
内にすでに作成されているテストscripts/test.bash
で使用されている既存のBatsの設定Batsでのデバッグは、難しいことがあります。-t
フラグを指定してTAP出力を有効にすると、テスト実行中に特殊なファイルディスクリプタ>&3
を使用して出力を表示できるため、デバッグが簡単になります。例えば次のとおりです:
# test/some_tests.bats
+
+printf "%s\\n" "Will not be printed during bats test/some_tests.bats"
+printf "%s\\n" "Will be printed during bats -t test/some_tests.bats" >&3
詳しくは、bats-coreドキュメント内のPrinting to the Terminalで説明されています。
asdf
は、Release Pleaseという自動リリースツールを使用して、セマンティックバージョンを自動的に引き上げ、Changelogを生成しています。この情報は、前回のリリースからのコミット履歴を読み込むことで生成されます。
Conventional Commit messagesでは、デフォルトブランチでのコミットメッセージのフォーマットとなる、プルリクエストタイトルのフォーマットを定義しています。これは、GitHub Actionamannn/action-semantic-pull-request
で強制されます。
Conventional Commitは、下記のフォーマットに従います:
<type>[optional scope][optional !]: <description>
+
+<!-- examples -->
+fix: some fix
+feat: a new feature
+docs: some documentation update
+docs(website): some change for the website
+feat!: feature with breaking change
<types>
の種類は次のとおりです: feat
、fix
、docs
、style
、 refactor
、 perf
、test
、build
、ci
、chore
、 revert
。
!
: 破壊的変更を示しますfix
: セマンティックバージョンのpatch
を新しく作成しますfeat
: セマンティックバージョンのminor
を新しく作成します<type>!
: セマンティックバージョンのmajor
を新しく作成しますプルリクエストのタイトルは、このフォーマットに従う必要があります。
ヒント
プルリクエストのタイトルには、Conventional Commit messageのフォーマットを使用してください。
asdf-alpineおよびasdf-ubuntuプロジェクトは、一部のasdfツールのDocker化されたイメージを提供する取り組みを継続的に行っています。これらのDockerイメージは、開発用サーバのベースとしたり、本番用アプリケーションの実行用途として使用することができます。
`,47)]))}const g=a(n,[["render",l]]);export{k as __pageData,g as default}; diff --git a/assets/ja-jp_contribute_core.md.CJW3eeff.lean.js b/assets/ja-jp_contribute_core.md.CJW3eeff.lean.js new file mode 100644 index 00000000..7a499b47 --- /dev/null +++ b/assets/ja-jp_contribute_core.md.CJW3eeff.lean.js @@ -0,0 +1,31 @@ +import{_ as a,c as e,a2 as i,o as t}from"./chunks/framework.BQmytedh.js";const k=JSON.parse('{"title":"asdf","description":"","frontmatter":{},"headers":[],"relativePath":"ja-jp/contribute/core.md","filePath":"ja-jp/contribute/core.md","lastUpdated":1704890757000}'),n={name:"ja-jp/contribute/core.md"};function l(p,s,h,o,r,d){return t(),e("div",null,s[0]||(s[0]=[i(`これは、asdf
コアのコントリビューションガイドです。
GitHubでasdf
をフォークするか、デフォルトのブランチをGitクローンしてください:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
コア開発用のツールは、このリポジトリの.tool-versions
で定義されています。asdf
自身でこれらのツールを管理したい場合は、下記のようにプラグインを追加してください:
asdf plugin add bats https://github.com/timgluz/asdf-bats.git
+asdf plugin add shellcheck https://github.com/luizm/asdf-shellcheck.git
+asdf plugin add shfmt https://github.com/luizm/asdf-shfmt.git
asdf
の開発に必要なバージョンを、下記のようにインストールします:
asdf install
開発ツールに影響を与える特定の機能を壊す可能性もあるため、ローカルマシンで開発する際は、asdf
を使用しないほうが 良いかもしれません 。下記に、使用しているツールを列挙します:
インストール済みのasdf
に変更を加えずに、あなたが開発した変更内容を試したいときは、$ASDF_DIR
変数に、クローンしたリポジトリのパスを設定し、そのディレクトリのbin
とshims
ディレクトリを一時的にパスの先頭へ追加します。
リモートにコミットまたはプッシュする前に、コードをローカルでフォーマット、Lint、およびテストすることを推奨します。その際は、次のスクリプト/コマンドを使用してください:
# Lint
+./scripts/lint.bash --check
+
+# Fix & Format
+./scripts/lint.bash --fix
+
+# Test: all tests
+./scripts/test.bash
+
+# Test: for specific command
+bats test/list_commands.bash
ヒント
テストを作ってください! - 新機能にとってテストは必要不可欠であり、バグ修正のレビューをスピードアップさせることができます。プルリクエストを作成する前に、新しいコードをカバーするようなテストを作成してください。bats-coreのドキュメントもご覧ください。
下記は、asdf-vm/asdf
リポジトリの.gitignore
ファイルです。プロジェクト固有のファイルは無視をしています。使用しているOS、ツール、およびワークフロー固有のファイルは、グローバルな.gitignore
構成で無視する必要があります。詳しくはこちらをご覧ください。
.git-blame-ignore-revs
asdf
では、.git-blame-ignore-revs
を使用して、Blameを実行する際のノイズを減らしています。詳しくは、git blameのドキュメントをご覧ください。
git blame
を実行するときは、下記のように、このファイルと共に使います:
git blame --ignore-revs-file .git-blame-ignore-revs ./test/install_command.bats
毎回手動でファイルを指定しなくても、gitのオプションで、blame
を呼び出すたびにこのファイルを使うように設定することもできます:
git config blame.ignoreRevsFile .git-blame-ignore-revs
このファイルを使用するように、IDEを設定することもできます。例えば、VSCode(およびGitLens)を使う場合は、.vscode/settings.json
に下記のように記述します:
{
+ "gitlens.advanced.blame.customArguments": [
+ "--ignore-revs-file",
+ ".git-blame-ignore-revs"
+ ]
+}
ローカルでテストを実行するには、下記のようにテストを呼び出します:
./scripts/test.bash
テストを作成する前に、下記項目を一通り参照してください:
test/
内にすでに作成されているテストscripts/test.bash
で使用されている既存のBatsの設定Batsでのデバッグは、難しいことがあります。-t
フラグを指定してTAP出力を有効にすると、テスト実行中に特殊なファイルディスクリプタ>&3
を使用して出力を表示できるため、デバッグが簡単になります。例えば次のとおりです:
# test/some_tests.bats
+
+printf "%s\\n" "Will not be printed during bats test/some_tests.bats"
+printf "%s\\n" "Will be printed during bats -t test/some_tests.bats" >&3
詳しくは、bats-coreドキュメント内のPrinting to the Terminalで説明されています。
asdf
は、Release Pleaseという自動リリースツールを使用して、セマンティックバージョンを自動的に引き上げ、Changelogを生成しています。この情報は、前回のリリースからのコミット履歴を読み込むことで生成されます。
Conventional Commit messagesでは、デフォルトブランチでのコミットメッセージのフォーマットとなる、プルリクエストタイトルのフォーマットを定義しています。これは、GitHub Actionamannn/action-semantic-pull-request
で強制されます。
Conventional Commitは、下記のフォーマットに従います:
<type>[optional scope][optional !]: <description>
+
+<!-- examples -->
+fix: some fix
+feat: a new feature
+docs: some documentation update
+docs(website): some change for the website
+feat!: feature with breaking change
<types>
の種類は次のとおりです: feat
、fix
、docs
、style
、 refactor
、 perf
、test
、build
、ci
、chore
、 revert
。
!
: 破壊的変更を示しますfix
: セマンティックバージョンのpatch
を新しく作成しますfeat
: セマンティックバージョンのminor
を新しく作成します<type>!
: セマンティックバージョンのmajor
を新しく作成しますプルリクエストのタイトルは、このフォーマットに従う必要があります。
ヒント
プルリクエストのタイトルには、Conventional Commit messageのフォーマットを使用してください。
asdf-alpineおよびasdf-ubuntuプロジェクトは、一部のasdfツールのDocker化されたイメージを提供する取り組みを継続的に行っています。これらのDockerイメージは、開発用サーバのベースとしたり、本番用アプリケーションの実行用途として使用することができます。
`,47)]))}const g=a(n,[["render",l]]);export{k as __pageData,g as default}; diff --git a/assets/ja-jp_contribute_documentation.md.DpQ3bmph.js b/assets/ja-jp_contribute_documentation.md.DpQ3bmph.js new file mode 100644 index 00000000..7c7f5a10 --- /dev/null +++ b/assets/ja-jp_contribute_documentation.md.DpQ3bmph.js @@ -0,0 +1,42 @@ +import{_ as i,c as a,a2 as n,o as e}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"ドキュメント & サイト","description":"","frontmatter":{},"headers":[],"relativePath":"ja-jp/contribute/documentation.md","filePath":"ja-jp/contribute/documentation.md","lastUpdated":1704890757000}'),t={name:"ja-jp/contribute/documentation.md"};function l(p,s,h,k,d,r){return e(),a("div",null,s[0]||(s[0]=[n(`これは、ドキュメントおよびサイトのコントリビューションガイドです。
GitHubでasdf
をフォークするか、デフォルトのブランチをGitクローンしてください:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
ドキュメントサイト開発用のツールは、asdf
によってdocs/.tool-versions
で管理されています。下記のようにプラグインを追加してください:
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
開発に必要なバージョンを、下記のようにインストールします:
asdf install
docs/package.json
をもとに、Node.jsの依存関係をインストールしてください:
npm install
VitePress (v2)は、asdfドキュメントサイトを構築するために使用している静的サイトジェネレータ(SSG)です。類似ツールであるDocsify.jsやVuePressに代わってVitePressが採用されたのは、ユーザがJavaScriptを使用できない、または有効にしていない場合に、HTMLのみのフォールバックをサポートしたいからでした。これは、DocsifyとVitePressがVuePressに急速に取って代わっていた場合には不可能でした。これ以外の機能セットはほとんど同じで、最小限の構成でMarkdownファイルを書くことに重点を置いています。
package.json
には、開発に必要なスクリプトが含まれています:
ローカルの開発サーバを起動するには、次のように実行します:
npm run dev
コミットする前にコードをフォーマットするには、次のように実行します:
npm run format
asdf
は、プルリクエストタイトルのConventional Commitsに依存する自動リリースパイプラインを使用しています。詳しくは、コアのコントリビューションガイドのドキュメントに記述されています。
ドキュメントの変更に関するプルリクエストを作成する場合、プルリクエストのタイトルは、Conventional Commit typeをdocs
として、docs: <description>
というフォーマットで作成するようにしてください。
サイトの構成設定は、構成を示すために使用されるJSオブジェクト含んだ、いくつかのTypeScriptファイルに記述されています。以下のとおりです:
docs/.vitepress/config.js
: サイトのルート構成ファイルです。仕様については、VitePressのドキュメントをご覧ください。ルート構成ファイルを簡素化するために、 Navバー と サイドバー の構成を示す大きなJSオブジェクトについては、別ファイルに切り出されており、かつ、ロケールごとに分類されています。次の両方のファイルを参照してください:
docs/.vitepress/navbars.js
docs/.vitepress/sidebars.js
これらの構成設定に関する公式ドキュメントは、Default Theme Referenceをご覧ください。
VitePressは、国際化対応に関して最高のサポートを備えています。 ルート構成ファイルであるdocs/.vitepress/config.js
では、サポートされているロケールとそのURL、ドロップメニューのタイトル、Navバー/サイドバーの構成への参照を定義しています。
Navバー/サイドバーの構成設定は前述の構成ファイルにキャプチャされ、ロケールごとに分類され、個別にエクスポートされます。
各ロケールのMarkdownコンテンツは、ルート構成ファイル内のlocales
内のキーと同じ名前のディレクトリ配下に配置する必要があります。ルート構成が下記の場合:
// docs/.vitepress/config.js
+export default defineConfig({
+ ...
+ locales: {
+ root: {
+ label: "English",
+ lang: "en-US",
+ themeConfig: {
+ nav: navbars.en,
+ sidebar: sidebars.en,
+ },
+ },
+ "pt-br": {
+ label: "Brazilian Portuguese",
+ lang: "pr-br",
+ themeConfig: {
+ nav: navbars.pt_br,
+ sidebar: sidebars.pt_br,
+ },
+ },
+ "zh-hans": {
+ label: "简体中文",
+ lang: "zh-hans",
+ themeConfig: {
+ nav: navbars.zh_hans,
+ sidebar: sidebars.zh_hans,
+ },
+ },
+ },
+})
/pt-BR/
を有効にするには、下記のように、docs/pt-BR/
配下に同じMarkdownファイルのセットを配置する必要があります:
docs
+├─ README.md
+├─ foo.md
+├─ nested
+│ └─ README.md
+└─ pt-BR
+ ├─ README.md
+ ├─ foo.md
+ └─ nested
+ └─ README.md
公式のVitePress i18nドキュメントには、より詳細な説明が記述されています。
`,37)]))}const E=i(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/ja-jp_contribute_documentation.md.DpQ3bmph.lean.js b/assets/ja-jp_contribute_documentation.md.DpQ3bmph.lean.js new file mode 100644 index 00000000..7c7f5a10 --- /dev/null +++ b/assets/ja-jp_contribute_documentation.md.DpQ3bmph.lean.js @@ -0,0 +1,42 @@ +import{_ as i,c as a,a2 as n,o as e}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"ドキュメント & サイト","description":"","frontmatter":{},"headers":[],"relativePath":"ja-jp/contribute/documentation.md","filePath":"ja-jp/contribute/documentation.md","lastUpdated":1704890757000}'),t={name:"ja-jp/contribute/documentation.md"};function l(p,s,h,k,d,r){return e(),a("div",null,s[0]||(s[0]=[n(`これは、ドキュメントおよびサイトのコントリビューションガイドです。
GitHubでasdf
をフォークするか、デフォルトのブランチをGitクローンしてください:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
ドキュメントサイト開発用のツールは、asdf
によってdocs/.tool-versions
で管理されています。下記のようにプラグインを追加してください:
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
開発に必要なバージョンを、下記のようにインストールします:
asdf install
docs/package.json
をもとに、Node.jsの依存関係をインストールしてください:
npm install
VitePress (v2)は、asdfドキュメントサイトを構築するために使用している静的サイトジェネレータ(SSG)です。類似ツールであるDocsify.jsやVuePressに代わってVitePressが採用されたのは、ユーザがJavaScriptを使用できない、または有効にしていない場合に、HTMLのみのフォールバックをサポートしたいからでした。これは、DocsifyとVitePressがVuePressに急速に取って代わっていた場合には不可能でした。これ以外の機能セットはほとんど同じで、最小限の構成でMarkdownファイルを書くことに重点を置いています。
package.json
には、開発に必要なスクリプトが含まれています:
ローカルの開発サーバを起動するには、次のように実行します:
npm run dev
コミットする前にコードをフォーマットするには、次のように実行します:
npm run format
asdf
は、プルリクエストタイトルのConventional Commitsに依存する自動リリースパイプラインを使用しています。詳しくは、コアのコントリビューションガイドのドキュメントに記述されています。
ドキュメントの変更に関するプルリクエストを作成する場合、プルリクエストのタイトルは、Conventional Commit typeをdocs
として、docs: <description>
というフォーマットで作成するようにしてください。
サイトの構成設定は、構成を示すために使用されるJSオブジェクト含んだ、いくつかのTypeScriptファイルに記述されています。以下のとおりです:
docs/.vitepress/config.js
: サイトのルート構成ファイルです。仕様については、VitePressのドキュメントをご覧ください。ルート構成ファイルを簡素化するために、 Navバー と サイドバー の構成を示す大きなJSオブジェクトについては、別ファイルに切り出されており、かつ、ロケールごとに分類されています。次の両方のファイルを参照してください:
docs/.vitepress/navbars.js
docs/.vitepress/sidebars.js
これらの構成設定に関する公式ドキュメントは、Default Theme Referenceをご覧ください。
VitePressは、国際化対応に関して最高のサポートを備えています。 ルート構成ファイルであるdocs/.vitepress/config.js
では、サポートされているロケールとそのURL、ドロップメニューのタイトル、Navバー/サイドバーの構成への参照を定義しています。
Navバー/サイドバーの構成設定は前述の構成ファイルにキャプチャされ、ロケールごとに分類され、個別にエクスポートされます。
各ロケールのMarkdownコンテンツは、ルート構成ファイル内のlocales
内のキーと同じ名前のディレクトリ配下に配置する必要があります。ルート構成が下記の場合:
// docs/.vitepress/config.js
+export default defineConfig({
+ ...
+ locales: {
+ root: {
+ label: "English",
+ lang: "en-US",
+ themeConfig: {
+ nav: navbars.en,
+ sidebar: sidebars.en,
+ },
+ },
+ "pt-br": {
+ label: "Brazilian Portuguese",
+ lang: "pr-br",
+ themeConfig: {
+ nav: navbars.pt_br,
+ sidebar: sidebars.pt_br,
+ },
+ },
+ "zh-hans": {
+ label: "简体中文",
+ lang: "zh-hans",
+ themeConfig: {
+ nav: navbars.zh_hans,
+ sidebar: sidebars.zh_hans,
+ },
+ },
+ },
+})
/pt-BR/
を有効にするには、下記のように、docs/pt-BR/
配下に同じMarkdownファイルのセットを配置する必要があります:
docs
+├─ README.md
+├─ foo.md
+├─ nested
+│ └─ README.md
+└─ pt-BR
+ ├─ README.md
+ ├─ foo.md
+ └─ nested
+ └─ README.md
公式のVitePress i18nドキュメントには、より詳細な説明が記述されています。
`,37)]))}const E=i(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/ja-jp_contribute_first-party-plugins.md.CLMHeW36.js b/assets/ja-jp_contribute_first-party-plugins.md.CLMHeW36.js new file mode 100644 index 00000000..2eeb77f1 --- /dev/null +++ b/assets/ja-jp_contribute_first-party-plugins.md.CLMHeW36.js @@ -0,0 +1 @@ +import{_ as a,c as r,a2 as t,o as i}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"公式プラグイン","description":"","frontmatter":{},"headers":[],"relativePath":"ja-jp/contribute/first-party-plugins.md","filePath":"ja-jp/contribute/first-party-plugins.md","lastUpdated":1704890757000}'),s={name:"ja-jp/contribute/first-party-plugins.md"};function l(o,e,d,n,f,c){return i(),r("div",null,e[0]||(e[0]=[t('asdfコアチームでは、日々のワークライフに関連するプラグインをいくつか作成しています。これらのプラグインのメンテナンスおよび改善にご協力いただける方を、いつでも歓迎しています。詳しくは、下記リンクから、それぞれのリポジトリを参照してください:
コミュニティプラグインについては、下記をご覧ください:
asdf-community
オーガナイゼーション: asdf
プラグインの長期的なメンテナンスを目的としたコミュニティ主導の共同プロジェクトです。asdf-plugins
ショートネームリポジトリ: ポピュラーなasdf
プラグインを検索するためにasdf
コアが使用する、ショートネームのリストです。asdf-plugin
トピック検索asdfコアチームでは、日々のワークライフに関連するプラグインをいくつか作成しています。これらのプラグインのメンテナンスおよび改善にご協力いただける方を、いつでも歓迎しています。詳しくは、下記リンクから、それぞれのリポジトリを参照してください:
コミュニティプラグインについては、下記をご覧ください:
asdf-community
オーガナイゼーション: asdf
プラグインの長期的なメンテナンスを目的としたコミュニティ主導の共同プロジェクトです。asdf-plugins
ショートネームリポジトリ: ポピュラーなasdf
プラグインを検索するためにasdf
コアが使用する、ショートネームのリストです。asdf-plugin
トピック検索asdf
のインストールには次の手順が必要です:
asdf
コアのダウンロードasdf
のインストール.tool-versions
ファイルで、グローバルまたはプロジェクトのバージョンをセットasdfの動作にはgit
およびcurl
が必要です。以下の表は、 あなたが使用している パッケージマネージャで実行するコマンドの 一部例 です(いくつかのツールは、後の手順で自動的にインストールされます)。
OS | パッケージマネージャ | コマンド |
---|---|---|
linux | Aptitude | apt install curl git |
linux | DNF | dnf install curl git |
linux | Pacman | pacman -S curl git |
linux | Zypper | zypper install curl git |
macOS | Homebrew | brew install coreutils curl git |
macOS | Spack | spack install coreutils curl git |
備考
お使いのシステムの構成によっては、接頭にsudo
が必要となる場合もあります。
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
理由がない限り、git
コマンドを使用した公式ダウンロードの手順を使用することを強く推奨します。
方法 | コマンド |
---|---|
Homebrew | brew install asdf |
Pacman | git clone https://aur.archlinux.org/asdf-vm.git && cd asdf-vm && makepkg -si または好みのAURヘルパーを使用 |
あなたが使用しているシェル、OS、およびインストール方法によって、ここでの設定方法が変わります。最も適したものを選択してください。
masOSユーザの方は、この節の最後にあるpath_helper
に関する警告を必ず参照してください。
~/.bashrc
に下記の行を追記します:
. "$HOME/.asdf/asdf.sh"
コマンド補完が必要な場合は、.bashrc
に下記の行を追記します:
. "$HOME/.asdf/completions/asdf.bash"
macOS Catalina以降を使用している場合、デフォルトのシェルはZSHです。Bashに変更していない限り、ZSHの手順を参照してください。
~/.bash_profile
に下記の行を追記します:
. "$HOME/.asdf/asdf.sh"
コマンド補完が必要な場合は、.bash_profile
に下記の行を追記します:
. "$HOME/.asdf/completions/asdf.bash"
下記コマンドで、~/.bashrc
にasdf.sh
を追加します:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bashrc
コマンド補完が必要な場合は、Homebrewのガイドに従って設定を完了させるか、下記コマンドを実行します:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bashrc
macOS Catalina以降を使用している場合、デフォルトのシェルはZSHです。Bashに変更していない限り、ZSHの手順を参照してください。
下記コマンドで、~/.bash_profile
にasdf.sh
を追加します:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bash_profile
コマンド補完が必要な場合は、Homebrewのガイドに従って設定を完了させるか、下記コマンドを実行します:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bash_profile
~/.bashrc
に下記の行を追記します:
. /opt/asdf-vm/asdf.sh
コマンド補完が必要な場合は、bash-completion
をインストールします。
~/.config/fish/config.fish
に下記の行を追記します:
source ~/.asdf/asdf.fish
コマンド補完が必要な場合は、下記コマンドを実行します:
mkdir -p ~/.config/fish/completions; and ln -s ~/.asdf/completions/asdf.fish ~/.config/fish/completions
下記コマンドで、~/.config/fish/config.fish
にasdf.sh
を追加します:
echo -e "\\nsource "(brew --prefix asdf)"/libexec/asdf.fish" >> ~/.config/fish/config.fish
コマンド補完は、Fish shellのHomebrewが担います。親切ですね!
~/.config/fish/config.fish
に下記の行を追記します:
source /opt/asdf-vm/asdf.fish
コマンド補完は、AURパッケージのインストール時に自動的に設定されます。
下記コマンドで、~/.config/elvish/rc.elv
にasdf.elv
を追加します:
mkdir -p ~/.config/elvish/lib; ln -s ~/.asdf/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
コマンド補完は自動的に設定されます。
下記コマンドで、~/.config/elvish/rc.elv
にasdf.elv
を追加します:
mkdir -p ~/.config/elvish/lib; ln -s (brew --prefix asdf)/libexec/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
コマンド補完は自動的に設定されます。
下記コマンドで、~/.config/elvish/rc.elv
にasdf.elv
を追加します:
mkdir -p ~/.config/elvish/lib; ln -s /opt/asdf-vm/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
コマンド補完は自動的に設定されます。
~/.zshrc
に下記の行を追記します:
. "$HOME/.asdf/asdf.sh"
または、asdf for oh-my-zshのようなZSHフレームワークプラグインを使用して、このスクリプトをsourceし、コマンド補完をセットアップします。
コマンド補完は、ZSHフレームワークのasdf
プラグインで設定するか、~/.zshrc
に下記の行を追記することで設定できます:
# append completions to fpath
+fpath=(\${ASDF_DIR}/completions $fpath)
+# initialise completions with ZSH's compinit
+autoload -Uz compinit && compinit
compinit
のセットアップをカスタマイズしている場合は、asdf.sh
ソース以下にcompinit
がくるようにしてください。compinit
のセットアップをカスタマイズしている場合は、フレームワークソース以下にcompinit
がくるようにしてください。警告
ZSHフレームワークを使用している場合、新しいZSHコマンド補完を使用するには、fpath
経由で、関連するasdf
プラグインの更新が必要となることがあります。Oh-My-ZSH asdfプラグインは、ohmyzsh/ohmyzsh#8837でご覧いただくと分かるとおり、まだ更新されていません。
下記コマンドで、~/.zshrc
にasdf.sh
を追加します:
echo -e "\\n. $(brew --prefix asdf)/libexec/asdf.sh" >> \${ZDOTDIR:-~}/.zshrc
OR use a ZSH Framework plugin like asdf for oh-my-zsh which will source this script and setup completions.
コマンド補完は、ZSHフレームワークasdf
によって設定されるか、Homebrewの説明に従って設定必要があります。ZSHフレームワークを使用している場合、新しいZSHコマンド補完を使用するには、fpath
経由で、関連するasdf
プラグインの更新が必要となることがあります。Oh-My-ZSH asdfプラグインは、ohmyzsh/ohmyzsh#8837でご覧いただくと分かるとおり、まだ更新されていません。
~/.zshrc
に下記の行を追記します:
. /opt/asdf-vm/asdf.sh
コマンド補完は、ZSHに適した場所に配置されますが、オートコンプリートを使用するようにZSHを設定する必要があります。
~/.config/powershell/profile.ps1
に下記の行を追記します:
. "$HOME/.asdf/asdf.ps1"
下記コマンドで、~/.config/powershell/profile.ps1
にasdf.sh
を追加します:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.ps1\\"" >> ~/.config/powershell/profile.ps1
~/.config/powershell/profile.ps1
に下記の行を追記します:
. /opt/asdf-vm/asdf.ps1
下記コマンドで、~/.config/nushell/config.nu
にasdf.nu
を追加します:
"\\n$env.ASDF_DIR = ($env.HOME | path join '.asdf')\\n source " + ($env.HOME | path join '.asdf/asdf.nu') | save --append $nu.config-path
コマンド補完は自動的に設定されます。
下記コマンドで、~/.config/nushell/config.nu
にasdf.nu
を追加します:
"\\n$env.ASDF_DIR = (brew --prefix asdf | str trim | into string | path join 'libexec')\\n source " + (brew --prefix asdf | str trim | into string | path join 'libexec/asdf.nu') | save --append $nu.config-path
コマンド補完は自動的に設定されます。
下記コマンドで、~/.config/nushell/config.nu
にasdf.nu
を追加します:
"\\n$env.ASDF_DIR = '/opt/asdf-vm/'\\n source /opt/asdf-vm/asdf.nu" | save --append $nu.config-path
コマンド補完は自動的に設定されます。
~/.profile
に下記の行を追記します:
export ASDF_DIR="$HOME/.asdf"
+. "$HOME/.asdf/asdf.sh"
下記コマンドで、~/.profile
にasdf.sh
を追加します:
echo -e "\\nexport ASDF_DIR=\\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
+echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
~/.profile
に下記の行を追記します:
export ASDF_DIR="/opt/asdf-vm"
+. /opt/asdf-vm/asdf.sh
asdf
のスクリプトは、$PATH
を設定したあと、かつ、使用中のフレームワーク(oh-my-zsh など)を呼び出したあとに記述する必要があります。
警告
macOSでは、BashまたはZSHシェルを起動すると、自動的にpath_helper
というユーティリティが呼び出されます。path_helper
はPATH
(およびMANPATH
)内の項目の順番を並び替えることができるため、特定の順序を必要とするツールの動作に、一貫性が無くなってしまいます。これを回避するため、macOSでasdf
を利用するときは、強制的にPATH
エントリの先頭に追加する(優先度を一番高くする)ようにしてください。これは、ASDF_FORCE_PREPEND
環境変数で制御できます。
PATH
の変更を反映するために、シェルを再起動してください。たいていの場合、ターミナルのタブを新たに開けばOKです。
これで、asdf
のコアのインストールは完了です🎉
しかし、asdf
が役に立つようになるのは、プラグインをインストールしてからツールをインストールし、バージョンを管理するようになってからです。引き続き、ガイドを進めていきましょう。
ここではデモとして、asdf-nodejs
プラグインを使用してNode.jsをインストール・設定してみましょう。
各プラグインには依存関係があるため、プラグインのリポジトリを確認しておきましょう。asdf-nodejs
の場合、必要なものは次のとおりです:
OS | 依存関係インストールコマンド |
---|---|
Debian | apt-get install dirmngr gpg curl gawk |
CentOS/ Rocky Linux/ AlmaLinux | yum install gnupg2 curl gawk |
macOS | brew install gpg gawk |
一部のプラグインではインストール後の事後処理でこれらの依存関係が必要となるため、あらかじめインストールしておきましょう。
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
Node.js用のプラグインをインストールしたので、このツールの特定のバージョンをインストールしましょう。
インストール可能なバージョンはasdf list all nodejs
コマンドで確認できますし、特定のメジャーバージョンのサブセットはasdf list all nodejs 14
コマンドで確認できます。
最新版をインストールするには、次のコマンドを実行します:
asdf install nodejs latest
備考
asdf
では正確なバージョン番号を指定してください。latest
は、現時点での最新バージョンを指定できるasdf
のヘルパーです。
asdf
は、カレントディレクトリから上位の$HOME
ディレクトリまでに存在するすべての.tool-versions
ファイルをもとに、ツールのバージョンを照会します。照会は、asdf
で管理するツールを実行した際に、ジャストインタイムで行われます。
警告
ツールで指定されたバージョンが見つからない場合、エラーが発生します。asdf current
コマンドを実行すると、カレントディレクトリにおいてツールのバージョンを解決可能か確認できるため、どのツールが実行に失敗するか検証することができます。
グローバルのデフォルト設定は、$HOME/.tool-versions
で管理されます。グローバルのバージョンをセットするには、次のコマンドを実行します:
asdf global nodejs latest
すると、$HOME/.tool-versions
内には次のように書き込まれます:
nodejs 16.5.0
一部のOSでは、python
のように、asdf
ではなくシステムが管理するツールが既にインストールされていることがあります。それを使用する場合、asdf
に対して、バージョン管理をシステムに委任するように指示する必要があります。詳しくは、バージョンのリファレンスをご覧ください。
ローカルのバージョン設定は、$PWD/.tool-versions
ファイル(カレントディレクトリ内)で定義されます。たいていの場合は、プロジェクトのGitリポジトリ内となるでしょう。対象となるディレクトリで、下記コマンドを実行します:
asdf local nodejs latest
すると、$PWD/.tool-versions
内には次のように書き込まれます:
nodejs 16.5.0
asdf
は、他のバージョンマネージャ向けに作られた既存のバージョンファイル(例: rbenv
の場合は.ruby-version
ファイル)からの移行をサポートしています。これはプラグイン単位でのサポートです。
asdf-nodejs
であれば、.nvmrc
ファイルと.node-version
ファイルの両方に対応しています。このサポートを有効にするには、asdf
の構成設定ファイルである$HOME/.asdfrc
内に、下記の行を追記してください:
legacy_version_file = yes
構成設定でのその他のオプションについて詳しくは、構成設定のリファレンスをご覧ください。
以上で、asdf
の入門は完了です🎉 ここまでで、プロジェクトでのnodejs
のバージョン管理ができるようになりました。プロジェクトで使用するツールごとに、同様の手順を実施してください!
asdf
には使いこなすと便利なコマンドが他にもいっぱいあり、asdf --help
コマンドまたは単にasdf
コマンドを実行すれば、すべてのコマンドの説明を見ることができます。コマンドは大きく分けて3つのカテゴリに分けられます:
asdf
のインストールには次の手順が必要です:
asdf
コアのダウンロードasdf
のインストール.tool-versions
ファイルで、グローバルまたはプロジェクトのバージョンをセットasdfの動作にはgit
およびcurl
が必要です。以下の表は、 あなたが使用している パッケージマネージャで実行するコマンドの 一部例 です(いくつかのツールは、後の手順で自動的にインストールされます)。
OS | パッケージマネージャ | コマンド |
---|---|---|
linux | Aptitude | apt install curl git |
linux | DNF | dnf install curl git |
linux | Pacman | pacman -S curl git |
linux | Zypper | zypper install curl git |
macOS | Homebrew | brew install coreutils curl git |
macOS | Spack | spack install coreutils curl git |
備考
お使いのシステムの構成によっては、接頭にsudo
が必要となる場合もあります。
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
理由がない限り、git
コマンドを使用した公式ダウンロードの手順を使用することを強く推奨します。
方法 | コマンド |
---|---|
Homebrew | brew install asdf |
Pacman | git clone https://aur.archlinux.org/asdf-vm.git && cd asdf-vm && makepkg -si または好みのAURヘルパーを使用 |
あなたが使用しているシェル、OS、およびインストール方法によって、ここでの設定方法が変わります。最も適したものを選択してください。
masOSユーザの方は、この節の最後にあるpath_helper
に関する警告を必ず参照してください。
~/.bashrc
に下記の行を追記します:
. "$HOME/.asdf/asdf.sh"
コマンド補完が必要な場合は、.bashrc
に下記の行を追記します:
. "$HOME/.asdf/completions/asdf.bash"
macOS Catalina以降を使用している場合、デフォルトのシェルはZSHです。Bashに変更していない限り、ZSHの手順を参照してください。
~/.bash_profile
に下記の行を追記します:
. "$HOME/.asdf/asdf.sh"
コマンド補完が必要な場合は、.bash_profile
に下記の行を追記します:
. "$HOME/.asdf/completions/asdf.bash"
下記コマンドで、~/.bashrc
にasdf.sh
を追加します:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bashrc
コマンド補完が必要な場合は、Homebrewのガイドに従って設定を完了させるか、下記コマンドを実行します:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bashrc
macOS Catalina以降を使用している場合、デフォルトのシェルはZSHです。Bashに変更していない限り、ZSHの手順を参照してください。
下記コマンドで、~/.bash_profile
にasdf.sh
を追加します:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bash_profile
コマンド補完が必要な場合は、Homebrewのガイドに従って設定を完了させるか、下記コマンドを実行します:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bash_profile
~/.bashrc
に下記の行を追記します:
. /opt/asdf-vm/asdf.sh
コマンド補完が必要な場合は、bash-completion
をインストールします。
~/.config/fish/config.fish
に下記の行を追記します:
source ~/.asdf/asdf.fish
コマンド補完が必要な場合は、下記コマンドを実行します:
mkdir -p ~/.config/fish/completions; and ln -s ~/.asdf/completions/asdf.fish ~/.config/fish/completions
下記コマンドで、~/.config/fish/config.fish
にasdf.sh
を追加します:
echo -e "\\nsource "(brew --prefix asdf)"/libexec/asdf.fish" >> ~/.config/fish/config.fish
コマンド補完は、Fish shellのHomebrewが担います。親切ですね!
~/.config/fish/config.fish
に下記の行を追記します:
source /opt/asdf-vm/asdf.fish
コマンド補完は、AURパッケージのインストール時に自動的に設定されます。
下記コマンドで、~/.config/elvish/rc.elv
にasdf.elv
を追加します:
mkdir -p ~/.config/elvish/lib; ln -s ~/.asdf/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
コマンド補完は自動的に設定されます。
下記コマンドで、~/.config/elvish/rc.elv
にasdf.elv
を追加します:
mkdir -p ~/.config/elvish/lib; ln -s (brew --prefix asdf)/libexec/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
コマンド補完は自動的に設定されます。
下記コマンドで、~/.config/elvish/rc.elv
にasdf.elv
を追加します:
mkdir -p ~/.config/elvish/lib; ln -s /opt/asdf-vm/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
コマンド補完は自動的に設定されます。
~/.zshrc
に下記の行を追記します:
. "$HOME/.asdf/asdf.sh"
または、asdf for oh-my-zshのようなZSHフレームワークプラグインを使用して、このスクリプトをsourceし、コマンド補完をセットアップします。
コマンド補完は、ZSHフレームワークのasdf
プラグインで設定するか、~/.zshrc
に下記の行を追記することで設定できます:
# append completions to fpath
+fpath=(\${ASDF_DIR}/completions $fpath)
+# initialise completions with ZSH's compinit
+autoload -Uz compinit && compinit
compinit
のセットアップをカスタマイズしている場合は、asdf.sh
ソース以下にcompinit
がくるようにしてください。compinit
のセットアップをカスタマイズしている場合は、フレームワークソース以下にcompinit
がくるようにしてください。警告
ZSHフレームワークを使用している場合、新しいZSHコマンド補完を使用するには、fpath
経由で、関連するasdf
プラグインの更新が必要となることがあります。Oh-My-ZSH asdfプラグインは、ohmyzsh/ohmyzsh#8837でご覧いただくと分かるとおり、まだ更新されていません。
下記コマンドで、~/.zshrc
にasdf.sh
を追加します:
echo -e "\\n. $(brew --prefix asdf)/libexec/asdf.sh" >> \${ZDOTDIR:-~}/.zshrc
OR use a ZSH Framework plugin like asdf for oh-my-zsh which will source this script and setup completions.
コマンド補完は、ZSHフレームワークasdf
によって設定されるか、Homebrewの説明に従って設定必要があります。ZSHフレームワークを使用している場合、新しいZSHコマンド補完を使用するには、fpath
経由で、関連するasdf
プラグインの更新が必要となることがあります。Oh-My-ZSH asdfプラグインは、ohmyzsh/ohmyzsh#8837でご覧いただくと分かるとおり、まだ更新されていません。
~/.zshrc
に下記の行を追記します:
. /opt/asdf-vm/asdf.sh
コマンド補完は、ZSHに適した場所に配置されますが、オートコンプリートを使用するようにZSHを設定する必要があります。
~/.config/powershell/profile.ps1
に下記の行を追記します:
. "$HOME/.asdf/asdf.ps1"
下記コマンドで、~/.config/powershell/profile.ps1
にasdf.sh
を追加します:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.ps1\\"" >> ~/.config/powershell/profile.ps1
~/.config/powershell/profile.ps1
に下記の行を追記します:
. /opt/asdf-vm/asdf.ps1
下記コマンドで、~/.config/nushell/config.nu
にasdf.nu
を追加します:
"\\n$env.ASDF_DIR = ($env.HOME | path join '.asdf')\\n source " + ($env.HOME | path join '.asdf/asdf.nu') | save --append $nu.config-path
コマンド補完は自動的に設定されます。
下記コマンドで、~/.config/nushell/config.nu
にasdf.nu
を追加します:
"\\n$env.ASDF_DIR = (brew --prefix asdf | str trim | into string | path join 'libexec')\\n source " + (brew --prefix asdf | str trim | into string | path join 'libexec/asdf.nu') | save --append $nu.config-path
コマンド補完は自動的に設定されます。
下記コマンドで、~/.config/nushell/config.nu
にasdf.nu
を追加します:
"\\n$env.ASDF_DIR = '/opt/asdf-vm/'\\n source /opt/asdf-vm/asdf.nu" | save --append $nu.config-path
コマンド補完は自動的に設定されます。
~/.profile
に下記の行を追記します:
export ASDF_DIR="$HOME/.asdf"
+. "$HOME/.asdf/asdf.sh"
下記コマンドで、~/.profile
にasdf.sh
を追加します:
echo -e "\\nexport ASDF_DIR=\\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
+echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
~/.profile
に下記の行を追記します:
export ASDF_DIR="/opt/asdf-vm"
+. /opt/asdf-vm/asdf.sh
asdf
のスクリプトは、$PATH
を設定したあと、かつ、使用中のフレームワーク(oh-my-zsh など)を呼び出したあとに記述する必要があります。
警告
macOSでは、BashまたはZSHシェルを起動すると、自動的にpath_helper
というユーティリティが呼び出されます。path_helper
はPATH
(およびMANPATH
)内の項目の順番を並び替えることができるため、特定の順序を必要とするツールの動作に、一貫性が無くなってしまいます。これを回避するため、macOSでasdf
を利用するときは、強制的にPATH
エントリの先頭に追加する(優先度を一番高くする)ようにしてください。これは、ASDF_FORCE_PREPEND
環境変数で制御できます。
PATH
の変更を反映するために、シェルを再起動してください。たいていの場合、ターミナルのタブを新たに開けばOKです。
これで、asdf
のコアのインストールは完了です🎉
しかし、asdf
が役に立つようになるのは、プラグインをインストールしてからツールをインストールし、バージョンを管理するようになってからです。引き続き、ガイドを進めていきましょう。
ここではデモとして、asdf-nodejs
プラグインを使用してNode.jsをインストール・設定してみましょう。
各プラグインには依存関係があるため、プラグインのリポジトリを確認しておきましょう。asdf-nodejs
の場合、必要なものは次のとおりです:
OS | 依存関係インストールコマンド |
---|---|
Debian | apt-get install dirmngr gpg curl gawk |
CentOS/ Rocky Linux/ AlmaLinux | yum install gnupg2 curl gawk |
macOS | brew install gpg gawk |
一部のプラグインではインストール後の事後処理でこれらの依存関係が必要となるため、あらかじめインストールしておきましょう。
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
Node.js用のプラグインをインストールしたので、このツールの特定のバージョンをインストールしましょう。
インストール可能なバージョンはasdf list all nodejs
コマンドで確認できますし、特定のメジャーバージョンのサブセットはasdf list all nodejs 14
コマンドで確認できます。
最新版をインストールするには、次のコマンドを実行します:
asdf install nodejs latest
備考
asdf
では正確なバージョン番号を指定してください。latest
は、現時点での最新バージョンを指定できるasdf
のヘルパーです。
asdf
は、カレントディレクトリから上位の$HOME
ディレクトリまでに存在するすべての.tool-versions
ファイルをもとに、ツールのバージョンを照会します。照会は、asdf
で管理するツールを実行した際に、ジャストインタイムで行われます。
警告
ツールで指定されたバージョンが見つからない場合、エラーが発生します。asdf current
コマンドを実行すると、カレントディレクトリにおいてツールのバージョンを解決可能か確認できるため、どのツールが実行に失敗するか検証することができます。
グローバルのデフォルト設定は、$HOME/.tool-versions
で管理されます。グローバルのバージョンをセットするには、次のコマンドを実行します:
asdf global nodejs latest
すると、$HOME/.tool-versions
内には次のように書き込まれます:
nodejs 16.5.0
一部のOSでは、python
のように、asdf
ではなくシステムが管理するツールが既にインストールされていることがあります。それを使用する場合、asdf
に対して、バージョン管理をシステムに委任するように指示する必要があります。詳しくは、バージョンのリファレンスをご覧ください。
ローカルのバージョン設定は、$PWD/.tool-versions
ファイル(カレントディレクトリ内)で定義されます。たいていの場合は、プロジェクトのGitリポジトリ内となるでしょう。対象となるディレクトリで、下記コマンドを実行します:
asdf local nodejs latest
すると、$PWD/.tool-versions
内には次のように書き込まれます:
nodejs 16.5.0
asdf
は、他のバージョンマネージャ向けに作られた既存のバージョンファイル(例: rbenv
の場合は.ruby-version
ファイル)からの移行をサポートしています。これはプラグイン単位でのサポートです。
asdf-nodejs
であれば、.nvmrc
ファイルと.node-version
ファイルの両方に対応しています。このサポートを有効にするには、asdf
の構成設定ファイルである$HOME/.asdfrc
内に、下記の行を追記してください:
legacy_version_file = yes
構成設定でのその他のオプションについて詳しくは、構成設定のリファレンスをご覧ください。
以上で、asdf
の入門は完了です🎉 ここまでで、プロジェクトでのnodejs
のバージョン管理ができるようになりました。プロジェクトで使用するツールごとに、同様の手順を実施してください!
asdf
には使いこなすと便利なコマンドが他にもいっぱいあり、asdf --help
コマンドまたは単にasdf
コマンドを実行すれば、すべてのコマンドの説明を見ることができます。コマンドは大きく分けて3つのカテゴリに分けられます:
asdf
は、ツールのためのバージョンマネージャです。すべてのツールのバージョンは単一のファイル(.tool-versions
)内で定義されるため、プロジェクトのGitリポジトリにチェックインして共有することで、チーム全員に同じーバージョンのツールを使ってもらえるようになります。
従来は、複数のCLIのバージョンマネージャを用意する必要があり、それぞれが異なるAPI、構成ファイル、および実装($PATH
の操作、Shim、環境変数など)となっていました。asdf
は、開発ワークフローを簡素化するための単一インターフェースと構成ファイルを提供しており、シンプルなプラグインインターフェースを使って、すべてのツール・ランタイムに拡張することができます。
シェル上でasdf
コアがセットアップすると、特定のツールを管理するためのプラグインをインストールすることができるようになります。プラグインによってツールがインストールされると、インストールされる実行ファイルごとにShimが作成されます。これらの実行ファイルを実行しようとすると、代わりにShimが実行され、.tool-versions
で定義されているバージョンをasdf
が認識して、当該バージョンが実行されます。
nvm、n、およびrbenvのようなツールはすべて、ツールによってインストールされる実行ファイルのShimを作成するシェルスクリプトです。
asdf
はこれらのツールと非常に似ていて、ツール/ランタイムのバージョン管理という分野では競合しています。asdf
はプラグインシステムを採用し、他のツールと差別化することで、ツール/ランタイムごとのマネージャ、マネージャごとの異なるコマンド、そしてリポジトリ内の様々な*-version
ファイルといったものを排除しています。
シェルに、ディレクトリごとに環境変数をロード/アンロードできる機能を付け加えます。
asdf
は環境変数を管理することはしませんが、direnvの動作をasdf
に統合するasdf-direnv
プラグインが存在します。
詳しくはdirenvのドキュメントをご覧ください。
macOS(またはLinux)のためのパッケージマネージャー
Homebrewは、パッケージとその上位の依存関係を管理します。asdf
は上位の依存関係を管理することはしませんし、パッケージマネージャでもありません。それらの管理はユーザが負担することとなりますが、asdf
はなるべく依存関係のリストを小さく保つように努めています。
詳しくはHomebrewのドキュメントをご覧ください。
Nixは、パッケージ管理とシステム構成に独自のアプローチを取り入れたツールです。
NixOSは、各ツールの依存関係ツリー全体でパッケージのバージョンを正確に管理することで、真に再現可能な環境を構築することを目指しています。asdf
でそのようなことはできません。NixOSは、独自のプログラミング言語、たくさんのCLIツール、そして60,000を超えるパッケージコレクションによって、それらの機能を支えています。
繰り返しになりますが、asdf
は上位の依存関係を管理することはしませんし、パッケージマネージャでもありません。
詳しくはNixOSのドキュメントをご覧ください。
asdf
は、プラグインシステムによって多くのツールをサポートしており、シェル構成にたった1行のシェルスクリプトを記述するだけで使えるというシンプルさ・親しみやすさによって、チームが確実に同じバージョンのツールを使用することを保証できます。
Note
asdf
はシステムのパッケージマネージャになることを目指してはいません。あくまで、ツールのバージョンマネージャです。プラグインを作成することで、どのようなツールでもasdf
で管理できるようになりますが、それがそのツールにとって最善の方法であるとは限りませんのでご注意ください。
asdf
は、ツールのためのバージョンマネージャです。すべてのツールのバージョンは単一のファイル(.tool-versions
)内で定義されるため、プロジェクトのGitリポジトリにチェックインして共有することで、チーム全員に同じーバージョンのツールを使ってもらえるようになります。
従来は、複数のCLIのバージョンマネージャを用意する必要があり、それぞれが異なるAPI、構成ファイル、および実装($PATH
の操作、Shim、環境変数など)となっていました。asdf
は、開発ワークフローを簡素化するための単一インターフェースと構成ファイルを提供しており、シンプルなプラグインインターフェースを使って、すべてのツール・ランタイムに拡張することができます。
シェル上でasdf
コアがセットアップすると、特定のツールを管理するためのプラグインをインストールすることができるようになります。プラグインによってツールがインストールされると、インストールされる実行ファイルごとにShimが作成されます。これらの実行ファイルを実行しようとすると、代わりにShimが実行され、.tool-versions
で定義されているバージョンをasdf
が認識して、当該バージョンが実行されます。
nvm、n、およびrbenvのようなツールはすべて、ツールによってインストールされる実行ファイルのShimを作成するシェルスクリプトです。
asdf
はこれらのツールと非常に似ていて、ツール/ランタイムのバージョン管理という分野では競合しています。asdf
はプラグインシステムを採用し、他のツールと差別化することで、ツール/ランタイムごとのマネージャ、マネージャごとの異なるコマンド、そしてリポジトリ内の様々な*-version
ファイルといったものを排除しています。
シェルに、ディレクトリごとに環境変数をロード/アンロードできる機能を付け加えます。
asdf
は環境変数を管理することはしませんが、direnvの動作をasdf
に統合するasdf-direnv
プラグインが存在します。
詳しくはdirenvのドキュメントをご覧ください。
macOS(またはLinux)のためのパッケージマネージャー
Homebrewは、パッケージとその上位の依存関係を管理します。asdf
は上位の依存関係を管理することはしませんし、パッケージマネージャでもありません。それらの管理はユーザが負担することとなりますが、asdf
はなるべく依存関係のリストを小さく保つように努めています。
詳しくはHomebrewのドキュメントをご覧ください。
Nixは、パッケージ管理とシステム構成に独自のアプローチを取り入れたツールです。
NixOSは、各ツールの依存関係ツリー全体でパッケージのバージョンを正確に管理することで、真に再現可能な環境を構築することを目指しています。asdf
でそのようなことはできません。NixOSは、独自のプログラミング言語、たくさんのCLIツール、そして60,000を超えるパッケージコレクションによって、それらの機能を支えています。
繰り返しになりますが、asdf
は上位の依存関係を管理することはしませんし、パッケージマネージャでもありません。
詳しくはNixOSのドキュメントをご覧ください。
asdf
は、プラグインシステムによって多くのツールをサポートしており、シェル構成にたった1行のシェルスクリプトを記述するだけで使えるというシンプルさ・親しみやすさによって、チームが確実に同じバージョンのツールを使用することを保証できます。
Note
asdf
はシステムのパッケージマネージャになることを目指してはいません。あくまで、ツールのバージョンマネージャです。プラグインを作成することで、どのようなツールでもasdf
で管理できるようになりますが、それがそのツールにとって最善の方法であるとは限りませんのでご注意ください。
asdf
で利用可能なすべてのコマンドの一覧です。この一覧は、asdf help
コマンドで表示されるテキストです。
MANAGE PLUGINS
+asdf plugin add <name> [<git-url>] Add a plugin from the plugin repo OR,
+ add a Git repo as a plugin by
+ specifying the name and repo url
+asdf plugin list [--urls] [--refs] List installed plugins. Optionally show
+ git urls and git-ref
+asdf plugin list all List plugins registered on asdf-plugins
+ repository with URLs
+asdf plugin remove <name> Remove plugin and package versions
+asdf plugin update <name> [<git-ref>] Update a plugin to latest commit on
+ default branch or a particular git-ref
+asdf plugin update --all Update all plugins to latest commit on
+ default branch
+
+
+MANAGE PACKAGES
+asdf current Display current version set or being
+ used for all packages
+asdf current <name> Display current version set or being
+ used for package
+asdf global <name> <version> Set the package global version
+asdf global <name> latest[:<version>] Set the package global version to the
+ latest provided version
+asdf help <name> [<version>] Output documentation for plugin and tool
+asdf install Install all the package versions listed
+ in the .tool-versions file
+asdf install <name> Install one tool at the version
+ specified in the .tool-versions file
+asdf install <name> <version> Install a specific version of a package
+asdf install <name> latest[:<version>] Install the latest stable version of a
+ package, or with optional version,
+ install the latest stable version that
+ begins with the given string
+asdf latest <name> [<version>] Show latest stable version of a package
+asdf latest --all Show latest stable version of all the
+ packages and if they are installed
+asdf list <name> [version] List installed versions of a package and
+ optionally filter the versions
+asdf list all <name> [<version>] List all versions of a package and
+ optionally filter the returned versions
+asdf local <name> <version> Set the package local version
+asdf local <name> latest[:<version>] Set the package local version to the
+ latest provided version
+asdf shell <name> <version> Set the package version to
+ \`ASDF_\${LANG}_VERSION\` in the current shell
+asdf uninstall <name> <version> Remove a specific version of a package
+asdf where <name> [<version>] Display install path for an installed
+ or current version
+asdf which <command> Display the path to an executable
+
+
+UTILS
+asdf exec <command> [args...] Executes the command shim for current version
+asdf env <command> [util] Runs util (default: \`env\`) inside the
+ environment used for command shim execution.
+asdf info Print OS, Shell and ASDF debug information.
+asdf version Print the currently installed version of ASDF
+asdf reshim <name> <version> Recreate shims for version of a package
+asdf shim-versions <command> List the plugins and versions that
+ provide a command
+asdf update Update asdf to the latest stable release
+asdf update --head Update asdf to the latest on the master branch
+
+RESOURCES
+GitHub: https://github.com/asdf-vm/asdf
+Docs: https://asdf-vm.com
asdf
で利用可能なすべてのコマンドの一覧です。この一覧は、asdf help
コマンドで表示されるテキストです。
MANAGE PLUGINS
+asdf plugin add <name> [<git-url>] Add a plugin from the plugin repo OR,
+ add a Git repo as a plugin by
+ specifying the name and repo url
+asdf plugin list [--urls] [--refs] List installed plugins. Optionally show
+ git urls and git-ref
+asdf plugin list all List plugins registered on asdf-plugins
+ repository with URLs
+asdf plugin remove <name> Remove plugin and package versions
+asdf plugin update <name> [<git-ref>] Update a plugin to latest commit on
+ default branch or a particular git-ref
+asdf plugin update --all Update all plugins to latest commit on
+ default branch
+
+
+MANAGE PACKAGES
+asdf current Display current version set or being
+ used for all packages
+asdf current <name> Display current version set or being
+ used for package
+asdf global <name> <version> Set the package global version
+asdf global <name> latest[:<version>] Set the package global version to the
+ latest provided version
+asdf help <name> [<version>] Output documentation for plugin and tool
+asdf install Install all the package versions listed
+ in the .tool-versions file
+asdf install <name> Install one tool at the version
+ specified in the .tool-versions file
+asdf install <name> <version> Install a specific version of a package
+asdf install <name> latest[:<version>] Install the latest stable version of a
+ package, or with optional version,
+ install the latest stable version that
+ begins with the given string
+asdf latest <name> [<version>] Show latest stable version of a package
+asdf latest --all Show latest stable version of all the
+ packages and if they are installed
+asdf list <name> [version] List installed versions of a package and
+ optionally filter the versions
+asdf list all <name> [<version>] List all versions of a package and
+ optionally filter the returned versions
+asdf local <name> <version> Set the package local version
+asdf local <name> latest[:<version>] Set the package local version to the
+ latest provided version
+asdf shell <name> <version> Set the package version to
+ \`ASDF_\${LANG}_VERSION\` in the current shell
+asdf uninstall <name> <version> Remove a specific version of a package
+asdf where <name> [<version>] Display install path for an installed
+ or current version
+asdf which <command> Display the path to an executable
+
+
+UTILS
+asdf exec <command> [args...] Executes the command shim for current version
+asdf env <command> [util] Runs util (default: \`env\`) inside the
+ environment used for command shim execution.
+asdf info Print OS, Shell and ASDF debug information.
+asdf version Print the currently installed version of ASDF
+asdf reshim <name> <version> Recreate shims for version of a package
+asdf shim-versions <command> List the plugins and versions that
+ provide a command
+asdf update Update asdf to the latest stable release
+asdf update --head Update asdf to the latest on the master branch
+
+RESOURCES
+GitHub: https://github.com/asdf-vm/asdf
+Docs: https://asdf-vm.com
asdf
の構成設定には、他人と共有可能な.tool-versions
ファイルと、.asdfrc
や環境変数によってカスタマイズ可能なユーザ固有の設定とがあります。
.tool-versions
.tool-versions
ファイルがディレクトリに存在する場合、当該ディレクトリおよびサブディレクトリで、ファイル内で宣言しているツールのバージョンが使用されます。
備考
グローバルのデフォルト値は、$HOME/.tool-versions
ファイルで設定できます。
.tool-versions
ファイル内は下記のような記述となっています:
ruby 2.5.3
+nodejs 10.15.0
コメントを含めることもできます:
ruby 2.5.3 # This is a comment
+# This is another comment
+nodejs 10.15.0
バージョンの表記は下記の形式があります:
10.15.0
- 実バージョンの表記です。バイナリのダウンロードに対応しているプラグインの場合、バイナリがダウンロードされます。ref:v1.0.2-a
or ref:39cb398vb39
- 指定されたタグ/コミット/ブランチをgithubからダウンロードし、コンパイルされます。path:~/src/elixir
- 使用するツールをカスタムコンパイルしたバージョンへのパスです。言語開発者などが使用します。system
- このキーワードを指定した場合、asdfが管理していない、システム上のツールバージョンへパススルーします。ヒント
スペースで区切れば、複数のバージョンを指定できます。例えば、Python 3.7.2
を使用し、Python 2.7.15
にフォールバックし、最終的にsystem
のPythonにフォールバックさせるには、.tool-versions
に下記の行を追記します。
python 3.7.2 2.7.15 system
.tool-versions
ファイルで定義されているすべてのツールをインストールするには、.tool-versions
ファイルを含むディレクトリで、asdf install
コマンドを引数を指定せずに実行します。
.tool-versions
ファイルで定義されている単一のツールをインストールするには、.tool-versions
ファイルを含むディレクトリで、asdf install <name>
コマンドを実行します。ツールは、.tool-versions
ファイルで指定されたバージョンでインストールされます。
ファイルは、直接編集するか、asdf local
コマンド(またはasdf global
コマンド)を使用して更新してください。
.asdfrc
.asdfrc
では、ユーザのマシン固有の構成を設定します。
asdfはデフォルトで\${HOME}/.asdfrc
に構成ファイルを配置します。ファイルの場所は、ASDF_CONFIG_FILE
環境変数で設定できます。
下記は、構成に必要な項目とそのデフォルト値を示しています:
legacy_version_file = no
+use_release_candidates = no
+always_keep_download = no
+plugin_repository_last_check_duration = 60
+disable_plugin_short_name_repository = no
+concurrency = auto
legacy_version_file
対応しているプラグインの場合、他のバージョンマネージャで使用されているバージョンファイルを読み込むことができます。例えば、Rubyのrbenv
であれば.ruby-version
ファイルを読み込みます。
同期は、以下のコマンドが実行されたときに発生します:
asdf plugin add <name>
asdf plugin list all
asdf plugin add <name> <git-url>
コマンドでは、プラグインの同期はトリガーされません。
備考
値をnever
にしても、プラグインリポジトリの初期同期は停止されません。この動作については、disable_plugin_short_name_repository
の節をご覧ください。
disable_plugin_short_name_repository
asdfプラグインのショートネームリポジトリの同期を無効化します。ショートネームリポジトリが無効となっている場合、同期イベントはすぐに終了します。
',6)),e("table",x,[t[31]||(t[31]=e("thead",null,[e("tr",null,[e("th",{style:{"text-align":"left"}},"オプション"),e("th",{style:{"text-align":"left"}},"説明")])],-1)),e("tbody",null,[e("tr",null,[e("td",_,[t[27]||(t[27]=e("code",null,"no",-1)),t[28]||(t[28]=l()),o(d,{type:"tip",text:"デフォルト",vertical:"middle"})]),t[29]||(t[29]=e("td",{style:{"text-align":"left"}},"同期イベントが発生した際に、asdfプラグインリポジトリをクローンまたは更新します",-1))]),t[30]||(t[30]=e("tr",null,[e("td",{style:{"text-align":"left"}},[e("code",null,"yes")]),e("td",{style:{"text-align":"left"}},"プラグインショートネームリポジトリを無効化します")],-1))])]),t[40]||(t[40]=a('同期は、以下のコマンドが実行されたときに発生します:
asdf plugin add <name>
asdf plugin list all
asdf plugin add <name> <git-url>
コマンドでは、プラグインの同期はトリガーされません。
備考
プラグインショートネームリポジトリを無効化しても、すでに同期されたリポジトリは削除されません。プラグインリポジトリを削除するには、rm --recursive --trash $ASDF_DATA_DIR/repository
コマンドを実行してください。
また、プラグインショートネームリポジトリを無効化しても、以前にこのソースからインストールされたプラグインは削除されません。プラグインを削除するには、asdf plugin remove <name>
コマンドを実行してください。プラグインを削除すると、そのプラグインでインストールされたすべてのツールバージョンが削除されます。
concurrency
コンパイル時に使用するデフォルトのコア数です。
Options | Description |
---|---|
整数値 | ソースコードのコンパイル時に使用するコア数です |
auto | nproc 、sysctl hw.ncpu 、/proc/cpuinfo 、または1 、の優先順でコア数を計算します |
備考: ASDF_CONCURRENCY
環境変数が設定されている場合はそちらが優先されます。
下記のタイミングで、カスタムコードを実行することができます:
例えば、foo
というプラグインがインストールされていて、bar
という実行可能ファイルが提供されている場合、以下のようなフックを使うことで、一番最初にカスタムコードを実行することができます:
pre_foo_bar = echo Executing with args: $@
以下のパターンがサポートされています:
pre_<plugin_name>_<command>
pre_asdf_download_<plugin_name>
{pre,post}_asdf_{install,reshim,uninstall}_<plugin_name>
$1
: フルバージョン{pre,post}_asdf_plugin_{add,update,remove,reshim}
$1
: プラグイン名{pre,post}_asdf_plugin_{add,update,remove}_<plugin_name>
どのようなコマンドの前後にどのようなコマンドフックを実行すべきかについての詳細は、プラグインの作成をご覧ください。
環境変数の設定値は、お使いのシステムやシェルによって異なります。デフォルトロケーションは、インストールした場所や方法(Gitクローン、Homebrew、AUR)によって異なります。
環境変数は通常、asdf.sh
/asdf.fish
などをsourceする前に設定する必要があります。Elvishの場合は、use asdf
の上側に設定します。
以下では、Bashシェルでの使用方法について説明します。
ASDF_CONFIG_FILE
.asdfrc
構成ファイルへのパスです。任意の場所に設定できます。必ず絶対パスで設定してください。
$HOME/.asdfrc
の値が使用されます。export ASDF_CONFIG_FILE=/home/john_doe/.config/asdf/.asdfrc
ASDF_DEFAULT_TOOL_VERSIONS_FILENAME
ツール名とバージョンの情報を格納するファイルのファイル名です。有効なファイル名であれば何でも設定できます。通常、.tool-versions
ファイルを無視したい場合を除き、この値を変更するべきではありません。
.tool-versions
の値が使用されます。export ASDF_DEFAULT_TOOL_VERSIONS_FILENAME=tool_versions
ASDF_DIR
asdf
のコアスクリプト場所です。任意の場所に設定できます。必ず絶対パスで設定してください。
bin/asdf
実行ファイルの親ディレクトリが使用されます。export ASDF_DIR=/home/john_doe/.config/asdf
ASDF_DATA_DIR
asdf
がプラグイン、Shim、ツールのバージョンをインストールする場所です。任意の場所に設定できます。必ず絶対パスで設定してください。
$HOME/.asdf
ディレクトリが存在すればその場所、存在しない場合はASDF_DIR
の値を使用します。export ASDF_DATA_DIR=/home/john_doe/.asdf
ASDF_CONCURRENCY
ソースコードのコンパイル時に使用するコア数です。この環境変数の値は、asdf構成ファイルのconcurrency
の値よりも優先されます。
concurrency
の値が使用されます。export ASDF_CONCURRENCY=32
ASDF_FORCE_PREPEND
asdf
のShimやパスのディレクトリをPATH
の先頭(最高優先度)に追加するかどうかを設定します。
yes
、その他のシステムでのデフォルト値はno
です。yes
の場合: asdf
ディレクトリを強制的にPATH
の先頭に配置します。yes
以外の文字列を設定した場合: asdf
ディレクトリを強制的にPATH
の先頭に配置することは しません 。ASDF_FORCE_PREPEND=no . "<path-to-asdf-directory>/asdf.sh"
下記のように、asdfをシンプルにセットアップしたとします:
$HOME/.asdf
.asdfrc
ファイルは何もカスタマイズしていないすると、結果として以下のような構成となります:
構成 | 値 | 値がセットされる過程 |
---|---|---|
config file location | $HOME/.asdfrc | ASDF_CONFIG_FILE は空なので、$HOME/.asdfrc が使用されます。 |
default tool versions filename | .tool-versions | ASDF_DEFAULT_TOOL_VERSIONS_FILENAME は空なので、.tool-versions が使用されます。 |
asdf dir | $HOME/.asdf | ASDF_DIR は空なので、bin/asdf の親ディレクトリが使用されます。 |
asdf data dir | $HOME/.asdf | ASDF_DATA_DIR は空であり、$HOME が存在するので、$HOME/.asdf が使用されます。 |
concurrency | auto | ASDF_CONCURRENCY は空なので、デフォルト構成のconcurrency の値に依存します。 |
legacy_version_file | no | .asdfrc をカスタマイズしていないので、デフォルト構成を使用します。 |
use_release_candidates | no | .asdfrc をカスタマイズしていないので、デフォルト構成を使用します。 |
always_keep_download | no | .asdfrc をカスタマイズしていないので、デフォルト構成を使用します。 |
plugin_repository_last_check_duration | 60 | .asdfrc をカスタマイズしていないので、デフォルト構成を使用します。 |
disable_plugin_short_name_repository | no | .asdfrc をカスタマイズしていないので、デフォルト構成を使用します。 |
この節では、パッケージマネージャやインテグレータ向けのasdf
の内部構成について記述しているため、ユーザが気にする必要はありません。
$ASDF_DIR/asdf_updates_disabled
: このファイルが存在する場合、asdf update
コマンドによる更新は無効になります(ファイル内容は関係ありません)。これは、PacmanやHomebrewのようなパッケージマネージャによって使用され、特定のインストールに対して正しい更新方法を適用するようにします。asdf
の構成設定には、他人と共有可能な.tool-versions
ファイルと、.asdfrc
や環境変数によってカスタマイズ可能なユーザ固有の設定とがあります。
.tool-versions
.tool-versions
ファイルがディレクトリに存在する場合、当該ディレクトリおよびサブディレクトリで、ファイル内で宣言しているツールのバージョンが使用されます。
備考
グローバルのデフォルト値は、$HOME/.tool-versions
ファイルで設定できます。
.tool-versions
ファイル内は下記のような記述となっています:
ruby 2.5.3
+nodejs 10.15.0
コメントを含めることもできます:
ruby 2.5.3 # This is a comment
+# This is another comment
+nodejs 10.15.0
バージョンの表記は下記の形式があります:
10.15.0
- 実バージョンの表記です。バイナリのダウンロードに対応しているプラグインの場合、バイナリがダウンロードされます。ref:v1.0.2-a
or ref:39cb398vb39
- 指定されたタグ/コミット/ブランチをgithubからダウンロードし、コンパイルされます。path:~/src/elixir
- 使用するツールをカスタムコンパイルしたバージョンへのパスです。言語開発者などが使用します。system
- このキーワードを指定した場合、asdfが管理していない、システム上のツールバージョンへパススルーします。ヒント
スペースで区切れば、複数のバージョンを指定できます。例えば、Python 3.7.2
を使用し、Python 2.7.15
にフォールバックし、最終的にsystem
のPythonにフォールバックさせるには、.tool-versions
に下記の行を追記します。
python 3.7.2 2.7.15 system
.tool-versions
ファイルで定義されているすべてのツールをインストールするには、.tool-versions
ファイルを含むディレクトリで、asdf install
コマンドを引数を指定せずに実行します。
.tool-versions
ファイルで定義されている単一のツールをインストールするには、.tool-versions
ファイルを含むディレクトリで、asdf install <name>
コマンドを実行します。ツールは、.tool-versions
ファイルで指定されたバージョンでインストールされます。
ファイルは、直接編集するか、asdf local
コマンド(またはasdf global
コマンド)を使用して更新してください。
.asdfrc
.asdfrc
では、ユーザのマシン固有の構成を設定します。
asdfはデフォルトで\${HOME}/.asdfrc
に構成ファイルを配置します。ファイルの場所は、ASDF_CONFIG_FILE
環境変数で設定できます。
下記は、構成に必要な項目とそのデフォルト値を示しています:
legacy_version_file = no
+use_release_candidates = no
+always_keep_download = no
+plugin_repository_last_check_duration = 60
+disable_plugin_short_name_repository = no
+concurrency = auto
legacy_version_file
対応しているプラグインの場合、他のバージョンマネージャで使用されているバージョンファイルを読み込むことができます。例えば、Rubyのrbenv
であれば.ruby-version
ファイルを読み込みます。
同期は、以下のコマンドが実行されたときに発生します:
asdf plugin add <name>
asdf plugin list all
asdf plugin add <name> <git-url>
コマンドでは、プラグインの同期はトリガーされません。
備考
値をnever
にしても、プラグインリポジトリの初期同期は停止されません。この動作については、disable_plugin_short_name_repository
の節をご覧ください。
disable_plugin_short_name_repository
asdfプラグインのショートネームリポジトリの同期を無効化します。ショートネームリポジトリが無効となっている場合、同期イベントはすぐに終了します。
',6)),e("table",x,[t[31]||(t[31]=e("thead",null,[e("tr",null,[e("th",{style:{"text-align":"left"}},"オプション"),e("th",{style:{"text-align":"left"}},"説明")])],-1)),e("tbody",null,[e("tr",null,[e("td",_,[t[27]||(t[27]=e("code",null,"no",-1)),t[28]||(t[28]=l()),o(d,{type:"tip",text:"デフォルト",vertical:"middle"})]),t[29]||(t[29]=e("td",{style:{"text-align":"left"}},"同期イベントが発生した際に、asdfプラグインリポジトリをクローンまたは更新します",-1))]),t[30]||(t[30]=e("tr",null,[e("td",{style:{"text-align":"left"}},[e("code",null,"yes")]),e("td",{style:{"text-align":"left"}},"プラグインショートネームリポジトリを無効化します")],-1))])]),t[40]||(t[40]=a('同期は、以下のコマンドが実行されたときに発生します:
asdf plugin add <name>
asdf plugin list all
asdf plugin add <name> <git-url>
コマンドでは、プラグインの同期はトリガーされません。
備考
プラグインショートネームリポジトリを無効化しても、すでに同期されたリポジトリは削除されません。プラグインリポジトリを削除するには、rm --recursive --trash $ASDF_DATA_DIR/repository
コマンドを実行してください。
また、プラグインショートネームリポジトリを無効化しても、以前にこのソースからインストールされたプラグインは削除されません。プラグインを削除するには、asdf plugin remove <name>
コマンドを実行してください。プラグインを削除すると、そのプラグインでインストールされたすべてのツールバージョンが削除されます。
concurrency
コンパイル時に使用するデフォルトのコア数です。
Options | Description |
---|---|
整数値 | ソースコードのコンパイル時に使用するコア数です |
auto | nproc 、sysctl hw.ncpu 、/proc/cpuinfo 、または1 、の優先順でコア数を計算します |
備考: ASDF_CONCURRENCY
環境変数が設定されている場合はそちらが優先されます。
下記のタイミングで、カスタムコードを実行することができます:
例えば、foo
というプラグインがインストールされていて、bar
という実行可能ファイルが提供されている場合、以下のようなフックを使うことで、一番最初にカスタムコードを実行することができます:
pre_foo_bar = echo Executing with args: $@
以下のパターンがサポートされています:
pre_<plugin_name>_<command>
pre_asdf_download_<plugin_name>
{pre,post}_asdf_{install,reshim,uninstall}_<plugin_name>
$1
: フルバージョン{pre,post}_asdf_plugin_{add,update,remove,reshim}
$1
: プラグイン名{pre,post}_asdf_plugin_{add,update,remove}_<plugin_name>
どのようなコマンドの前後にどのようなコマンドフックを実行すべきかについての詳細は、プラグインの作成をご覧ください。
環境変数の設定値は、お使いのシステムやシェルによって異なります。デフォルトロケーションは、インストールした場所や方法(Gitクローン、Homebrew、AUR)によって異なります。
環境変数は通常、asdf.sh
/asdf.fish
などをsourceする前に設定する必要があります。Elvishの場合は、use asdf
の上側に設定します。
以下では、Bashシェルでの使用方法について説明します。
ASDF_CONFIG_FILE
.asdfrc
構成ファイルへのパスです。任意の場所に設定できます。必ず絶対パスで設定してください。
$HOME/.asdfrc
の値が使用されます。export ASDF_CONFIG_FILE=/home/john_doe/.config/asdf/.asdfrc
ASDF_DEFAULT_TOOL_VERSIONS_FILENAME
ツール名とバージョンの情報を格納するファイルのファイル名です。有効なファイル名であれば何でも設定できます。通常、.tool-versions
ファイルを無視したい場合を除き、この値を変更するべきではありません。
.tool-versions
の値が使用されます。export ASDF_DEFAULT_TOOL_VERSIONS_FILENAME=tool_versions
ASDF_DIR
asdf
のコアスクリプト場所です。任意の場所に設定できます。必ず絶対パスで設定してください。
bin/asdf
実行ファイルの親ディレクトリが使用されます。export ASDF_DIR=/home/john_doe/.config/asdf
ASDF_DATA_DIR
asdf
がプラグイン、Shim、ツールのバージョンをインストールする場所です。任意の場所に設定できます。必ず絶対パスで設定してください。
$HOME/.asdf
ディレクトリが存在すればその場所、存在しない場合はASDF_DIR
の値を使用します。export ASDF_DATA_DIR=/home/john_doe/.asdf
ASDF_CONCURRENCY
ソースコードのコンパイル時に使用するコア数です。この環境変数の値は、asdf構成ファイルのconcurrency
の値よりも優先されます。
concurrency
の値が使用されます。export ASDF_CONCURRENCY=32
ASDF_FORCE_PREPEND
asdf
のShimやパスのディレクトリをPATH
の先頭(最高優先度)に追加するかどうかを設定します。
yes
、その他のシステムでのデフォルト値はno
です。yes
の場合: asdf
ディレクトリを強制的にPATH
の先頭に配置します。yes
以外の文字列を設定した場合: asdf
ディレクトリを強制的にPATH
の先頭に配置することは しません 。ASDF_FORCE_PREPEND=no . "<path-to-asdf-directory>/asdf.sh"
下記のように、asdfをシンプルにセットアップしたとします:
$HOME/.asdf
.asdfrc
ファイルは何もカスタマイズしていないすると、結果として以下のような構成となります:
構成 | 値 | 値がセットされる過程 |
---|---|---|
config file location | $HOME/.asdfrc | ASDF_CONFIG_FILE は空なので、$HOME/.asdfrc が使用されます。 |
default tool versions filename | .tool-versions | ASDF_DEFAULT_TOOL_VERSIONS_FILENAME は空なので、.tool-versions が使用されます。 |
asdf dir | $HOME/.asdf | ASDF_DIR は空なので、bin/asdf の親ディレクトリが使用されます。 |
asdf data dir | $HOME/.asdf | ASDF_DATA_DIR は空であり、$HOME が存在するので、$HOME/.asdf が使用されます。 |
concurrency | auto | ASDF_CONCURRENCY は空なので、デフォルト構成のconcurrency の値に依存します。 |
legacy_version_file | no | .asdfrc をカスタマイズしていないので、デフォルト構成を使用します。 |
use_release_candidates | no | .asdfrc をカスタマイズしていないので、デフォルト構成を使用します。 |
always_keep_download | no | .asdfrc をカスタマイズしていないので、デフォルト構成を使用します。 |
plugin_repository_last_check_duration | 60 | .asdfrc をカスタマイズしていないので、デフォルト構成を使用します。 |
disable_plugin_short_name_repository | no | .asdfrc をカスタマイズしていないので、デフォルト構成を使用します。 |
この節では、パッケージマネージャやインテグレータ向けのasdf
の内部構成について記述しているため、ユーザが気にする必要はありません。
$ASDF_DIR/asdf_updates_disabled
: このファイルが存在する場合、asdf update
コマンドによる更新は無効になります(ファイル内容は関係ありません)。これは、PacmanやHomebrewのようなパッケージマネージャによって使用され、特定のインストールに対して正しい更新方法を適用するようにします。コアとなるasdf
のコマンドはかなり少量ですが、多くのワークフローを円滑に進めることができます。
はじめようのガイドで説明されています。
asdf exec <command> [args...]
現在のバージョンのShimでコマンドを実行します。
asdf env <command> [util]
asdf info
OS、シェル、およびasdf
のデバッグ情報を表示するヘルパーコマンドです。バグレポート作成時に共有してください。
asdf reshim <name> <version>
特定のパッケージ・バージョンのShimを再作成します。デフォルトでは、Shimはプラグインによってツールのインストール中に作成されます。npm CLIなどのツールは、実行ファイルをグローバルインストールができます(例:npm install -g yarn
コマンドでYarnをインストール)が、これらの実行ファイルはプラグインのライフサイクルを通してインストールされないため、Shimはまだ存在しません。そのような時に、例えばasdf reshim nodejs <version>
を実行すると、nodejs
の<version>
に対して、yarn
のような新しい実行ファイルのShimを強制的に再作成させることができます。
asdf shim-versions <command>
<command>
のShimを提供するプラグインおよびバージョンを一覧で表示します。
例えば、Node.jsにはnode
とnpm
という2つの実行ファイルが提供されています。asdf-nodejs
プラグインで、複数のバージョンのツールがインストールされている場合、shim-versions
は下記のような一覧を返します:
➜ asdf shim-versions node
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
➜ asdf shim-versions npm
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
asdf
には、Git依存のアップデートコマンドが用意されています(推奨されるインストール方法を使用した場合)。別の方法でインストールした場合、その方法の手順に従ってください:
方法 | 最新の安定リリース | master ブランチの最新コミット |
---|---|---|
asdf (Git経由) | asdf update | asdf update --head |
Homebrew | brew upgrade asdf | brew upgrade asdf --fetch-HEAD |
Pacman | 新しいPKGBUILD をダウンロードしてリビルド、または好みのAURヘルパーを使用 |
asdf
をアンインストールするには以下の手順に従ってください:
~/.bashrc
で、asdf.sh
およびコマンド補完をsourceしている行を削除します:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
ディレクトリを削除します:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bash_profile
で、asdf.sh
およびコマンド補完をsourceしている行を削除します:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
ディレクトリを削除します:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
で、asdf.sh
およびコマンド補完をsourceしている行を削除します:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
コマンド補完については、Homebrewで説明されている方法で設定されている可能性があるため、そちらのガイドに従って削除する行を見つけてください。
brew uninstall asdf --force
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
macOS Catalina以降では、デフォルトのシェルがZSHに変更されました。もし、~/.bash_profile
に設定が見つからない場合は、~/.zshrc
にある可能性があります。その場合は、ZSHの手順をご覧ください。
~/.bash_profile
で、asdf.sh
およびコマンド補完をsourceしている行を削除します:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
コマンド補完については、Homebrewで説明されている方法で設定されている可能性があるため、そちらのガイドに従って削除する行を見つけてください。
brew uninstall asdf --force
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
で、asdf.sh
およびコマンド補完をsourceしている行を削除します:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
ディレクトリを削除します:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
で、asdf.fish
をsourceしている行を削除します:source ~/.asdf/asdf.fish
そして、次のコマンドで、コマンド補完を削除します:
rm -rf ~/.config/fish/completions/asdf.fish
$HOME/.asdf
ディレクトリを削除します:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
で、asdf.fish
をsourceしている行を削除します:source "(brew --prefix asdf)"/libexec/asdf.fish
brew uninstall asdf --force
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
で、asdf.fish
をsourceしている行を削除します:source /opt/asdf-vm/asdf.fish
pacman -Rs asdf-vm
$HOME/.asdf
ディレクトリを削除します:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
で、asdf
モジュールを使用している行を削除します:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
そして、次のコマンドで、asdf
モジュールを削除します:
rm -f ~/.config/elvish/lib/asdf.elv
$HOME/.asdf
ディレクトリを削除します:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
で、asdf
モジュールを使用している行を削除します:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
そして、次のコマンドで、asdf
モジュールを削除します:
rm -f ~/.config/elvish/lib/asdf.elv
brew uninstall asdf --force
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
で、asdf
モジュールを使用している行を削除します:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
そして、次のコマンドで、asdf
モジュールを削除します:
rm -f ~/.config/elvish/lib/asdf.elv
pacman -Rs asdf-vm
$HOME/.asdf
ディレクトリを削除します:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
で、asdf.sh
およびコマンド補完をsourceしている行を削除します:. "$HOME/.asdf/asdf.sh"
+# ...
+fpath=(\${ASDF_DIR}/completions $fpath)
+autoload -Uz compinit
+compinit
または、ZSHフレームワークプラグインを使用します。
$HOME/.asdf
ディレクトリを削除します:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
で、asdf.sh
をsourceしている行を削除します:. $(brew --prefix asdf)/libexec/asdf.sh
brew uninstall asdf --force && brew autoremove
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
で、asdf.sh
をsourceしている行を削除します:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
ディレクトリを削除します:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
たったこれだけです! 🎉
`,41)]))}const F=i(h,[["render",e]]);export{c as __pageData,F as default}; diff --git a/assets/ja-jp_manage_core.md.DkSs_n4l.lean.js b/assets/ja-jp_manage_core.md.DkSs_n4l.lean.js new file mode 100644 index 00000000..e6646634 --- /dev/null +++ b/assets/ja-jp_manage_core.md.DkSs_n4l.lean.js @@ -0,0 +1,18 @@ +import{_ as i,c as a,a2 as l,o as t}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"コア","description":"","frontmatter":{},"headers":[],"relativePath":"ja-jp/manage/core.md","filePath":"ja-jp/manage/core.md","lastUpdated":1704890757000}'),h={name:"ja-jp/manage/core.md"};function e(n,s,p,k,d,o){return t(),a("div",null,s[0]||(s[0]=[l(`コアとなるasdf
のコマンドはかなり少量ですが、多くのワークフローを円滑に進めることができます。
はじめようのガイドで説明されています。
asdf exec <command> [args...]
現在のバージョンのShimでコマンドを実行します。
asdf env <command> [util]
asdf info
OS、シェル、およびasdf
のデバッグ情報を表示するヘルパーコマンドです。バグレポート作成時に共有してください。
asdf reshim <name> <version>
特定のパッケージ・バージョンのShimを再作成します。デフォルトでは、Shimはプラグインによってツールのインストール中に作成されます。npm CLIなどのツールは、実行ファイルをグローバルインストールができます(例:npm install -g yarn
コマンドでYarnをインストール)が、これらの実行ファイルはプラグインのライフサイクルを通してインストールされないため、Shimはまだ存在しません。そのような時に、例えばasdf reshim nodejs <version>
を実行すると、nodejs
の<version>
に対して、yarn
のような新しい実行ファイルのShimを強制的に再作成させることができます。
asdf shim-versions <command>
<command>
のShimを提供するプラグインおよびバージョンを一覧で表示します。
例えば、Node.jsにはnode
とnpm
という2つの実行ファイルが提供されています。asdf-nodejs
プラグインで、複数のバージョンのツールがインストールされている場合、shim-versions
は下記のような一覧を返します:
➜ asdf shim-versions node
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
➜ asdf shim-versions npm
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
asdf
には、Git依存のアップデートコマンドが用意されています(推奨されるインストール方法を使用した場合)。別の方法でインストールした場合、その方法の手順に従ってください:
方法 | 最新の安定リリース | master ブランチの最新コミット |
---|---|---|
asdf (Git経由) | asdf update | asdf update --head |
Homebrew | brew upgrade asdf | brew upgrade asdf --fetch-HEAD |
Pacman | 新しいPKGBUILD をダウンロードしてリビルド、または好みのAURヘルパーを使用 |
asdf
をアンインストールするには以下の手順に従ってください:
~/.bashrc
で、asdf.sh
およびコマンド補完をsourceしている行を削除します:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
ディレクトリを削除します:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bash_profile
で、asdf.sh
およびコマンド補完をsourceしている行を削除します:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
ディレクトリを削除します:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
で、asdf.sh
およびコマンド補完をsourceしている行を削除します:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
コマンド補完については、Homebrewで説明されている方法で設定されている可能性があるため、そちらのガイドに従って削除する行を見つけてください。
brew uninstall asdf --force
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
macOS Catalina以降では、デフォルトのシェルがZSHに変更されました。もし、~/.bash_profile
に設定が見つからない場合は、~/.zshrc
にある可能性があります。その場合は、ZSHの手順をご覧ください。
~/.bash_profile
で、asdf.sh
およびコマンド補完をsourceしている行を削除します:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
コマンド補完については、Homebrewで説明されている方法で設定されている可能性があるため、そちらのガイドに従って削除する行を見つけてください。
brew uninstall asdf --force
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
で、asdf.sh
およびコマンド補完をsourceしている行を削除します:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
ディレクトリを削除します:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
で、asdf.fish
をsourceしている行を削除します:source ~/.asdf/asdf.fish
そして、次のコマンドで、コマンド補完を削除します:
rm -rf ~/.config/fish/completions/asdf.fish
$HOME/.asdf
ディレクトリを削除します:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
で、asdf.fish
をsourceしている行を削除します:source "(brew --prefix asdf)"/libexec/asdf.fish
brew uninstall asdf --force
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
で、asdf.fish
をsourceしている行を削除します:source /opt/asdf-vm/asdf.fish
pacman -Rs asdf-vm
$HOME/.asdf
ディレクトリを削除します:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
で、asdf
モジュールを使用している行を削除します:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
そして、次のコマンドで、asdf
モジュールを削除します:
rm -f ~/.config/elvish/lib/asdf.elv
$HOME/.asdf
ディレクトリを削除します:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
で、asdf
モジュールを使用している行を削除します:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
そして、次のコマンドで、asdf
モジュールを削除します:
rm -f ~/.config/elvish/lib/asdf.elv
brew uninstall asdf --force
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
で、asdf
モジュールを使用している行を削除します:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
そして、次のコマンドで、asdf
モジュールを削除します:
rm -f ~/.config/elvish/lib/asdf.elv
pacman -Rs asdf-vm
$HOME/.asdf
ディレクトリを削除します:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
で、asdf.sh
およびコマンド補完をsourceしている行を削除します:. "$HOME/.asdf/asdf.sh"
+# ...
+fpath=(\${ASDF_DIR}/completions $fpath)
+autoload -Uz compinit
+compinit
または、ZSHフレームワークプラグインを使用します。
$HOME/.asdf
ディレクトリを削除します:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
で、asdf.sh
をsourceしている行を削除します:. $(brew --prefix asdf)/libexec/asdf.sh
brew uninstall asdf --force && brew autoremove
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
で、asdf.sh
をsourceしている行を削除します:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
ディレクトリを削除します:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
のすべての構成ファイルを削除するために次のコマンドを実行します:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
たったこれだけです! 🎉
`,41)]))}const F=i(h,[["render",e]]);export{c as __pageData,F as default}; diff --git a/assets/ja-jp_manage_plugins.md.Dveizso5.js b/assets/ja-jp_manage_plugins.md.Dveizso5.js new file mode 100644 index 00000000..bb2ade41 --- /dev/null +++ b/assets/ja-jp_manage_plugins.md.Dveizso5.js @@ -0,0 +1,11 @@ +import{_ as a,c as i,a2 as l,o as e}from"./chunks/framework.BQmytedh.js";const g=JSON.parse('{"title":"プラグイン","description":"","frontmatter":{},"headers":[],"relativePath":"ja-jp/manage/plugins.md","filePath":"ja-jp/manage/plugins.md","lastUpdated":1704890757000}'),t={name:"ja-jp/manage/plugins.md"};function n(h,s,p,d,k,r){return e(),i("div",null,s[0]||(s[0]=[l(`プラグインは、asdf
がNode.jsやRuby、Elixirなどの様々なツールを取り扱えるようにするためのものです。
様々なツールをサポートするために使用されるプラグインAPIについては、プラグインの作成をご覧ください。
下記コマンドでは、GitのURLからプラグインを追加します:
asdf plugin add <name> <git-url>
+# asdf plugin add elm https://github.com/vic/asdf-elm
または下記のコマンドで、プラグインリポジトリのショートネームを指定して追加します:
asdf plugin add <name>
+# asdf plugin add erlang
推奨
リポジトリのショートネームに依存しないために、git-url
を使用することを推奨します。
asdf plugin list
+# asdf plugin list
+# java
+# nodejs
asdf plugin list --urls
+# asdf plugin list
+# java https://github.com/halcyon/asdf-java.git
+# nodejs https://github.com/asdf-vm/asdf-nodejs.git
asdf plugin list all
全プラグインのショートネーム一覧については、プラグインショートネームの一覧もご覧ください。
asdf plugin update --all
特定のプラグインパッケージを更新したい場合は、下記のように指定してください。
asdf plugin update <name>
+# asdf plugin update erlang
この更新コマンドは、プラグインリポジトリの origin の デフォルトブランチ における 最新コミット を取得します。バージョニングされたプラグインの更新機能については、現在開発中です(#916)。
asdf plugin remove <name>
+# asdf plugin remove erlang
プラグインを削除すると、当該プラグインでインストールされたすべてのツールが削除されます。これは、各ツールの未使用バージョンを手っ取り早くクリーンアップ/プルーニングするのに有用です。
ショートネームリポジトリはローカルマシンに同期され、定期的に更新されます。同期のタイミングの条件は、次のとおりです:
asdf plugin add <name>
asdf plugin list all
disable_plugin_short_name_repository
オプションがyes
の場合、同期は中止されます。詳しくはasdfの構成設定のリファレンスをご覧ください。X
分の間に同期が行われていない場合、同期が開始されます。 X
のデフォルト値は60
ですが、.asdfrc
ファイルのplugin_repository_last_check_duration
オプションで変更することができます。詳しくはasdfの構成設定のリファレンスをご覧ください。プラグインは、asdf
がNode.jsやRuby、Elixirなどの様々なツールを取り扱えるようにするためのものです。
様々なツールをサポートするために使用されるプラグインAPIについては、プラグインの作成をご覧ください。
下記コマンドでは、GitのURLからプラグインを追加します:
asdf plugin add <name> <git-url>
+# asdf plugin add elm https://github.com/vic/asdf-elm
または下記のコマンドで、プラグインリポジトリのショートネームを指定して追加します:
asdf plugin add <name>
+# asdf plugin add erlang
推奨
リポジトリのショートネームに依存しないために、git-url
を使用することを推奨します。
asdf plugin list
+# asdf plugin list
+# java
+# nodejs
asdf plugin list --urls
+# asdf plugin list
+# java https://github.com/halcyon/asdf-java.git
+# nodejs https://github.com/asdf-vm/asdf-nodejs.git
asdf plugin list all
全プラグインのショートネーム一覧については、プラグインショートネームの一覧もご覧ください。
asdf plugin update --all
特定のプラグインパッケージを更新したい場合は、下記のように指定してください。
asdf plugin update <name>
+# asdf plugin update erlang
この更新コマンドは、プラグインリポジトリの origin の デフォルトブランチ における 最新コミット を取得します。バージョニングされたプラグインの更新機能については、現在開発中です(#916)。
asdf plugin remove <name>
+# asdf plugin remove erlang
プラグインを削除すると、当該プラグインでインストールされたすべてのツールが削除されます。これは、各ツールの未使用バージョンを手っ取り早くクリーンアップ/プルーニングするのに有用です。
ショートネームリポジトリはローカルマシンに同期され、定期的に更新されます。同期のタイミングの条件は、次のとおりです:
asdf plugin add <name>
asdf plugin list all
disable_plugin_short_name_repository
オプションがyes
の場合、同期は中止されます。詳しくはasdfの構成設定のリファレンスをご覧ください。X
分の間に同期が行われていない場合、同期が開始されます。 X
のデフォルト値は60
ですが、.asdfrc
ファイルのplugin_repository_last_check_duration
オプションで変更することができます。詳しくはasdfの構成設定のリファレンスをご覧ください。asdf install <name> <version>
+# asdf install erlang 17.3
プラグインが、ソースコードからのダウンロード・コンパイルをサポートしている場合、ref:foo
の形式(foo
は特定のブランチ、タグ、またはコミット)でバージョンを指定できます。アンインストールするときも、同じ名前とバージョンを指定する必要があります。
asdf install <name> latest
+# asdf install erlang latest
下記のように、特定のプレフィックスでの最新安定バージョンをインストールすることもできます。
asdf install <name> latest:<version>
+# asdf install erlang latest:17
asdf list <name>
+# asdf list erlang
下記のように、特定のプレフィックスでのバージョンでフィルタすることもできます。
asdf list <name> <version>
+# asdf list erlang 17
asdf list all <name>
+# asdf list all erlang
下記のように、特定のプレフィックスでのバージョンでフィルタすることもできます。
asdf list all <name> <version>
+# asdf list all erlang 17
asdf latest <name>
+# asdf latest erlang
下記のように、特定のプレフィックスでの最新安定バージョンで表示することもできます。
asdf latest <name> <version>
+# asdf latest erlang 17
asdf global <name> <version> [<version>...]
+asdf shell <name> <version> [<version>...]
+asdf local <name> <version> [<version>...]
+# asdf global elixir 1.2.4
+
+asdf global <name> latest[:<version>]
+asdf local <name> latest[:<version>]
+# asdf global elixir latest
global
の場合、バージョンは$HOME/.tool-versions
ファイルに書き込まれます。
shell
の場合、バージョンはASDF_\${TOOL}_VERSION
という環境変数に設定され、現在のシェルセッションでのみ有効となります。
local
の場合、バージョンは$PWD/.tool-versions
ファイルに書き込まれます。存在しない場合は作成されます。
.tool-versions
ファイルについて詳しくは、構成設定のリファレンスをご覧ください。
代替手段
現在のシェルセッションでのみバージョンを設定したい場合、 または、特定のツールバージョンでコマンドを実行するだけのためにバージョンを設定したい場合は、 ASDF_\${TOOL}_VERSION
という環境変数で設定することができます。
下記の例では、バージョン1.4.0
のElixirプロジェクトに対して、テストを実行させています。 バージョンの表記形式は、.tool-versions
ファイルでサポートされているものと同じです。
ASDF_ELIXIR_VERSION=1.4.0 mix test
asdfで管理されているバージョンではなく、<name>
で指定されたツールのシステムバージョンを使用するには、バージョンとしてsystem
を指定します。
カレントバージョンのセットと同様の方法で、global
、local
、またはshell
のいずれかにsystem
をセットしてください。
asdf local <name> system
+# asdf local python system
asdf current
+# asdf current
+# erlang 17.3 /Users/kim/.tool-versions
+# nodejs 6.11.5 /Users/kim/cool-node-project/.tool-versions
+
+asdf current <name>
+# asdf current erlang
+# erlang 17.3 /Users/kim/.tool-versions
asdf uninstall <name> <version>
+# asdf uninstall erlang 17.3
asdfがパッケージをインストールすると、そのパッケージに含まれるすべての実行プログラムのShimが$ASDF_DATA_DIR/shims
ディレクトリ(デフォルトは~/.asdf/shims
)に作成されます。このディレクトリが(asdf.sh
やasdf.fish
などによって)$PATH
に設定されることで、インストールされているプログラムが当該環境で利用できるようになります。
Shim自体は非常に単純なラッパーであり、asdf exec
というヘルパープログラムに、プラグイン名と、Shimがラップしているインストール済みパッケージの実行ファイルのパスを渡して、exec
します。
asdf exec
ヘルパーは、使用するパッケージのバージョン(.tool-versions
ファイルで指定されたもの、またはasdf local ...
かasdf global ...
で指定されたもの)、パッケージのインストールディレクトリにある実行ファイルの完全パス(プラグインのexec-path
コールバックで操作可能)、および実行環境(プラグインのexec-env
スクリプトで提供)を決定し、実行します。
備考
本システムはexec
呼び出しを使用するため、シェルによってsourceされるパッケージ内のスクリプトは、Shimラッパーを経由させずに直接アクセスする必要があります。asdf
で用意されているwhich
およびwhere
コマンドは、下記のように、インストールされたパッケージへのパスを返すため、この状況を解決するのに役立ちます:
# returns path to main executable in current version
+source $(asdf which \${PLUGIN})/../script.sh
+
+# returns path to the package installation directory
+source $(asdf where \${PLUGIN})/bin/script.sh
何らかの理由でasdfのShimをバイパスしたい場合や、プロジェクトのディレクトリに移動した際に自動的に環境変数を設定したい場合は、asdf-direnvプラグインが役に立ちます。詳細はREADMEをご確認ください。
`,45)]))}const c=i(t,[["render",n]]);export{o as __pageData,c as default}; diff --git a/assets/ja-jp_manage_versions.md.B4flZrjK.lean.js b/assets/ja-jp_manage_versions.md.B4flZrjK.lean.js new file mode 100644 index 00000000..006e5091 --- /dev/null +++ b/assets/ja-jp_manage_versions.md.B4flZrjK.lean.js @@ -0,0 +1,30 @@ +import{_ as i,c as a,a2 as l,o as h}from"./chunks/framework.BQmytedh.js";const o=JSON.parse('{"title":"バージョン","description":"","frontmatter":{},"headers":[],"relativePath":"ja-jp/manage/versions.md","filePath":"ja-jp/manage/versions.md","lastUpdated":1704890757000}'),t={name:"ja-jp/manage/versions.md"};function n(e,s,p,k,d,r){return h(),a("div",null,s[0]||(s[0]=[l(`asdf install <name> <version>
+# asdf install erlang 17.3
プラグインが、ソースコードからのダウンロード・コンパイルをサポートしている場合、ref:foo
の形式(foo
は特定のブランチ、タグ、またはコミット)でバージョンを指定できます。アンインストールするときも、同じ名前とバージョンを指定する必要があります。
asdf install <name> latest
+# asdf install erlang latest
下記のように、特定のプレフィックスでの最新安定バージョンをインストールすることもできます。
asdf install <name> latest:<version>
+# asdf install erlang latest:17
asdf list <name>
+# asdf list erlang
下記のように、特定のプレフィックスでのバージョンでフィルタすることもできます。
asdf list <name> <version>
+# asdf list erlang 17
asdf list all <name>
+# asdf list all erlang
下記のように、特定のプレフィックスでのバージョンでフィルタすることもできます。
asdf list all <name> <version>
+# asdf list all erlang 17
asdf latest <name>
+# asdf latest erlang
下記のように、特定のプレフィックスでの最新安定バージョンで表示することもできます。
asdf latest <name> <version>
+# asdf latest erlang 17
asdf global <name> <version> [<version>...]
+asdf shell <name> <version> [<version>...]
+asdf local <name> <version> [<version>...]
+# asdf global elixir 1.2.4
+
+asdf global <name> latest[:<version>]
+asdf local <name> latest[:<version>]
+# asdf global elixir latest
global
の場合、バージョンは$HOME/.tool-versions
ファイルに書き込まれます。
shell
の場合、バージョンはASDF_\${TOOL}_VERSION
という環境変数に設定され、現在のシェルセッションでのみ有効となります。
local
の場合、バージョンは$PWD/.tool-versions
ファイルに書き込まれます。存在しない場合は作成されます。
.tool-versions
ファイルについて詳しくは、構成設定のリファレンスをご覧ください。
代替手段
現在のシェルセッションでのみバージョンを設定したい場合、 または、特定のツールバージョンでコマンドを実行するだけのためにバージョンを設定したい場合は、 ASDF_\${TOOL}_VERSION
という環境変数で設定することができます。
下記の例では、バージョン1.4.0
のElixirプロジェクトに対して、テストを実行させています。 バージョンの表記形式は、.tool-versions
ファイルでサポートされているものと同じです。
ASDF_ELIXIR_VERSION=1.4.0 mix test
asdfで管理されているバージョンではなく、<name>
で指定されたツールのシステムバージョンを使用するには、バージョンとしてsystem
を指定します。
カレントバージョンのセットと同様の方法で、global
、local
、またはshell
のいずれかにsystem
をセットしてください。
asdf local <name> system
+# asdf local python system
asdf current
+# asdf current
+# erlang 17.3 /Users/kim/.tool-versions
+# nodejs 6.11.5 /Users/kim/cool-node-project/.tool-versions
+
+asdf current <name>
+# asdf current erlang
+# erlang 17.3 /Users/kim/.tool-versions
asdf uninstall <name> <version>
+# asdf uninstall erlang 17.3
asdfがパッケージをインストールすると、そのパッケージに含まれるすべての実行プログラムのShimが$ASDF_DATA_DIR/shims
ディレクトリ(デフォルトは~/.asdf/shims
)に作成されます。このディレクトリが(asdf.sh
やasdf.fish
などによって)$PATH
に設定されることで、インストールされているプログラムが当該環境で利用できるようになります。
Shim自体は非常に単純なラッパーであり、asdf exec
というヘルパープログラムに、プラグイン名と、Shimがラップしているインストール済みパッケージの実行ファイルのパスを渡して、exec
します。
asdf exec
ヘルパーは、使用するパッケージのバージョン(.tool-versions
ファイルで指定されたもの、またはasdf local ...
かasdf global ...
で指定されたもの)、パッケージのインストールディレクトリにある実行ファイルの完全パス(プラグインのexec-path
コールバックで操作可能)、および実行環境(プラグインのexec-env
スクリプトで提供)を決定し、実行します。
備考
本システムはexec
呼び出しを使用するため、シェルによってsourceされるパッケージ内のスクリプトは、Shimラッパーを経由させずに直接アクセスする必要があります。asdf
で用意されているwhich
およびwhere
コマンドは、下記のように、インストールされたパッケージへのパスを返すため、この状況を解決するのに役立ちます:
# returns path to main executable in current version
+source $(asdf which \${PLUGIN})/../script.sh
+
+# returns path to the package installation directory
+source $(asdf where \${PLUGIN})/bin/script.sh
何らかの理由でasdfのShimをバイパスしたい場合や、プロジェクトのディレクトリに移動した際に自動的に環境変数を設定したい場合は、asdf-direnvプラグインが役に立ちます。詳細はREADMEをご確認ください。
`,45)]))}const c=i(t,[["render",n]]);export{o as __pageData,c as default}; diff --git a/assets/ja-jp_more_community-projects.md.Cq5uhq32.js b/assets/ja-jp_more_community-projects.md.Cq5uhq32.js new file mode 100644 index 00000000..bbc43697 --- /dev/null +++ b/assets/ja-jp_more_community-projects.md.Cq5uhq32.js @@ -0,0 +1 @@ +import{_ as t,c as a,a2 as o,o as r}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"コミュニティプロジェクト","description":"","frontmatter":{},"headers":[],"relativePath":"ja-jp/more/community-projects.md","filePath":"ja-jp/more/community-projects.md","lastUpdated":1704890757000}'),s={name:"ja-jp/more/community-projects.md"};function c(n,e,i,d,l,p){return r(),a("div",null,e[0]||(e[0]=[o('asdf
に関連するコミュニティプロジェクトをいくつか紹介します:
備考
asdfコアチームは、これらのプロジェクトやコードを所有していません。 asdfコアでは、ここに掲載されているものに関連する品質やセキュリティについては責任を負いません。
asdf
に関連するコミュニティプロジェクトをいくつか紹介します:
備考
asdfコアチームは、これらのプロジェクトやコードを所有していません。 asdfコアでは、ここに掲載されているものに関連する品質やセキュリティについては責任を負いません。
ここでは、asdf
に関するよくある質問を紹介します。
WSL1 (Windows Subsystem for Linux 1)は公式にはサポートしていません。asdf
は正常に動作しない可能性があります。WSL1を公式にサポートする予定はありません。
WSL2 (Windows Subsystem for Linux 2)では、あなたが選択したWSLディストリビューションに基づいて、セットアップと依存関係の解決を済ませれば、動作するはずです。
重要なのは、WSL2が正常に動作するのは、カレントワークディレクトリがWindowsドライブではなくUnixドライブである場合に 限られる ということです。
GitHub Actionsでホストランナーのサポートが可能になれば、WSL2でテストスイートを実行する予定ですが、現時点ではそうではないようです。
npm install -g yarn
を実行したにも関わらず、yarn
が実行できません。どうなっているの?
asdf
はShimを使って実行ファイルを管理しています。プラグインによってインストールされるものは、自動的にShimが作成されますが、asdf
が管理しているツールによって実行ファイルがインストールされた場合は、Shimを作成しなければならないということをasdf
に通知する必要があります。上記の例では、YarnのShimを作成しなければいけません。詳しくは、asdf reshim
コマンドのドキュメントをご覧ください。
asdf reshim
コマンドを実行しても問題が解決しない場合、asdf.sh
やasdf.fish
のsourceが、シェルの構成ファイル(.bash_profile
、.zshrc
、config.fish
など)の一番下にないことが原因である可能性があります。$PATH
を設定した後、そしてフレームワーク(oh-my-zshなど)を使用しているのれあればそれをsourceした後に、sourceする必要があります。
ここでは、asdf
に関するよくある質問を紹介します。
WSL1 (Windows Subsystem for Linux 1)は公式にはサポートしていません。asdf
は正常に動作しない可能性があります。WSL1を公式にサポートする予定はありません。
WSL2 (Windows Subsystem for Linux 2)では、あなたが選択したWSLディストリビューションに基づいて、セットアップと依存関係の解決を済ませれば、動作するはずです。
重要なのは、WSL2が正常に動作するのは、カレントワークディレクトリがWindowsドライブではなくUnixドライブである場合に 限られる ということです。
GitHub Actionsでホストランナーのサポートが可能になれば、WSL2でテストスイートを実行する予定ですが、現時点ではそうではないようです。
npm install -g yarn
を実行したにも関わらず、yarn
が実行できません。どうなっているの?
asdf
はShimを使って実行ファイルを管理しています。プラグインによってインストールされるものは、自動的にShimが作成されますが、asdf
が管理しているツールによって実行ファイルがインストールされた場合は、Shimを作成しなければならないということをasdf
に通知する必要があります。上記の例では、YarnのShimを作成しなければいけません。詳しくは、asdf reshim
コマンドのドキュメントをご覧ください。
asdf reshim
コマンドを実行しても問題が解決しない場合、asdf.sh
やasdf.fish
のsourceが、シェルの構成ファイル(.bash_profile
、.zshrc
、config.fish
など)の一番下にないことが原因である可能性があります。$PATH
を設定した後、そしてフレームワーク(oh-my-zshなど)を使用しているのれあればそれをsourceした後に、sourceする必要があります。
このページを借りて、asdfのオーサーおよびコントリビューターの皆様に感謝を申し上げます!
私 (@HashNuke)、高熱、風邪、咳。
コピーライト 2014年から今まで (MIT License)
GitHubのコントリビューターリスト🙏をご覧ください。
',9)]))}const u=e(o,[["render",l]]);export{f as __pageData,u as default}; diff --git a/assets/ja-jp_more_thanks.md.dd0Jv9gE.lean.js b/assets/ja-jp_more_thanks.md.dd0Jv9gE.lean.js new file mode 100644 index 00000000..ba5e3b33 --- /dev/null +++ b/assets/ja-jp_more_thanks.md.dd0Jv9gE.lean.js @@ -0,0 +1 @@ +import{_ as e,c as r,a2 as t,o as h}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"謝辞","description":"","frontmatter":{},"headers":[],"relativePath":"ja-jp/more/thanks.md","filePath":"ja-jp/more/thanks.md","lastUpdated":1704890757000}'),o={name:"ja-jp/more/thanks.md"};function l(s,a,n,i,d,p){return h(),r("div",null,a[0]||(a[0]=[t('このページを借りて、asdfのオーサーおよびコントリビューターの皆様に感謝を申し上げます!
私 (@HashNuke)、高熱、風邪、咳。
コピーライト 2014年から今まで (MIT License)
GitHubのコントリビューターリスト🙏をご覧ください。
',9)]))}const u=e(o,[["render",l]]);export{f as __pageData,u as default}; diff --git a/assets/ja-jp_plugins_create.md.DRELQIdl.js b/assets/ja-jp_plugins_create.md.DRELQIdl.js new file mode 100644 index 00000000..ebbf75ef --- /dev/null +++ b/assets/ja-jp_plugins_create.md.DRELQIdl.js @@ -0,0 +1,35 @@ +import{_ as n,c as p,a2 as e,j as i,a,G as l,B as d,o}from"./chunks/framework.BQmytedh.js";const x=JSON.parse('{"title":"プラグインの作成","description":"","frontmatter":{},"headers":[],"relativePath":"ja-jp/plugins/create.md","filePath":"ja-jp/plugins/create.md","lastUpdated":1734397135000}'),h={name:"ja-jp/plugins/create.md"},r={tabindex:"0"},k={style:{"text-align":"left"}},g={style:{"text-align":"left"}},c={style:{"text-align":"left"}},u={style:{"text-align":"left"}},b={id:"bin-list-all",tabindex:"-1"},F={id:"bin-download",tabindex:"-1"},E={id:"bin-install",tabindex:"-1"},y={id:"bin-latest-stable",tabindex:"-1"},m={id:"asdf-cliの拡張コマンド",tabindex:"-1"},f={id:"カスタムshimテンプレート",tabindex:"-1"};function v(A,s,_,C,S,D){const t=d("Badge");return o(),p("div",null,[s[48]||(s[48]=e('プラグインとは、 言語/ツールのバージョン管理をサポートするための実行スクリプトを含めたGitリポジトリのことです。 これらのスクリプトは、asdf list-all <name>
やasdf install <name> <version>
などの機能をサポートするコマンドを使って、 asdfによって実行されます。
オリジナルのプラグインを作成するには、次の2つの方法があります:
asdf-<tool_name>
)を 生成 します。 生成できたら、 そのリポジトリをクローンしてsetup.bash
のスクリプトを実行し、 テンプレートを対話的に更新していきます。asdf-<tool_name>
という名前のリポジトリを自分で立ち上げ、 以降に記載されている必要なスクリプトを実装します。asdf
コマンドを呼び出してはいけません。sort -V
などです。 asdfコアの禁止コマンド一覧もご覧ください。以下は、asdfから呼び出せるスクリプトの全リストです。
',9)),i("table",r,[s[25]||(s[25]=i("thead",null,[i("tr",null,[i("th",{style:{"text-align":"left"}},"スクリプト"),i("th",{style:{"text-align":"left"}},"説明")])],-1)),i("tbody",null,[i("tr",null,[i("td",k,[s[0]||(s[0]=i("a",{href:"#bin-list-all"},"bin/list-all",-1)),s[1]||(s[1]=a()),l(t,{type:"tip",text:"必須",vertical:"middle"})]),s[2]||(s[2]=i("td",{style:{"text-align":"left"}},"インストール可能なすべてのバージョンをリストします。",-1))]),i("tr",null,[i("td",g,[s[3]||(s[3]=i("a",{href:"#bin-download"},"bin/download",-1)),s[4]||(s[4]=a()),l(t,{type:"tip",text:"必須",vertical:"middle"})]),s[5]||(s[5]=i("td",{style:{"text-align":"left"}},"ツールの特定バージョンのソースコードまたはバイナリをダウンロードします。",-1))]),i("tr",null,[i("td",c,[s[6]||(s[6]=i("a",{href:"#bin-install"},"bin/install",-1)),s[7]||(s[7]=a()),l(t,{type:"tip",text:"必須",vertical:"middle"})]),s[8]||(s[8]=i("td",{style:{"text-align":"left"}},"ツールの特定バージョンをインストールします。",-1))]),i("tr",null,[i("td",u,[s[9]||(s[9]=i("a",{href:"#bin-latest-stable"},"bin/latest-stable",-1)),s[10]||(s[10]=a()),l(t,{type:"warning",text:"推奨",vertical:"middle"})]),s[11]||(s[11]=i("td",{style:{"text-align":"left"}},"指定されたツールの最新安定バージョンをリストします。",-1))]),s[12]||(s[12]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.overview"},"bin/help.overview")]),i("td",{style:{"text-align":"left"}},"プラグインおよびツールに関する概要説明を出力します。")],-1)),s[13]||(s[13]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.deps"},"bin/help.deps")]),i("td",{style:{"text-align":"left"}},"オペレーティングシステムに合わせた依存関係のリストを出力します。")],-1)),s[14]||(s[14]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.config"},"bin/help.config")]),i("td",{style:{"text-align":"left"}},"プラグインおよびツールの構成設定一覧を出力します。")],-1)),s[15]||(s[15]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.links"},"bin/help.links")]),i("td",{style:{"text-align":"left"}},"プラグインとツールに関連するリンクリストを出力します。")],-1)),s[16]||(s[16]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-list-bin-paths"},"bin/list-bin-paths")]),i("td",{style:{"text-align":"left"}},"Shimを作成するバイナリが存在するディレクトリへの相対パスの一覧を出力します。")],-1)),s[17]||(s[17]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-exec-env"},"bin/exec-env")]),i("td",{style:{"text-align":"left"}},"ツールのバイナリのShimを実行する前に環境を準備します。")],-1)),s[18]||(s[18]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-exec-path"},"bin/exec-path")]),i("td",{style:{"text-align":"left"}},"ツールの特定バージョンの実行ファイルパスを出力します。")],-1)),s[19]||(s[19]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-uninstall"},"bin/uninstall")]),i("td",{style:{"text-align":"left"}},"ツールの特定バージョンをアンインストールします。")],-1)),s[20]||(s[20]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-list-legacy-filenames"},"bin/list-legacy-filenames")]),i("td",{style:{"text-align":"left"}},[i("code",null,".ruby-version"),a("のような、レガシー構成ファイルのリストを出力します。")])],-1)),s[21]||(s[21]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-parse-legacy-file"},"bin/parse-legacy-file")]),i("td",{style:{"text-align":"left"}},"レガシーバージョンファイルのカスタムパーサーです。")],-1)),s[22]||(s[22]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-post-plugin-add"},"bin/post-plugin-add")]),i("td",{style:{"text-align":"left"}},"プラグインが追加された後に実行されるフックです。")],-1)),s[23]||(s[23]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-post-plugin-update"},"bin/post-plugin-update")]),i("td",{style:{"text-align":"left"}},"プラグインが更新された後に実行されるフックです。")],-1)),s[24]||(s[24]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-pre-plugin-remove"},"bin/pre-plugin-remove")]),i("td",{style:{"text-align":"left"}},"プラグインが削除される前に実行されるフックです。")],-1))])]),s[49]||(s[49]=e('どのコマンドがどのスクリプトを呼び出すかについては、 各スクリプトの詳細なドキュメントを参照してください。
以下は、すべてのスクリプトで使用される環境変数の全リストです。
環境変数 | 説明 |
---|---|
ASDF_INSTALL_TYPE | version またはref です。 |
ASDF_INSTALL_VERSION | ASDF_INSTALL_TYPE に応じてフルバージョンナンバーまたはGit Refの値が入ります。 |
ASDF_INSTALL_PATH | ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。 |
ASDF_CONCURRENCY | ソースコードのコンパイル時に使用するコア数です。make -j のようなフラグを設定する際に便利です。 |
ASDF_DOWNLOAD_PATH | bin/download によってソースコードまたはバイナリがダウンロードされる場所へのパスです。 |
ASDF_PLUGIN_PATH | プラグインがインストールされている場所へのパスです。 |
ASDF_PLUGIN_SOURCE_URL | プラグインソースのURLです。 |
ASDF_PLUGIN_PREV_REF | プラグインの以前のgit-ref です。 |
ASDF_PLUGIN_POST_REF | 更新後のプラグインのgit-ref です。 |
ASDF_CMD_FILE | ソースとなるファイルのフルパスに解決されます。 |
備考
すべてのスクリプトですべての環境変数が使用できるわけではありません。 以下の各スクリプトのドキュメントで、そのスクリプトで利用可能な環境変数を確認してください。
説明
インストール可能なすべてのバージョンをリストします。
出力フォーマット
スペース区切りのバージョンリストの文字列を出力する必要があります。例えば次のとおりです:
1.0.1 1.0.2 1.3.0 1.4
最新バージョンが末尾にくる必要があります。
asdfコアは各バージョンを1行ずつ表示するため、 いくつかのバージョンは画面外にはみ出る場合があります。
並べ替え
ウェブサイト上のリリースページからバージョンを取得する場合、 提供されている順序は正しいリリース順となっていることが多いため、 そのままの順序を使用することを推奨します。 逆順にしたければ、tsc
をパイプで通すだけで十分です。
どうしても並べ替えが避けられない場合、sort -V
は移植性が無いため、次のいずれかの方法を使用することを推奨します:
v2.18.0
以上が必要です)sed
、sort
、およびawk
が必要です)スクリプトで使用できる環境変数
このスクリプトに環境変数は提供されません。
このスクリプトを呼び出すコマンド
asdf list all <name> [version]
asdf list all nodejs
: このスクリプトで返されるすべてのバージョンを、 1行ずつリストします。asdf list all nodejs 18
: このスクリプトで返されるすべてのバージョンから、 18
で始まるバージョンのみフィルタし、1行ずつリストします。asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}/bin/list-all"
説明
ツールの特定バージョンのソースコードまたはバイナリを、指定された場所にダウンロードします。
実装内容
ASDF_DOWNLOAD_PATH
で指定されたディレクトリに、ソースコードまたはバイナリをダウンロードする必要があります。ASDF_DOWNLOAD_PATH
ディレクトリに配置する必要があります。ASDF_DOWNLOAD_PATH
ディレクトリ内に何もファイルを配置しないようにしてください。0
としてください。レガシープラグイン
このスクリプトはすべてのプラグインで 必須 とされていますが、このスクリプトが導入される以前の"レガシー"プラグインでは、 オプション となっていました。
このスクリプトが存在しない場合、asdfはbin/install
スクリプトがあると想定して、バージョンのダウンロード、かつ、インストールが実行されます。
レガシープラグインのサポートは最終的に削除される予定のため、今後作成するすべてのプラグインでこのスクリプトを含めるようにしてください。
スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。ASDF_DOWNLOAD_PATH
: ソースコードまたはバイナリのダウンロード先のパスです。このスクリプトを呼び出すコマンド
asdf install <tool> [version]
asdf install <tool> latest[:version]
asdf install nodejs 18.0.0
: Node.jsのバージョン18.0.0
のソースコードまたはバイナリをダウンロードし、ASDF_DOWNLOAD_PATH
ディレクトリに配置します。 そしてbin/install
スクリプトを実行します。asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}"/bin/download
説明
ツールの特定バージョンを指定された場所にインストールします。
実装内容
ASDF_INSTALL_PATH
のパスのディレクトリにインストールする必要があります。$ASDF_INSTALL_PATH/bin
内にあるファイルに対して作成されます。 この動作は、オプションのbin/list-bin-pathsスクリプトでカスタマイズできます。0
としてください。ASDF_INSTALL_PATH
にファイルを配置するようなスクリプトとしてください。レガシープラグイン
bin/download
スクリプトが存在しない場合、このスクリプトでは、指定されたバージョンをダウンロード、かつ、インストールをする必要があります。
0.7._
以前と0.8._
以降のasdfコアの互換性を保つために、ASDF_DOWNLOAD_PATH
環境変数が設定されているかを確認してください。 設定されている場合は、bin/download
スクリプトがすでにバージョンをダウンロードしていると想定し、設定されていない場合は、bin/install
でソースコードをダウンロードするようにしてください。
スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。ASDF_CONCURRENCY
: ソースコードのコンパイル時に使用するコア数です。make -j
のようなフラグを設定する際に便利です。ASDF_DOWNLOAD_PATH
: ソースコードまたはバイナリのダウンロード先のパスです。このスクリプトを呼び出すコマンド
asdf install
asdf install <tool>
asdf install <tool> [version]
asdf install <tool> latest[:version]
asdf install nodejs 18.0.0
: ASDF_INSTALL_PATH
ディレクトリに、 Node.jsのバージョン18.0.0
をインストールします。asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}"/bin/install
説明
ツールの最新安定バージョンを判定します。このスクリプトが存在しない場合、asdfコアはbin/list-all
の出力をtail
した結果をもとに判定しますが、ツールによってはこれが望ましくないことがあります。
実装内容
asdf list all ruby
の出力は、jruby
やrbx
、truffleruby
などの多くのプロバイダのRubyバージョンをリストアップします。ユーザが提供したフィルタは、セマンティックバージョンやプロバイダをフィルタするために、プラグインで使用できます。> asdf latest ruby\n3.2.2\n> asdf latest ruby 2\n2.7.8\n> asdf latest ruby truffleruby\ntruffleruby+graalvm-22.3.1
0
としてください。スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf global <tool> latest
: ツールのグローバルバージョンとして、当該ツールの最新安定バージョンにセットします。asdf local <name> latest
: ツールのローカルバージョンとして、当該ツールの最新安定バージョンにセットします。asdf install <tool> latest
: ツールの最新安定バージョンをインストールします。asdf latest <tool> [<version>]
: オプションのフィルタに基づいて、ツールの最新バージョンを出力します。asdf latest --all
: asdfによって管理されているすべてのツールの最新バージョンと、それらがインストールされているかどうかを出力します。asdfからの呼び出しシグネチャ
このスクリプトは、フィルタクエリという1つの引数を受け取ります。
"${plugin_path}"/bin/latest-stable "$query"
bin/help.overview
説明
プラグインおよび管理されているツールに関する概要説明を出力します。
実装内容
ASDF_INSTALL_VERSION
およびASDF_INSTALL_TYPE
環境変数の値を使用してください)。0
としてください。スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf help <name> [<version>]
: プラグインおよびツールのドキュメントを出力します。asdfからの呼び出しシグネチャ
"${plugin_path}"/bin/help.overview
bin/help.deps
説明
オペレーティングシステムに合わせた依存関係のリストを出力します。依存関係を1行ごとに出力します。
git\ncurl\nsed
実装内容
bin/help.overview
を用意する必要があります。ASDF_INSTALL_VERSION
およびASDF_INSTALL_TYPE
環境変数の値を使用してください)。0
としてください。スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf help <name> [<version>]
: プラグインおよびツールのドキュメントを出力します。asdfからの呼び出しシグネチャ
"${plugin_path}"/bin/help.deps
bin/help.config
説明
プラグインおよびツールで設定必須または任意設定可能な構成設定一覧を出力します。例えば、ツールのインストール・コンパイルに必要な環境変数やその他フラグについて説明します。
実装内容
bin/help.overview
を用意する必要があります。ASDF_INSTALL_VERSION
およびASDF_INSTALL_TYPE
環境変数の値を使用してください)。0
としてください。スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf help <name> [<version>]
: プラグインおよびツールのドキュメントを出力します。asdfからの呼び出しシグネチャ
"${plugin_path}"/bin/help.config
bin/help.links
説明
プラグインとツールに関連するリンクリストを出力します。リンクを1行ごとに出力します。
Git Repository: https://github.com/vlang/v\nDocumentation: https://vlang.io
実装内容
bin/help.overview
を用意する必要があります。<title>: <link>
<link>
のみASDF_INSTALL_VERSION
およびASDF_INSTALL_TYPE
環境変数の値を使用してください)。0
としてください。スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf help <name> [<version>]
: プラグインおよびツールのドキュメントを出力します。asdfからの呼び出しシグネチャ
"${plugin_path}"/bin/help.links
bin/list-bin-paths
説明
ツールの特定バージョンにおける、実行ファイルが含まれるディレクトリの一覧を出力します。
実装内容
"${ASDF_INSTALL_PATH}"/bin
ディレクトリ内にあるバイナリを探し、そのバイナリ向けのShimを作成します。ASDF_INSTALL_PATH
からの相対パスである必要があります。例えば、次のような出力となります:bin tools veggies
以上の場合、下記ディレクトリ内のファイルへのShimを作成するよう、asdfへ指示されます:
"${ASDF_INSTALL_PATH}"/bin
"${ASDF_INSTALL_PATH}"/tools
"${ASDF_INSTALL_PATH}"/veggies
スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf install <tool> [version]
: バイナリへのShimを初期作成します。asdf reshim <tool> <version>
: バイナリへのShimを再作成します。asdfからの呼び出しシグネチャ
"${plugin_path}/bin/list-bin-paths"
bin/exec-env
説明
ツールのバイナリのShimを実行する前に環境を準備します。
スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf which <command>
: 実行ファイルのパスを表示します。asdf exec <command> [args...]
: 現在のバージョンでShimコマンドを実行します。asdf env <command> [util]
: Shimコマンドの実行時に使用される環境において、util(デフォルト: env
)を実行します。asdfからの呼び出しシグネチャ
"${plugin_path}/bin/exec-env"
bin/exec-path
ツールの特定バージョンの実行ファイルパスを取得します。 実行ファイルへの相対パスを文字列で出力する必要があります。 これにより、プラグインはShimで指定された実行ファイルパスを条件付きで上書きして返すか、 そうでなければ、Shimで指定されたデフォルトのパスを返すことができます。
説明
ツールの特定バージョンの実行ファイルパスを取得します。
実装内容
Usage:\n plugin/bin/exec-path <install-path> <command> <executable-path>\n\nExample Call:\n ~/.asdf/plugins/foo/bin/exec-path "~/.asdf/installs/foo/1.0" "foo" "bin/foo"\n\nOutput:\n bin/foox
スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf which <command>
: 実行ファイルのパスを表示します。asdf exec <command> [args...]
: 現在のバージョンでShimコマンドを実行します。asdf env <command> [util]
: Shimコマンドの実行時に使用される環境において、util(デフォルト: env
)を実行します。asdfからの呼び出しシグネチャ
"${plugin_path}/bin/exec-path" "$install_path" "$cmd" "$relative_path"
bin/uninstall
説明
ツールの特定バージョンをアンインストールします。
出力フォーマット
ユーザへの出力は、stdout
またはstderr
へ適切に送信してください。後続のコア実行によってこれらの出力が読み取られることはありません。
スクリプトで使用できる環境変数
このスクリプトに環境変数は提供されません。
このスクリプトを呼び出すコマンド
asdf list all <name> <version>
asdf uninstall nodejs 18.15.0
: nodejsのバージョン18.15.0
をアンインストールし、npm i -g
でグローバルにインストールしたものを含むすべてのShimを削除します。asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}/bin/uninstall"
bin/list-legacy-filenames
説明
ツールのバージョンを決定するために使用されるレガシー構成ファイルのリストを出力します。
実装内容
.ruby-version .rvmrc
"${HOME}"/.asdfrc
内のlegacy_version_file
オプションを有効にしたユーザにのみ適用されます。スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
ツールのバージョンを読み込むすべてのコマンドから呼び出されます。
asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}/bin/list-legacy-filenames"
bin/parse-legacy-file
説明
asdfによって発見されたレガシーファイルをパースして、ツールのバージョンを決定します。JavaScriptのpackage.json
や、Go言語のgo.mod
のようなファイルから、バージョン番号を抽出するのに役立ちます。
実装内容
cat
してバージョンを決定します。1.2.3
スクリプトで使用できる環境変数
このスクリプトが呼び出される前に、環境変数が設定されることはありません。
このスクリプトを呼び出すコマンド
ツールのバージョンを読み込むすべてのコマンドから呼び出されます。
asdfからの呼び出しシグネチャ
このスクリプトは、レガシーファイルの内容を読み込むために、レガシーファイルのパスという1つの引数を受け取ります。
"${plugin_path}/bin/parse-legacy-file" "$file_path"
bin/post-plugin-add
説明
このスクリプトは、asdfのasdf plugin add <tool>
コマンドで、プラグインが 追加 された 後に 呼び出されます。
関連するコマンドフックについても参照してください:
pre_asdf_plugin_add
pre_asdf_plugin_add_${plugin_name}
post_asdf_plugin_add
post_asdf_plugin_add_${plugin_name}
スクリプトで使用できる環境変数
ASDF_PLUGIN_PATH
: プラグインがインストールされている場所へのパスです。ASDF_PLUGIN_SOURCE_URL
: プラグインソースのURLです。ローカルディレクトリパスを指定することもできます。asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}/bin/post-plugin-add"
bin/post-plugin-update
説明
このスクリプトは、asdfのasdf plugin update <tool> [<git-ref>]
コマンドで、 更新 されたプラグインがダウンロードされた 後に 呼び出されます。
関連するコマンドフックについても参照してください:
pre_asdf_plugin_updated
pre_asdf_plugin_updated_${plugin_name}
post_asdf_plugin_updated
post_asdf_plugin_updated_${plugin_name}
スクリプトで使用できる環境変数
ASDF_PLUGIN_PATH
: プラグインがインストールされている場所へのパスです。ASDF_PLUGIN_PREV_REF
: プラグインの以前のgit-refです。ASDF_PLUGIN_POST_REF
: 更新後のプラグインのgit-refです。asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}/bin/post-plugin-update"
bin/pre-plugin-remove
説明
このスクリプトは、asdfのasdf plugin remove <tool>
コマンドで、プラグインが 削除 される 前に 呼び出されます。
関連するコマンドフックについても参照してください:
pre_asdf_plugin_remove
pre_asdf_plugin_remove_${plugin_name}
post_asdf_plugin_remove
post_asdf_plugin_remove_${plugin_name}
スクリプトで使用できる環境変数
ASDF_PLUGIN_PATH
: プラグインがインストールされている場所へのパスです。asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}/bin/pre-plugin-remove"
プラグイン名をサブコマンドとして使用し、 asdfコマンドラインインターフェースを通して呼び出すことのできるlib/commands/command*.bash
スクリプトまたは実行ファイルを用意することで、 新しいasdfコマンドを定義することができます。
例えば、foo
というプラグインがあるとすると:
foo/\n lib/commands/\n command.bash\n command-bat.bash\n command-bat-man.bash\n command-help.bash
ユーザは下記コマンドが実行できるようになります:
$ asdf foo # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash`\n$ asdf foo bar # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash bar`\n$ asdf foo help # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-help.bash`\n$ asdf foo bat man # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat-man.bash`\n$ asdf foo bat baz # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat.bash baz`
プラグイン開発者はこの機能を使って、ツールに関連するユーティリティを提供したり、 asdf自体のコマンド拡張プラグインを作成したりすることができます。
実行可能ビット(executable bit)が付与されている場合、 asdfの実行に代わって、当該スクリプトが実行されます。
実行可能ビット(executable bit)が付与されていない場合、asdfは当該スクリプトをBashスクリプトとしてsourceします。
$ASDF_CMD_FILE
環境変数は、ソースとなるファイルのフルパスに解決されます。
haxe
は、 この機能使ったプラグインの素晴らしい例です。 このプラグインは、asdf haxe neko-dylibs-link
を提供しており、 Haxeの実行ファイルが実行ディレクトリから相対的に動的ライブラリを見つけようとしてしまう問題を修正します。
プラグインのREADMEには、asdf拡張コマンドに関することを必ず記載するようにしてください。
',11)),i("h2",f,[s[45]||(s[45]=a("カスタムShimテンプレート ")),l(t,{type:"danger",text:"高度",vertical:"middle"}),s[46]||(s[46]=a()),s[47]||(s[47]=i("a",{class:"header-anchor",href:"#カスタムshimテンプレート","aria-label":'Permalink to "カスタムShimテンプレート警告
どうしても必要な場合にのみ使用してください。
asdfでは、カスタムShimテンプレートを使用することができます。 foo
という実行ファイルに対して、プラグイン内にshims/foo
ファイルが存在すれば、 asdfは標準Shimテンプレートを使用する代わりに、そのファイルをコピーします。
この機能は賢く使う必要があります。
asdfコアチームが把握している限り、 この機能は公式プラグインであるElixirプラグインでのみ使用されています。 実行ファイルは、実行ファイルであると同時に、Elixirファイルとしても読み込まれます。 そのため、標準的なBashのShimを使用できないのです。
asdfでは、プラグインをテストするためのplugin-test
コマンドを用意しており、下記のように使用できます:
asdf plugin test <plugin_name> <plugin_url> [--asdf-tool-version <version>] [--asdf-plugin-gitref <git_ref>] [test_command...]
<plugin_name>
と<plugin_url>
は必須です。[--asdf-tool-version <version>]
を指定すると、そのバージョンのツールがインストールされます。 デフォルトは、asdf latest <plugin-name>
です。[--asdf-plugin-gitref <git_ref>]
を指定すると、 そのコミット/ブランチ/タグでプラグイン自体をチェックアウトします。 これは、プラグインのCIにおいて、プルリクエストをテストする際に便利です。デフォルトは、プラグインリポジトリのデフォルトブランチとなります。[test_command...]
パラメータは、インストールしたツールが正しく動作するかを確認するために実行するコマンドです。 通常は、<tool> --version
または<tool> --help
となります。 例えば、NodeJSプラグインをテストするときは、次のように実行します:# asdf plugin test <plugin_name> <plugin_url> [test_command]
+ asdf plugin test nodejs https://github.com/asdf-vm/asdf-nodejs.git node --version
備考
LinuxとmacOSの両方のCI環境でテストすることを推奨します。
asdf-vm/actionsリポジトリでは、 GitHub上でホストされているプラグインをテストするためのGitHub Actionを提供しています。 \`.github/workflows/test.yamlのActionsワークフローの例は以下のとおりです:
name: Test
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+
+jobs:
+ plugin_test:
+ name: asdf plugin test
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - macos-latest
+ runs-on: \${{ matrix.os }}
+ steps:
+ - name: asdf_plugin_test
+ uses: asdf-vm/actions/plugin-test@v2
+ with:
+ command: "<MY_TOOL> --version"
以下は、.travis.yml
ファイルの例です。必要に応じてカスタマイズしてください:
language: c
+script: asdf plugin test <MY_TOOL> $TRAVIS_BUILD_DIR '<MY_TOOL> --version'
+before_script:
+ - git clone https://github.com/asdf-vm/asdf.git asdf
+ - . asdf/asdf.sh
+os:
+ - linux
+ - osx
備考
他のCIを使用する場合、 プラグインの場所への相対パスを渡す必要がある場合があります:
asdf plugin test <tool_name> <path> '<tool_command> --version'
bin/list-all
やbin/latest-stable
のように、コマンドが外部APIへのアクセスに依存している場合、 自動テスト中にレート制限が発生することがあります。 これを軽減するため、環境変数経由で認証トークンを提供するコードパスがあることを確認してください。 以下に例を示します:
cmd="curl --silent"
+if [ -n "$GITHUB_API_TOKEN" ]; then
+ cmd="$cmd -H 'Authorization: token $GITHUB_API_TOKEN'"
+fi
+
+cmd="$cmd $releases_path"
GITHUB_API_TOKEN
GITHUB_API_TOKEN
を利用する際は、 まず、 public_repo
アクセスのみをもつ新しいパーソナルトークンを作成してください。
次に、このトークンをCIパイプライン環境変数に追加してください。
警告
認証トークンをコードリポジトリで公開してはいけません。
ヒント
推奨されるプラグインのインストール方法は、URLをもとに直接インストールする方法です:
# asdf plugin add <name> <git_url>
+ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
asdfの各種コマンドでgit_url
が指定されなかった場合、 asdfは正確なgit_url
を決定するために、 ショートネームインデックスリポジトリを使用します。
このリポジトリの指示に従うことで、 あなたが作成したプラグインを、 ショートネームインデックスに追加することができます。
`,27))])}const B=n(h,[["render",v]]);export{x as __pageData,B as default}; diff --git a/assets/ja-jp_plugins_create.md.DRELQIdl.lean.js b/assets/ja-jp_plugins_create.md.DRELQIdl.lean.js new file mode 100644 index 00000000..ebbf75ef --- /dev/null +++ b/assets/ja-jp_plugins_create.md.DRELQIdl.lean.js @@ -0,0 +1,35 @@ +import{_ as n,c as p,a2 as e,j as i,a,G as l,B as d,o}from"./chunks/framework.BQmytedh.js";const x=JSON.parse('{"title":"プラグインの作成","description":"","frontmatter":{},"headers":[],"relativePath":"ja-jp/plugins/create.md","filePath":"ja-jp/plugins/create.md","lastUpdated":1734397135000}'),h={name:"ja-jp/plugins/create.md"},r={tabindex:"0"},k={style:{"text-align":"left"}},g={style:{"text-align":"left"}},c={style:{"text-align":"left"}},u={style:{"text-align":"left"}},b={id:"bin-list-all",tabindex:"-1"},F={id:"bin-download",tabindex:"-1"},E={id:"bin-install",tabindex:"-1"},y={id:"bin-latest-stable",tabindex:"-1"},m={id:"asdf-cliの拡張コマンド",tabindex:"-1"},f={id:"カスタムshimテンプレート",tabindex:"-1"};function v(A,s,_,C,S,D){const t=d("Badge");return o(),p("div",null,[s[48]||(s[48]=e('プラグインとは、 言語/ツールのバージョン管理をサポートするための実行スクリプトを含めたGitリポジトリのことです。 これらのスクリプトは、asdf list-all <name>
やasdf install <name> <version>
などの機能をサポートするコマンドを使って、 asdfによって実行されます。
オリジナルのプラグインを作成するには、次の2つの方法があります:
asdf-<tool_name>
)を 生成 します。 生成できたら、 そのリポジトリをクローンしてsetup.bash
のスクリプトを実行し、 テンプレートを対話的に更新していきます。asdf-<tool_name>
という名前のリポジトリを自分で立ち上げ、 以降に記載されている必要なスクリプトを実装します。asdf
コマンドを呼び出してはいけません。sort -V
などです。 asdfコアの禁止コマンド一覧もご覧ください。以下は、asdfから呼び出せるスクリプトの全リストです。
',9)),i("table",r,[s[25]||(s[25]=i("thead",null,[i("tr",null,[i("th",{style:{"text-align":"left"}},"スクリプト"),i("th",{style:{"text-align":"left"}},"説明")])],-1)),i("tbody",null,[i("tr",null,[i("td",k,[s[0]||(s[0]=i("a",{href:"#bin-list-all"},"bin/list-all",-1)),s[1]||(s[1]=a()),l(t,{type:"tip",text:"必須",vertical:"middle"})]),s[2]||(s[2]=i("td",{style:{"text-align":"left"}},"インストール可能なすべてのバージョンをリストします。",-1))]),i("tr",null,[i("td",g,[s[3]||(s[3]=i("a",{href:"#bin-download"},"bin/download",-1)),s[4]||(s[4]=a()),l(t,{type:"tip",text:"必須",vertical:"middle"})]),s[5]||(s[5]=i("td",{style:{"text-align":"left"}},"ツールの特定バージョンのソースコードまたはバイナリをダウンロードします。",-1))]),i("tr",null,[i("td",c,[s[6]||(s[6]=i("a",{href:"#bin-install"},"bin/install",-1)),s[7]||(s[7]=a()),l(t,{type:"tip",text:"必須",vertical:"middle"})]),s[8]||(s[8]=i("td",{style:{"text-align":"left"}},"ツールの特定バージョンをインストールします。",-1))]),i("tr",null,[i("td",u,[s[9]||(s[9]=i("a",{href:"#bin-latest-stable"},"bin/latest-stable",-1)),s[10]||(s[10]=a()),l(t,{type:"warning",text:"推奨",vertical:"middle"})]),s[11]||(s[11]=i("td",{style:{"text-align":"left"}},"指定されたツールの最新安定バージョンをリストします。",-1))]),s[12]||(s[12]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.overview"},"bin/help.overview")]),i("td",{style:{"text-align":"left"}},"プラグインおよびツールに関する概要説明を出力します。")],-1)),s[13]||(s[13]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.deps"},"bin/help.deps")]),i("td",{style:{"text-align":"left"}},"オペレーティングシステムに合わせた依存関係のリストを出力します。")],-1)),s[14]||(s[14]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.config"},"bin/help.config")]),i("td",{style:{"text-align":"left"}},"プラグインおよびツールの構成設定一覧を出力します。")],-1)),s[15]||(s[15]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.links"},"bin/help.links")]),i("td",{style:{"text-align":"left"}},"プラグインとツールに関連するリンクリストを出力します。")],-1)),s[16]||(s[16]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-list-bin-paths"},"bin/list-bin-paths")]),i("td",{style:{"text-align":"left"}},"Shimを作成するバイナリが存在するディレクトリへの相対パスの一覧を出力します。")],-1)),s[17]||(s[17]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-exec-env"},"bin/exec-env")]),i("td",{style:{"text-align":"left"}},"ツールのバイナリのShimを実行する前に環境を準備します。")],-1)),s[18]||(s[18]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-exec-path"},"bin/exec-path")]),i("td",{style:{"text-align":"left"}},"ツールの特定バージョンの実行ファイルパスを出力します。")],-1)),s[19]||(s[19]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-uninstall"},"bin/uninstall")]),i("td",{style:{"text-align":"left"}},"ツールの特定バージョンをアンインストールします。")],-1)),s[20]||(s[20]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-list-legacy-filenames"},"bin/list-legacy-filenames")]),i("td",{style:{"text-align":"left"}},[i("code",null,".ruby-version"),a("のような、レガシー構成ファイルのリストを出力します。")])],-1)),s[21]||(s[21]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-parse-legacy-file"},"bin/parse-legacy-file")]),i("td",{style:{"text-align":"left"}},"レガシーバージョンファイルのカスタムパーサーです。")],-1)),s[22]||(s[22]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-post-plugin-add"},"bin/post-plugin-add")]),i("td",{style:{"text-align":"left"}},"プラグインが追加された後に実行されるフックです。")],-1)),s[23]||(s[23]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-post-plugin-update"},"bin/post-plugin-update")]),i("td",{style:{"text-align":"left"}},"プラグインが更新された後に実行されるフックです。")],-1)),s[24]||(s[24]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-pre-plugin-remove"},"bin/pre-plugin-remove")]),i("td",{style:{"text-align":"left"}},"プラグインが削除される前に実行されるフックです。")],-1))])]),s[49]||(s[49]=e('どのコマンドがどのスクリプトを呼び出すかについては、 各スクリプトの詳細なドキュメントを参照してください。
以下は、すべてのスクリプトで使用される環境変数の全リストです。
環境変数 | 説明 |
---|---|
ASDF_INSTALL_TYPE | version またはref です。 |
ASDF_INSTALL_VERSION | ASDF_INSTALL_TYPE に応じてフルバージョンナンバーまたはGit Refの値が入ります。 |
ASDF_INSTALL_PATH | ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。 |
ASDF_CONCURRENCY | ソースコードのコンパイル時に使用するコア数です。make -j のようなフラグを設定する際に便利です。 |
ASDF_DOWNLOAD_PATH | bin/download によってソースコードまたはバイナリがダウンロードされる場所へのパスです。 |
ASDF_PLUGIN_PATH | プラグインがインストールされている場所へのパスです。 |
ASDF_PLUGIN_SOURCE_URL | プラグインソースのURLです。 |
ASDF_PLUGIN_PREV_REF | プラグインの以前のgit-ref です。 |
ASDF_PLUGIN_POST_REF | 更新後のプラグインのgit-ref です。 |
ASDF_CMD_FILE | ソースとなるファイルのフルパスに解決されます。 |
備考
すべてのスクリプトですべての環境変数が使用できるわけではありません。 以下の各スクリプトのドキュメントで、そのスクリプトで利用可能な環境変数を確認してください。
説明
インストール可能なすべてのバージョンをリストします。
出力フォーマット
スペース区切りのバージョンリストの文字列を出力する必要があります。例えば次のとおりです:
1.0.1 1.0.2 1.3.0 1.4
最新バージョンが末尾にくる必要があります。
asdfコアは各バージョンを1行ずつ表示するため、 いくつかのバージョンは画面外にはみ出る場合があります。
並べ替え
ウェブサイト上のリリースページからバージョンを取得する場合、 提供されている順序は正しいリリース順となっていることが多いため、 そのままの順序を使用することを推奨します。 逆順にしたければ、tsc
をパイプで通すだけで十分です。
どうしても並べ替えが避けられない場合、sort -V
は移植性が無いため、次のいずれかの方法を使用することを推奨します:
v2.18.0
以上が必要です)sed
、sort
、およびawk
が必要です)スクリプトで使用できる環境変数
このスクリプトに環境変数は提供されません。
このスクリプトを呼び出すコマンド
asdf list all <name> [version]
asdf list all nodejs
: このスクリプトで返されるすべてのバージョンを、 1行ずつリストします。asdf list all nodejs 18
: このスクリプトで返されるすべてのバージョンから、 18
で始まるバージョンのみフィルタし、1行ずつリストします。asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}/bin/list-all"
説明
ツールの特定バージョンのソースコードまたはバイナリを、指定された場所にダウンロードします。
実装内容
ASDF_DOWNLOAD_PATH
で指定されたディレクトリに、ソースコードまたはバイナリをダウンロードする必要があります。ASDF_DOWNLOAD_PATH
ディレクトリに配置する必要があります。ASDF_DOWNLOAD_PATH
ディレクトリ内に何もファイルを配置しないようにしてください。0
としてください。レガシープラグイン
このスクリプトはすべてのプラグインで 必須 とされていますが、このスクリプトが導入される以前の"レガシー"プラグインでは、 オプション となっていました。
このスクリプトが存在しない場合、asdfはbin/install
スクリプトがあると想定して、バージョンのダウンロード、かつ、インストールが実行されます。
レガシープラグインのサポートは最終的に削除される予定のため、今後作成するすべてのプラグインでこのスクリプトを含めるようにしてください。
スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。ASDF_DOWNLOAD_PATH
: ソースコードまたはバイナリのダウンロード先のパスです。このスクリプトを呼び出すコマンド
asdf install <tool> [version]
asdf install <tool> latest[:version]
asdf install nodejs 18.0.0
: Node.jsのバージョン18.0.0
のソースコードまたはバイナリをダウンロードし、ASDF_DOWNLOAD_PATH
ディレクトリに配置します。 そしてbin/install
スクリプトを実行します。asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}"/bin/download
説明
ツールの特定バージョンを指定された場所にインストールします。
実装内容
ASDF_INSTALL_PATH
のパスのディレクトリにインストールする必要があります。$ASDF_INSTALL_PATH/bin
内にあるファイルに対して作成されます。 この動作は、オプションのbin/list-bin-pathsスクリプトでカスタマイズできます。0
としてください。ASDF_INSTALL_PATH
にファイルを配置するようなスクリプトとしてください。レガシープラグイン
bin/download
スクリプトが存在しない場合、このスクリプトでは、指定されたバージョンをダウンロード、かつ、インストールをする必要があります。
0.7._
以前と0.8._
以降のasdfコアの互換性を保つために、ASDF_DOWNLOAD_PATH
環境変数が設定されているかを確認してください。 設定されている場合は、bin/download
スクリプトがすでにバージョンをダウンロードしていると想定し、設定されていない場合は、bin/install
でソースコードをダウンロードするようにしてください。
スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。ASDF_CONCURRENCY
: ソースコードのコンパイル時に使用するコア数です。make -j
のようなフラグを設定する際に便利です。ASDF_DOWNLOAD_PATH
: ソースコードまたはバイナリのダウンロード先のパスです。このスクリプトを呼び出すコマンド
asdf install
asdf install <tool>
asdf install <tool> [version]
asdf install <tool> latest[:version]
asdf install nodejs 18.0.0
: ASDF_INSTALL_PATH
ディレクトリに、 Node.jsのバージョン18.0.0
をインストールします。asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}"/bin/install
説明
ツールの最新安定バージョンを判定します。このスクリプトが存在しない場合、asdfコアはbin/list-all
の出力をtail
した結果をもとに判定しますが、ツールによってはこれが望ましくないことがあります。
実装内容
asdf list all ruby
の出力は、jruby
やrbx
、truffleruby
などの多くのプロバイダのRubyバージョンをリストアップします。ユーザが提供したフィルタは、セマンティックバージョンやプロバイダをフィルタするために、プラグインで使用できます。> asdf latest ruby\n3.2.2\n> asdf latest ruby 2\n2.7.8\n> asdf latest ruby truffleruby\ntruffleruby+graalvm-22.3.1
0
としてください。スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf global <tool> latest
: ツールのグローバルバージョンとして、当該ツールの最新安定バージョンにセットします。asdf local <name> latest
: ツールのローカルバージョンとして、当該ツールの最新安定バージョンにセットします。asdf install <tool> latest
: ツールの最新安定バージョンをインストールします。asdf latest <tool> [<version>]
: オプションのフィルタに基づいて、ツールの最新バージョンを出力します。asdf latest --all
: asdfによって管理されているすべてのツールの最新バージョンと、それらがインストールされているかどうかを出力します。asdfからの呼び出しシグネチャ
このスクリプトは、フィルタクエリという1つの引数を受け取ります。
"${plugin_path}"/bin/latest-stable "$query"
bin/help.overview
説明
プラグインおよび管理されているツールに関する概要説明を出力します。
実装内容
ASDF_INSTALL_VERSION
およびASDF_INSTALL_TYPE
環境変数の値を使用してください)。0
としてください。スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf help <name> [<version>]
: プラグインおよびツールのドキュメントを出力します。asdfからの呼び出しシグネチャ
"${plugin_path}"/bin/help.overview
bin/help.deps
説明
オペレーティングシステムに合わせた依存関係のリストを出力します。依存関係を1行ごとに出力します。
git\ncurl\nsed
実装内容
bin/help.overview
を用意する必要があります。ASDF_INSTALL_VERSION
およびASDF_INSTALL_TYPE
環境変数の値を使用してください)。0
としてください。スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf help <name> [<version>]
: プラグインおよびツールのドキュメントを出力します。asdfからの呼び出しシグネチャ
"${plugin_path}"/bin/help.deps
bin/help.config
説明
プラグインおよびツールで設定必須または任意設定可能な構成設定一覧を出力します。例えば、ツールのインストール・コンパイルに必要な環境変数やその他フラグについて説明します。
実装内容
bin/help.overview
を用意する必要があります。ASDF_INSTALL_VERSION
およびASDF_INSTALL_TYPE
環境変数の値を使用してください)。0
としてください。スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf help <name> [<version>]
: プラグインおよびツールのドキュメントを出力します。asdfからの呼び出しシグネチャ
"${plugin_path}"/bin/help.config
bin/help.links
説明
プラグインとツールに関連するリンクリストを出力します。リンクを1行ごとに出力します。
Git Repository: https://github.com/vlang/v\nDocumentation: https://vlang.io
実装内容
bin/help.overview
を用意する必要があります。<title>: <link>
<link>
のみASDF_INSTALL_VERSION
およびASDF_INSTALL_TYPE
環境変数の値を使用してください)。0
としてください。スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf help <name> [<version>]
: プラグインおよびツールのドキュメントを出力します。asdfからの呼び出しシグネチャ
"${plugin_path}"/bin/help.links
bin/list-bin-paths
説明
ツールの特定バージョンにおける、実行ファイルが含まれるディレクトリの一覧を出力します。
実装内容
"${ASDF_INSTALL_PATH}"/bin
ディレクトリ内にあるバイナリを探し、そのバイナリ向けのShimを作成します。ASDF_INSTALL_PATH
からの相対パスである必要があります。例えば、次のような出力となります:bin tools veggies
以上の場合、下記ディレクトリ内のファイルへのShimを作成するよう、asdfへ指示されます:
"${ASDF_INSTALL_PATH}"/bin
"${ASDF_INSTALL_PATH}"/tools
"${ASDF_INSTALL_PATH}"/veggies
スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf install <tool> [version]
: バイナリへのShimを初期作成します。asdf reshim <tool> <version>
: バイナリへのShimを再作成します。asdfからの呼び出しシグネチャ
"${plugin_path}/bin/list-bin-paths"
bin/exec-env
説明
ツールのバイナリのShimを実行する前に環境を準備します。
スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf which <command>
: 実行ファイルのパスを表示します。asdf exec <command> [args...]
: 現在のバージョンでShimコマンドを実行します。asdf env <command> [util]
: Shimコマンドの実行時に使用される環境において、util(デフォルト: env
)を実行します。asdfからの呼び出しシグネチャ
"${plugin_path}/bin/exec-env"
bin/exec-path
ツールの特定バージョンの実行ファイルパスを取得します。 実行ファイルへの相対パスを文字列で出力する必要があります。 これにより、プラグインはShimで指定された実行ファイルパスを条件付きで上書きして返すか、 そうでなければ、Shimで指定されたデフォルトのパスを返すことができます。
説明
ツールの特定バージョンの実行ファイルパスを取得します。
実装内容
Usage:\n plugin/bin/exec-path <install-path> <command> <executable-path>\n\nExample Call:\n ~/.asdf/plugins/foo/bin/exec-path "~/.asdf/installs/foo/1.0" "foo" "bin/foo"\n\nOutput:\n bin/foox
スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
asdf which <command>
: 実行ファイルのパスを表示します。asdf exec <command> [args...]
: 現在のバージョンでShimコマンドを実行します。asdf env <command> [util]
: Shimコマンドの実行時に使用される環境において、util(デフォルト: env
)を実行します。asdfからの呼び出しシグネチャ
"${plugin_path}/bin/exec-path" "$install_path" "$cmd" "$relative_path"
bin/uninstall
説明
ツールの特定バージョンをアンインストールします。
出力フォーマット
ユーザへの出力は、stdout
またはstderr
へ適切に送信してください。後続のコア実行によってこれらの出力が読み取られることはありません。
スクリプトで使用できる環境変数
このスクリプトに環境変数は提供されません。
このスクリプトを呼び出すコマンド
asdf list all <name> <version>
asdf uninstall nodejs 18.15.0
: nodejsのバージョン18.15.0
をアンインストールし、npm i -g
でグローバルにインストールしたものを含むすべてのShimを削除します。asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}/bin/uninstall"
bin/list-legacy-filenames
説明
ツールのバージョンを決定するために使用されるレガシー構成ファイルのリストを出力します。
実装内容
.ruby-version .rvmrc
"${HOME}"/.asdfrc
内のlegacy_version_file
オプションを有効にしたユーザにのみ適用されます。スクリプトで使用できる環境変数
ASDF_INSTALL_TYPE
: version
またはref
です。ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
の場合、バージョンのフルナンバーです。ASDF_INSTALL_TYPE=ref
の場合、Gitのref (tag/commit/branch)です。ASDF_INSTALL_PATH
: ツールがインストール されている 場所、またはインストール されるべき 場所へのパスです。このスクリプトを呼び出すコマンド
ツールのバージョンを読み込むすべてのコマンドから呼び出されます。
asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}/bin/list-legacy-filenames"
bin/parse-legacy-file
説明
asdfによって発見されたレガシーファイルをパースして、ツールのバージョンを決定します。JavaScriptのpackage.json
や、Go言語のgo.mod
のようなファイルから、バージョン番号を抽出するのに役立ちます。
実装内容
cat
してバージョンを決定します。1.2.3
スクリプトで使用できる環境変数
このスクリプトが呼び出される前に、環境変数が設定されることはありません。
このスクリプトを呼び出すコマンド
ツールのバージョンを読み込むすべてのコマンドから呼び出されます。
asdfからの呼び出しシグネチャ
このスクリプトは、レガシーファイルの内容を読み込むために、レガシーファイルのパスという1つの引数を受け取ります。
"${plugin_path}/bin/parse-legacy-file" "$file_path"
bin/post-plugin-add
説明
このスクリプトは、asdfのasdf plugin add <tool>
コマンドで、プラグインが 追加 された 後に 呼び出されます。
関連するコマンドフックについても参照してください:
pre_asdf_plugin_add
pre_asdf_plugin_add_${plugin_name}
post_asdf_plugin_add
post_asdf_plugin_add_${plugin_name}
スクリプトで使用できる環境変数
ASDF_PLUGIN_PATH
: プラグインがインストールされている場所へのパスです。ASDF_PLUGIN_SOURCE_URL
: プラグインソースのURLです。ローカルディレクトリパスを指定することもできます。asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}/bin/post-plugin-add"
bin/post-plugin-update
説明
このスクリプトは、asdfのasdf plugin update <tool> [<git-ref>]
コマンドで、 更新 されたプラグインがダウンロードされた 後に 呼び出されます。
関連するコマンドフックについても参照してください:
pre_asdf_plugin_updated
pre_asdf_plugin_updated_${plugin_name}
post_asdf_plugin_updated
post_asdf_plugin_updated_${plugin_name}
スクリプトで使用できる環境変数
ASDF_PLUGIN_PATH
: プラグインがインストールされている場所へのパスです。ASDF_PLUGIN_PREV_REF
: プラグインの以前のgit-refです。ASDF_PLUGIN_POST_REF
: 更新後のプラグインのgit-refです。asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}/bin/post-plugin-update"
bin/pre-plugin-remove
説明
このスクリプトは、asdfのasdf plugin remove <tool>
コマンドで、プラグインが 削除 される 前に 呼び出されます。
関連するコマンドフックについても参照してください:
pre_asdf_plugin_remove
pre_asdf_plugin_remove_${plugin_name}
post_asdf_plugin_remove
post_asdf_plugin_remove_${plugin_name}
スクリプトで使用できる環境変数
ASDF_PLUGIN_PATH
: プラグインがインストールされている場所へのパスです。asdfからの呼び出しシグネチャ
引数はありません。
"${plugin_path}/bin/pre-plugin-remove"
プラグイン名をサブコマンドとして使用し、 asdfコマンドラインインターフェースを通して呼び出すことのできるlib/commands/command*.bash
スクリプトまたは実行ファイルを用意することで、 新しいasdfコマンドを定義することができます。
例えば、foo
というプラグインがあるとすると:
foo/\n lib/commands/\n command.bash\n command-bat.bash\n command-bat-man.bash\n command-help.bash
ユーザは下記コマンドが実行できるようになります:
$ asdf foo # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash`\n$ asdf foo bar # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash bar`\n$ asdf foo help # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-help.bash`\n$ asdf foo bat man # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat-man.bash`\n$ asdf foo bat baz # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat.bash baz`
プラグイン開発者はこの機能を使って、ツールに関連するユーティリティを提供したり、 asdf自体のコマンド拡張プラグインを作成したりすることができます。
実行可能ビット(executable bit)が付与されている場合、 asdfの実行に代わって、当該スクリプトが実行されます。
実行可能ビット(executable bit)が付与されていない場合、asdfは当該スクリプトをBashスクリプトとしてsourceします。
$ASDF_CMD_FILE
環境変数は、ソースとなるファイルのフルパスに解決されます。
haxe
は、 この機能使ったプラグインの素晴らしい例です。 このプラグインは、asdf haxe neko-dylibs-link
を提供しており、 Haxeの実行ファイルが実行ディレクトリから相対的に動的ライブラリを見つけようとしてしまう問題を修正します。
プラグインのREADMEには、asdf拡張コマンドに関することを必ず記載するようにしてください。
',11)),i("h2",f,[s[45]||(s[45]=a("カスタムShimテンプレート ")),l(t,{type:"danger",text:"高度",vertical:"middle"}),s[46]||(s[46]=a()),s[47]||(s[47]=i("a",{class:"header-anchor",href:"#カスタムshimテンプレート","aria-label":'Permalink to "カスタムShimテンプレート警告
どうしても必要な場合にのみ使用してください。
asdfでは、カスタムShimテンプレートを使用することができます。 foo
という実行ファイルに対して、プラグイン内にshims/foo
ファイルが存在すれば、 asdfは標準Shimテンプレートを使用する代わりに、そのファイルをコピーします。
この機能は賢く使う必要があります。
asdfコアチームが把握している限り、 この機能は公式プラグインであるElixirプラグインでのみ使用されています。 実行ファイルは、実行ファイルであると同時に、Elixirファイルとしても読み込まれます。 そのため、標準的なBashのShimを使用できないのです。
asdfでは、プラグインをテストするためのplugin-test
コマンドを用意しており、下記のように使用できます:
asdf plugin test <plugin_name> <plugin_url> [--asdf-tool-version <version>] [--asdf-plugin-gitref <git_ref>] [test_command...]
<plugin_name>
と<plugin_url>
は必須です。[--asdf-tool-version <version>]
を指定すると、そのバージョンのツールがインストールされます。 デフォルトは、asdf latest <plugin-name>
です。[--asdf-plugin-gitref <git_ref>]
を指定すると、 そのコミット/ブランチ/タグでプラグイン自体をチェックアウトします。 これは、プラグインのCIにおいて、プルリクエストをテストする際に便利です。デフォルトは、プラグインリポジトリのデフォルトブランチとなります。[test_command...]
パラメータは、インストールしたツールが正しく動作するかを確認するために実行するコマンドです。 通常は、<tool> --version
または<tool> --help
となります。 例えば、NodeJSプラグインをテストするときは、次のように実行します:# asdf plugin test <plugin_name> <plugin_url> [test_command]
+ asdf plugin test nodejs https://github.com/asdf-vm/asdf-nodejs.git node --version
備考
LinuxとmacOSの両方のCI環境でテストすることを推奨します。
asdf-vm/actionsリポジトリでは、 GitHub上でホストされているプラグインをテストするためのGitHub Actionを提供しています。 \`.github/workflows/test.yamlのActionsワークフローの例は以下のとおりです:
name: Test
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+
+jobs:
+ plugin_test:
+ name: asdf plugin test
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - macos-latest
+ runs-on: \${{ matrix.os }}
+ steps:
+ - name: asdf_plugin_test
+ uses: asdf-vm/actions/plugin-test@v2
+ with:
+ command: "<MY_TOOL> --version"
以下は、.travis.yml
ファイルの例です。必要に応じてカスタマイズしてください:
language: c
+script: asdf plugin test <MY_TOOL> $TRAVIS_BUILD_DIR '<MY_TOOL> --version'
+before_script:
+ - git clone https://github.com/asdf-vm/asdf.git asdf
+ - . asdf/asdf.sh
+os:
+ - linux
+ - osx
備考
他のCIを使用する場合、 プラグインの場所への相対パスを渡す必要がある場合があります:
asdf plugin test <tool_name> <path> '<tool_command> --version'
bin/list-all
やbin/latest-stable
のように、コマンドが外部APIへのアクセスに依存している場合、 自動テスト中にレート制限が発生することがあります。 これを軽減するため、環境変数経由で認証トークンを提供するコードパスがあることを確認してください。 以下に例を示します:
cmd="curl --silent"
+if [ -n "$GITHUB_API_TOKEN" ]; then
+ cmd="$cmd -H 'Authorization: token $GITHUB_API_TOKEN'"
+fi
+
+cmd="$cmd $releases_path"
GITHUB_API_TOKEN
GITHUB_API_TOKEN
を利用する際は、 まず、 public_repo
アクセスのみをもつ新しいパーソナルトークンを作成してください。
次に、このトークンをCIパイプライン環境変数に追加してください。
警告
認証トークンをコードリポジトリで公開してはいけません。
ヒント
推奨されるプラグインのインストール方法は、URLをもとに直接インストールする方法です:
# asdf plugin add <name> <git_url>
+ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
asdfの各種コマンドでgit_url
が指定されなかった場合、 asdfは正確なgit_url
を決定するために、 ショートネームインデックスリポジトリを使用します。
このリポジトリの指示に従うことで、 あなたが作成したプラグインを、 ショートネームインデックスに追加することができます。
`,27))])}const B=n(h,[["render",v]]);export{x as __pageData,B as default}; diff --git a/assets/ko-kr_contribute_core.md.D-irvj4K.js b/assets/ko-kr_contribute_core.md.D-irvj4K.js new file mode 100644 index 00000000..b87536ce --- /dev/null +++ b/assets/ko-kr_contribute_core.md.D-irvj4K.js @@ -0,0 +1,31 @@ +import{_ as a,c as e,a2 as i,o as t}from"./chunks/framework.BQmytedh.js";const k=JSON.parse('{"title":"asdf","description":"","frontmatter":{},"headers":[],"relativePath":"ko-kr/contribute/core.md","filePath":"ko-kr/contribute/core.md","lastUpdated":1734394996000}'),n={name:"ko-kr/contribute/core.md"};function l(p,s,h,o,r,d){return t(),e("div",null,s[0]||(s[0]=[i(`asdf
코어 기여 가이드.
Github의 asdf
를 fork하거나 clone하세요:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
코어 개발을 위한 툴들은 이 리포지토리의 .tool-versions
에 있습니다. 만약 asdf
가 직접 관리하기를 바라신다면, 다음 플러그인들을 설치하세요:
asdf plugin add bats https://github.com/timgluz/asdf-bats.git
+asdf plugin add shellcheck https://github.com/luizm/asdf-shellcheck.git
+asdf plugin add shfmt https://github.com/luizm/asdf-shfmt.git
asdf
를 개발하기 위한 버전들을 설치하세요:
asdf install
로컬 머신에서 개발 도구를 손상시킬 수 있는 기능을 개발 중일 경우 asdf
를 사용하지 않는 것이 좋을 수 있습니다. 개발 도구들의 원본 목록입니다:
만약 설치된 asdf
에 영향 없이 변화들을 테스트해보시고 싶으시다면, $ASDF_DIR
변수를 리포지토리를 clone한 경로에 지정하시고, 그 다음 임시로 bin
와 shims
디렉토리들을 경로 앞에 추가하세요.
원격 리포지토리에 커밋 혹은 push하기 전에, 당신의 코드를 format, lint, 그리고 locally test하세요. 다음 스크립트/명령어들을 사용하세요:
# Lint
+./scripts/lint.bash --check
+
+# Fix & Format
+./scripts/lint.bash --fix
+
+# Test: all tests
+./scripts/test.bash
+
+# Test: for specific command
+bats test/list_commands.bash
TIP
테스트 추가! - 새로운 기능들과 버그 수정들의 리뷰 속도 향상을 위해 테스트들은 필수적입니다. 풀 리퀘스트 요청을 만드시기 전에 새로운 코드 경로들을 추가해주세요. bats-core 문서 참조
다음은 asdf-vm/asdf
리포지토리에 .gitignore
파일입니다. 우리는 프로젝트에 관련된 특정한 파일들을 무시합니다. 운영체제, 툴, workflows에 관련된 파일들은 글로벌 .gitignore
설정에서 무시되어야합니다, 더 보기.
@/../.gitignore
.git-blame-ignore-revs
asdf
는 .git-blame-ignore-revs
사용해 blame 실행에서 잡음을 줄입니다. 더 많은 정보 git blame 문서.
다음과 같이 git blame
과 .git-blame-ignore-revs
을 사용:
git blame --ignore-revs-file .git-blame-ignore-revs ./test/install_command.bats
선택적으로, 수동적으로 파일을 제공하는 대신 모든 blame
에서 해당 파일을 사용하도록 설정:
git config blame.ignoreRevsFile .git-blame-ignore-revs
IDE들에서 이 파일을 사용하도록 설정할 수 있습니다. 예를 들어, VSCode를 사용하실 경우 (GitLens와 함께), 다음을 .vscode/settings.json
에 추가하세요:
{
+ "gitlens.advanced.blame.customArguments": [
+ "--ignore-revs-file",
+ ".git-blame-ignore-revs"
+ ]
+}
로컬 테스트 실행:
./scripts/test.bash
테스트 작성 전 반드시 읽기:
test/
에 존재하는 테스트들scripts/test.bash
에 존재하는 Bats 설정들Bats 디버깅은 때에 따라 어려울 수 있습니다. 디버깅 단순화를 위해, -t
flag로 TAP output을 사용하여 테스트 실행 중 결과물 출력을 위한 특별한 파일 디스크립터 >&3
를 사용할 수 있습니다. 예시:
# test/some_tests.bats
+
+printf "%s\\n" "Will not be printed during bats test/some_tests.bats"
+printf "%s\\n" "Will be printed during bats -t test/some_tests.bats" >&3
bats-core의 더 자세한 문서 Printing to the Terminal.
asdf
는 자동화 배포 툴 Release Please를 사용하여 자동으로 SemVer 버전을 올리고 변동사항을 작성합니다. 이 정보들은 지난 배포들로부터 커밋 history를 읽음으로써 결정됩니다.
유의적 커밋 메세지는 기본 브랜치의 커밋 메세지 형식이 되는 풀 리퀘스트 제목의 형식을 정의합니다. 이것은 GitHub Action에서 강제됩니다 amannn/action-semantic-pull-request
.
관습적인 커밋 다음 형식을 따릅니다:
<type>[optional scope][optional !]: <description>
+
+<!-- examples -->
+fix: some fix
+feat: a new feature
+docs: some documentation update
+docs(website): some change for the website
+feat!: feature with breaking change
<types>
의 모든 목록: feat
, fix
, docs
, style
, refactor
, perf
, test
, build
, ci
, chore
, revert
.
!
: 주요한(breaking) 변화들을 나타냅니다fix
: 새로운 SemVer patch
을 만듭니다feat
: 새로운 SemVer minor
을 만듭니다<type>!
: 새로운 SemVer major
을 만듭니다풀 리퀘스트 제목은 반드시 이 형식을 따라야 합니다.
TIP
풀 리퀘스트 제목을 관습적 커밋 메세지 형식을 사용하세요.
asdf-alpine와 asdf-ubuntu 프로젝트들은 asdf 툴들의 Dockerized 이미지들을 제공하기 위해 진행되고있습니다. 개발 서버의 베이스 혹은 프로덕션 앱들을 위해 docker 이미지들을 사용할 수 있습니다.
`,47)]))}const g=a(n,[["render",l]]);export{k as __pageData,g as default}; diff --git a/assets/ko-kr_contribute_core.md.D-irvj4K.lean.js b/assets/ko-kr_contribute_core.md.D-irvj4K.lean.js new file mode 100644 index 00000000..b87536ce --- /dev/null +++ b/assets/ko-kr_contribute_core.md.D-irvj4K.lean.js @@ -0,0 +1,31 @@ +import{_ as a,c as e,a2 as i,o as t}from"./chunks/framework.BQmytedh.js";const k=JSON.parse('{"title":"asdf","description":"","frontmatter":{},"headers":[],"relativePath":"ko-kr/contribute/core.md","filePath":"ko-kr/contribute/core.md","lastUpdated":1734394996000}'),n={name:"ko-kr/contribute/core.md"};function l(p,s,h,o,r,d){return t(),e("div",null,s[0]||(s[0]=[i(`asdf
코어 기여 가이드.
Github의 asdf
를 fork하거나 clone하세요:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
코어 개발을 위한 툴들은 이 리포지토리의 .tool-versions
에 있습니다. 만약 asdf
가 직접 관리하기를 바라신다면, 다음 플러그인들을 설치하세요:
asdf plugin add bats https://github.com/timgluz/asdf-bats.git
+asdf plugin add shellcheck https://github.com/luizm/asdf-shellcheck.git
+asdf plugin add shfmt https://github.com/luizm/asdf-shfmt.git
asdf
를 개발하기 위한 버전들을 설치하세요:
asdf install
로컬 머신에서 개발 도구를 손상시킬 수 있는 기능을 개발 중일 경우 asdf
를 사용하지 않는 것이 좋을 수 있습니다. 개발 도구들의 원본 목록입니다:
만약 설치된 asdf
에 영향 없이 변화들을 테스트해보시고 싶으시다면, $ASDF_DIR
변수를 리포지토리를 clone한 경로에 지정하시고, 그 다음 임시로 bin
와 shims
디렉토리들을 경로 앞에 추가하세요.
원격 리포지토리에 커밋 혹은 push하기 전에, 당신의 코드를 format, lint, 그리고 locally test하세요. 다음 스크립트/명령어들을 사용하세요:
# Lint
+./scripts/lint.bash --check
+
+# Fix & Format
+./scripts/lint.bash --fix
+
+# Test: all tests
+./scripts/test.bash
+
+# Test: for specific command
+bats test/list_commands.bash
TIP
테스트 추가! - 새로운 기능들과 버그 수정들의 리뷰 속도 향상을 위해 테스트들은 필수적입니다. 풀 리퀘스트 요청을 만드시기 전에 새로운 코드 경로들을 추가해주세요. bats-core 문서 참조
다음은 asdf-vm/asdf
리포지토리에 .gitignore
파일입니다. 우리는 프로젝트에 관련된 특정한 파일들을 무시합니다. 운영체제, 툴, workflows에 관련된 파일들은 글로벌 .gitignore
설정에서 무시되어야합니다, 더 보기.
@/../.gitignore
.git-blame-ignore-revs
asdf
는 .git-blame-ignore-revs
사용해 blame 실행에서 잡음을 줄입니다. 더 많은 정보 git blame 문서.
다음과 같이 git blame
과 .git-blame-ignore-revs
을 사용:
git blame --ignore-revs-file .git-blame-ignore-revs ./test/install_command.bats
선택적으로, 수동적으로 파일을 제공하는 대신 모든 blame
에서 해당 파일을 사용하도록 설정:
git config blame.ignoreRevsFile .git-blame-ignore-revs
IDE들에서 이 파일을 사용하도록 설정할 수 있습니다. 예를 들어, VSCode를 사용하실 경우 (GitLens와 함께), 다음을 .vscode/settings.json
에 추가하세요:
{
+ "gitlens.advanced.blame.customArguments": [
+ "--ignore-revs-file",
+ ".git-blame-ignore-revs"
+ ]
+}
로컬 테스트 실행:
./scripts/test.bash
테스트 작성 전 반드시 읽기:
test/
에 존재하는 테스트들scripts/test.bash
에 존재하는 Bats 설정들Bats 디버깅은 때에 따라 어려울 수 있습니다. 디버깅 단순화를 위해, -t
flag로 TAP output을 사용하여 테스트 실행 중 결과물 출력을 위한 특별한 파일 디스크립터 >&3
를 사용할 수 있습니다. 예시:
# test/some_tests.bats
+
+printf "%s\\n" "Will not be printed during bats test/some_tests.bats"
+printf "%s\\n" "Will be printed during bats -t test/some_tests.bats" >&3
bats-core의 더 자세한 문서 Printing to the Terminal.
asdf
는 자동화 배포 툴 Release Please를 사용하여 자동으로 SemVer 버전을 올리고 변동사항을 작성합니다. 이 정보들은 지난 배포들로부터 커밋 history를 읽음으로써 결정됩니다.
유의적 커밋 메세지는 기본 브랜치의 커밋 메세지 형식이 되는 풀 리퀘스트 제목의 형식을 정의합니다. 이것은 GitHub Action에서 강제됩니다 amannn/action-semantic-pull-request
.
관습적인 커밋 다음 형식을 따릅니다:
<type>[optional scope][optional !]: <description>
+
+<!-- examples -->
+fix: some fix
+feat: a new feature
+docs: some documentation update
+docs(website): some change for the website
+feat!: feature with breaking change
<types>
의 모든 목록: feat
, fix
, docs
, style
, refactor
, perf
, test
, build
, ci
, chore
, revert
.
!
: 주요한(breaking) 변화들을 나타냅니다fix
: 새로운 SemVer patch
을 만듭니다feat
: 새로운 SemVer minor
을 만듭니다<type>!
: 새로운 SemVer major
을 만듭니다풀 리퀘스트 제목은 반드시 이 형식을 따라야 합니다.
TIP
풀 리퀘스트 제목을 관습적 커밋 메세지 형식을 사용하세요.
asdf-alpine와 asdf-ubuntu 프로젝트들은 asdf 툴들의 Dockerized 이미지들을 제공하기 위해 진행되고있습니다. 개발 서버의 베이스 혹은 프로덕션 앱들을 위해 docker 이미지들을 사용할 수 있습니다.
`,47)]))}const g=a(n,[["render",l]]);export{k as __pageData,g as default}; diff --git a/assets/ko-kr_contribute_documentation.md.BgRjCUzf.js b/assets/ko-kr_contribute_documentation.md.BgRjCUzf.js new file mode 100644 index 00000000..82e65a18 --- /dev/null +++ b/assets/ko-kr_contribute_documentation.md.BgRjCUzf.js @@ -0,0 +1,42 @@ +import{_ as i,c as a,a2 as n,o as e}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"문서 & 사이트","description":"","frontmatter":{},"headers":[],"relativePath":"ko-kr/contribute/documentation.md","filePath":"ko-kr/contribute/documentation.md","lastUpdated":1734384735000}'),t={name:"ko-kr/contribute/documentation.md"};function l(p,s,h,k,d,r){return e(),a("div",null,s[0]||(s[0]=[n(`문서 & 사이트 기여 가이드.
Github의 asdf
fork 그리고/혹은 기본 브랜치 Git clone:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
문서 사이트 개발을 위한 도구들은 asdf
의 docs/.tool-versions
에서 관리되고 있습니다. 플러그인들을 추가하기:
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
툴 버전들을 설치하기:
asdf install
docs/package.json
로부터 Node.js dependencies 설치하기:
npm install
VitePress (v2)는 우리가 asdf 문서 사이트를 빌드하기 위해 사용하는 정적 사이트 생성기(SSG)입니다. 이는 사용자가 JavaScript를 사용중이지 않을때도 HTML 폴백을 지원하고, Docsify.js와 결과적으로 VuePress를 대체하기 위해 선택되었습니다. 이는 VuePress로부터 대체된 Docsify & VitePress가 아니면 불가능했을 것입니다. 이것을 제외하면, 최소한의 설정과 함께 마크다운 작성에 집중하는 feature-set은 대부분 비슷합니다.
package.json
은 개발에 필요한 스크립트들을 포함합니다:
로컬 개발 서버 시작하기:
npm run dev
커밋 전 코드 형식 맞추기:
npm run format
asdf
는 PR 제목들의 관습적인 커밋들에 의존하는 자동화된 배포 pipeline을 사용하고 있습니다. 더 자세한 문서는 코어 기여 가이드에서 찾을 수 있습니다.
문서 업데이트를 위한 PR을 만드실때는, PR docs: <description>
형식인 관습적인 커밋 타입 docs
제목을 만들어주세요.
사이트의 설정은 설정을 대표하는 JS 오브젝트의 TypeScript 파일들로 구성되어 있습니다. 그 파일들은 다음과 같습니다:
docs/.vitepress/config.js
: 사이트를 위한 root 설정 파일. VitePress 문서 참조.root 설정 단순화를 위해, navbar 와 sidebar 를 대표하는 더 큰 JS 객체가 추출되었고 로케일로 구분되었습니다. 다음을 참조하세요:
docs/.vitepress/navbars.js
docs/.vitepress/sidebars.js
기본 테마 참고자료에서 위 설정들의 공식 문서를 보실 수 있습니다.
VitePress는 국제화를 공식적으로 지원합니다. root 설정 docs/.vitepress/config.js
는 선택 dropdown에서의 지원되는 로케일들의 URL, 제목과 navbar/sidebar의 설정 레퍼런스들을 정의합니다.
navbar/sidebar 설정들은 앞서 언급한 로케일 별로 나누어지고 내보내기된 설정파일들에 의해 결정됩니다.
각 로케일을 위한 Markdown 내용은 반드시 root 설정안에 locales
의 키들과 같은 이름의 폴더에 위치해야합니다. 다시 말해서:
// docs/.vitepress/config.js
+export default defineConfig({
+ ...
+ locales: {
+ root: {
+ label: "English",
+ lang: "en-US",
+ themeConfig: {
+ nav: navbars.en,
+ sidebar: sidebars.en,
+ },
+ },
+ "pt-br": {
+ label: "Brazilian Portuguese",
+ lang: "pr-br",
+ themeConfig: {
+ nav: navbars.pt_br,
+ sidebar: sidebars.pt_br,
+ },
+ },
+ "zh-hans": {
+ label: "简体中文",
+ lang: "zh-hans",
+ themeConfig: {
+ nav: navbars.zh_hans,
+ sidebar: sidebars.zh_hans,
+ },
+ },
+ },
+})
/pt-BR/
는 docs/pt-BR/
에 위치한 Markdown 파일들의 세트가 똑같이 필요합니다, 예를 들어:
docs
+├─ README.md
+├─ foo.md
+├─ nested
+│ └─ README.md
+└─ pt-BR
+ ├─ README.md
+ ├─ foo.md
+ └─ nested
+ └─ README.md
더 자세한 정보는 공식 VitePress i18n 문서에서 확인 가능합니다.
`,37)]))}const E=i(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/ko-kr_contribute_documentation.md.BgRjCUzf.lean.js b/assets/ko-kr_contribute_documentation.md.BgRjCUzf.lean.js new file mode 100644 index 00000000..82e65a18 --- /dev/null +++ b/assets/ko-kr_contribute_documentation.md.BgRjCUzf.lean.js @@ -0,0 +1,42 @@ +import{_ as i,c as a,a2 as n,o as e}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"문서 & 사이트","description":"","frontmatter":{},"headers":[],"relativePath":"ko-kr/contribute/documentation.md","filePath":"ko-kr/contribute/documentation.md","lastUpdated":1734384735000}'),t={name:"ko-kr/contribute/documentation.md"};function l(p,s,h,k,d,r){return e(),a("div",null,s[0]||(s[0]=[n(`문서 & 사이트 기여 가이드.
Github의 asdf
fork 그리고/혹은 기본 브랜치 Git clone:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
문서 사이트 개발을 위한 도구들은 asdf
의 docs/.tool-versions
에서 관리되고 있습니다. 플러그인들을 추가하기:
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
툴 버전들을 설치하기:
asdf install
docs/package.json
로부터 Node.js dependencies 설치하기:
npm install
VitePress (v2)는 우리가 asdf 문서 사이트를 빌드하기 위해 사용하는 정적 사이트 생성기(SSG)입니다. 이는 사용자가 JavaScript를 사용중이지 않을때도 HTML 폴백을 지원하고, Docsify.js와 결과적으로 VuePress를 대체하기 위해 선택되었습니다. 이는 VuePress로부터 대체된 Docsify & VitePress가 아니면 불가능했을 것입니다. 이것을 제외하면, 최소한의 설정과 함께 마크다운 작성에 집중하는 feature-set은 대부분 비슷합니다.
package.json
은 개발에 필요한 스크립트들을 포함합니다:
로컬 개발 서버 시작하기:
npm run dev
커밋 전 코드 형식 맞추기:
npm run format
asdf
는 PR 제목들의 관습적인 커밋들에 의존하는 자동화된 배포 pipeline을 사용하고 있습니다. 더 자세한 문서는 코어 기여 가이드에서 찾을 수 있습니다.
문서 업데이트를 위한 PR을 만드실때는, PR docs: <description>
형식인 관습적인 커밋 타입 docs
제목을 만들어주세요.
사이트의 설정은 설정을 대표하는 JS 오브젝트의 TypeScript 파일들로 구성되어 있습니다. 그 파일들은 다음과 같습니다:
docs/.vitepress/config.js
: 사이트를 위한 root 설정 파일. VitePress 문서 참조.root 설정 단순화를 위해, navbar 와 sidebar 를 대표하는 더 큰 JS 객체가 추출되었고 로케일로 구분되었습니다. 다음을 참조하세요:
docs/.vitepress/navbars.js
docs/.vitepress/sidebars.js
기본 테마 참고자료에서 위 설정들의 공식 문서를 보실 수 있습니다.
VitePress는 국제화를 공식적으로 지원합니다. root 설정 docs/.vitepress/config.js
는 선택 dropdown에서의 지원되는 로케일들의 URL, 제목과 navbar/sidebar의 설정 레퍼런스들을 정의합니다.
navbar/sidebar 설정들은 앞서 언급한 로케일 별로 나누어지고 내보내기된 설정파일들에 의해 결정됩니다.
각 로케일을 위한 Markdown 내용은 반드시 root 설정안에 locales
의 키들과 같은 이름의 폴더에 위치해야합니다. 다시 말해서:
// docs/.vitepress/config.js
+export default defineConfig({
+ ...
+ locales: {
+ root: {
+ label: "English",
+ lang: "en-US",
+ themeConfig: {
+ nav: navbars.en,
+ sidebar: sidebars.en,
+ },
+ },
+ "pt-br": {
+ label: "Brazilian Portuguese",
+ lang: "pr-br",
+ themeConfig: {
+ nav: navbars.pt_br,
+ sidebar: sidebars.pt_br,
+ },
+ },
+ "zh-hans": {
+ label: "简体中文",
+ lang: "zh-hans",
+ themeConfig: {
+ nav: navbars.zh_hans,
+ sidebar: sidebars.zh_hans,
+ },
+ },
+ },
+})
/pt-BR/
는 docs/pt-BR/
에 위치한 Markdown 파일들의 세트가 똑같이 필요합니다, 예를 들어:
docs
+├─ README.md
+├─ foo.md
+├─ nested
+│ └─ README.md
+└─ pt-BR
+ ├─ README.md
+ ├─ foo.md
+ └─ nested
+ └─ README.md
더 자세한 정보는 공식 VitePress i18n 문서에서 확인 가능합니다.
`,37)]))}const E=i(t,[["render",l]]);export{c as __pageData,E as default}; diff --git a/assets/ko-kr_contribute_first-party-plugins.md.Fbk-rjdV.js b/assets/ko-kr_contribute_first-party-plugins.md.Fbk-rjdV.js new file mode 100644 index 00000000..4be003ad --- /dev/null +++ b/assets/ko-kr_contribute_first-party-plugins.md.Fbk-rjdV.js @@ -0,0 +1 @@ +import{_ as r,c as a,a2 as t,o}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"공식 플러그인","description":"","frontmatter":{},"headers":[],"relativePath":"ko-kr/contribute/first-party-plugins.md","filePath":"ko-kr/contribute/first-party-plugins.md","lastUpdated":1734384735000}'),s={name:"ko-kr/contribute/first-party-plugins.md"};function i(l,e,n,d,f,c){return o(),a("div",null,e[0]||(e[0]=[t('asdf 코어 팀은 일상 업무 환경에서 사용되는 플러그인들을 작성해왔습니다. 이 플러그인들을 관리하고 발전시키는 도움은 언제든 환영입니다. 아래 각 링크들에서 관련된 리포지토리들을 확인하세요:
커뮤니티 플러그인 보기:
asdf-community
공동체: asdf
플러그인의 장기 유지보수를 위한 공동체 주도의 프로젝트입니다.asdf-plugins
shortname 리포지토리: 인기 있는 asdf
플러그인 검색을 위해 asdf
코어가 사용하는 Short-name 목록.asdf-plugin
토픽 검색asdf 코어 팀은 일상 업무 환경에서 사용되는 플러그인들을 작성해왔습니다. 이 플러그인들을 관리하고 발전시키는 도움은 언제든 환영입니다. 아래 각 링크들에서 관련된 리포지토리들을 확인하세요:
커뮤니티 플러그인 보기:
asdf-community
공동체: asdf
플러그인의 장기 유지보수를 위한 공동체 주도의 프로젝트입니다.asdf-plugins
shortname 리포지토리: 인기 있는 asdf
플러그인 검색을 위해 asdf
코어가 사용하는 Short-name 목록.asdf-plugin
토픽 검색asdf
설치는 다음과 같습니다:
asdf
코어 다운로드asdf
설치.tool-versions
설정 파일들을 통해 글로벌 혹은 프로젝트 버전들 설정asdf는 git
& curl
이 필요합니다. 당신이 필요한 패키지 매니저를 구동하기 위한 일부 명령어들의 목록입니다. (몇몇은 나중 단계에서 자동으로 설치될 수 있습니다).
운영체제 | 패키지 매니저 | 명령어 |
---|---|---|
linux | Aptitude | apt install curl git |
linux | DNF | dnf install curl git |
linux | Pacman | pacman -S curl git |
linux | Zypper | zypper install curl git |
macOS | Homebrew | brew install coreutils curl git |
macOS | Spack | spack install coreutils curl git |
노트
시스템 설정에 의해 sudo
가 필요할 수 있습니다.
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
공식 git
방식을 사용할 것을 적극적으로 권장드립니다.
방법 | 명령어 |
---|---|
Homebrew | brew install asdf |
Pacman | git clone https://aur.archlinux.org/asdf-vm.git && cd asdf-vm && makepkg -si 혹은 선호하시는 AUR helper 사용 |
설정에 영향을 미치는 다양한 셸, 운영체제들 & 설치방법의 조합들이 있습니다. 아래 선택사항들 중 가장 적합한 것을 사용하세요.
macOS 사용자들은 이 섹션 마지막 부분에 path_helper
에 경고를 반드시 읽어보세요.
다음을 ~/.bashrc
에 추가하세요:
. "$HOME/.asdf/asdf.sh"
자동완성 설정은 다음을 .bashrc
에 추가하세요:
. "$HOME/.asdf/completions/asdf.bash"
macOS Catalina 혹은 그 이상을 사용하신다면, 기본 셸이 ZSH로 변경되었습니다. Bash로 다시 변경하지 않으셨다면, ZSH의 설치방법을 따라주세요.
다음을 ~/.bash_profile
에 추가하세요:
. "$HOME/.asdf/asdf.sh"
자동완성 설정은 다음을 .bash_profile
에 직접 추가하세요:
. "$HOME/.asdf/completions/asdf.bash"
~/.bashrc
에 asdf.sh
를 추가하세요:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bashrc
자동완성은 Homebrew'의 방법에 따라 설정되어야 합니다 혹은 다음을 이용하세요:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bashrc
macOS Catalina 혹은 그 이상을 사용하신다면, 기본 셸이 ZSH로 변경되었습니다. Bash로 다시 변경하지 않으셨다면, ZSH의 설치방법을 따라주세요.
~/.bash_profile
에 asdf.sh
추가하기:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bash_profile
자동완성은 Homebrew'의 방법에 따라 설정되어야 합니다 혹은 다음을 이용하세요:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bash_profile
다음을 ~/.config/fish/config.fish
에 추가하세요:
source ~/.asdf/asdf.fish
다음 명령어로 자동완성을 설정하세요:
mkdir -p ~/.config/fish/completions; and ln -s ~/.asdf/completions/asdf.fish ~/.config/fish/completions
~/.config/fish/config.fish
에 asdf.fish
를 추가하세요:
echo -e "\\nsource "(brew --prefix asdf)"/libexec/asdf.fish" >> ~/.config/fish/config.fish
자동완성은 Fish 셸 Homebrew에 의해 관리됩니다. 편하죠!
다음을 ~/.config/fish/config.fish
에 추가하세요:
source /opt/asdf-vm/asdf.fish
자동완성은 AUR 패키지를 통한 설치로 자동적으로 설정됩니다.
~/.config/elvish/rc.elv
에 asdf.elv
를 추가하세요:
mkdir -p ~/.config/elvish/lib; ln -s ~/.asdf/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
자동완성은 자동적으로 설정됩니다.
Add asdf.elv
to your ~/.config/elvish/rc.elv
with:
mkdir -p ~/.config/elvish/lib; ln -s (brew --prefix asdf)/libexec/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
자동완성은 자동적으로 설정됩니다.
~/.config/elvish/rc.elv
에 asdf.elv
를 추가하세요:
mkdir -p ~/.config/elvish/lib; ln -s /opt/asdf-vm/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
자동완성은 자동적으로 설정됩니다.
다음을 ~/.zshrc
에 추가하세요:
. "$HOME/.asdf/asdf.sh"
혹은 위 스크립트와 자동완성을 설정하는 asdf를 위한 oh-my-zsh와 같은 ZSH 프레임워크 플러그인을 사용하세요.
자동완성은 ZSH 프레임워크 asdf
플러그인 혹은 다음을 .zshrc
에 추가함으로써 설정됩니다:
# append completions to fpath
+fpath=(\${ASDF_DIR}/completions $fpath)
+# initialise completions with ZSH's compinit
+autoload -Uz compinit && compinit
compinit
설정을 사용중이라면, asdf.sh
를 source하고 난 다음 compinit
가 오도록 해주세요compinit
설정을 사용중이라면, 해당 프레임워크를 source하고 난 다음 compinit
가 오도록 해주세요경고
만약 ZSH 프레임워크를 사용중이라면, fpath
를 통해 새로운 ZSH 자동완성을 사용하려면 관련된 asdf
플러그인이 업데이트 되어야합니다. Oh-My-ZSH asdf 플로그인이 아직 업데이트 되지 않았습니다, ohmyzsh/ohmyzsh#8837 참고.
~/.zshrc
에 asdf.sh
를 추가하세요:
echo -e "\\n. $(brew --prefix asdf)/libexec/asdf.sh" >> \${ZDOTDIR:-~}/.zshrc
혹은 위 스크립트와 자동완성을 설정하는 asdf를 위한 oh-my-zsh와 같은 ZSH 프레임워크 플러그인을 사용하세요.
자동완성은 asdf
ZSH 프레임워크 혹은 Homebrew'의 방법에 따라 설정되어야 합니다. 만약 ZSH 프레임워크를 사용중이라면, fpath
를 통해 새로운 ZSH 자동완성을 사용하려면 관련된 asdf 플러그인이 업데이트 되어야합니다. Oh-My-ZSH asdf 플로그인이 아직 업데이트 되지 않았습니다, ohmyzsh/ohmyzsh#8837 참고.
다음을 ~/.zshrc
에 추가하세요:
. /opt/asdf-vm/asdf.sh
자동완성은 ZSH 친화적인 위치에 있지만, ZSH는 자동완성 사용을 위해 반드시 설정 되어야합니다.
다음을 ~/.config/powershell/profile.ps1
에 추가하세요:
. "$HOME/.asdf/asdf.ps1"
~/.config/powershell/profile.ps1
에 asdf.sh
를 추가하세요:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.ps1\\"" >> ~/.config/powershell/profile.ps1
다음을 ~/.config/powershell/profile.ps1
에 추가하세요:
. /opt/asdf-vm/asdf.ps1
~/.config/nushell/config.nu
에 asdf.nu
를 추가하세요:
"\\n$env.ASDF_DIR = ($env.HOME | path join '.asdf')\\n source " + ($env.HOME | path join '.asdf/asdf.nu') | save --append $nu.config-path
자동완성은 자동적으로 설정됩니다.
~/.config/nushell/config.nu
에 asdf.nu
를 추가하세요:
"\\n$env.ASDF_DIR = (brew --prefix asdf | str trim | into string | path join 'libexec')\\n source " + (brew --prefix asdf | str trim | into string | path join 'libexec/asdf.nu') | save --append $nu.config-path
자동완성은 자동적으로 설정됩니다.
~/.config/nushell/config.nu
에 asdf.nu
를 추가하세요:
"\\n$env.ASDF_DIR = '/opt/asdf-vm/'\\n source /opt/asdf-vm/asdf.nu" | save --append $nu.config-path
자동완성은 자동적으로 설정됩니다.
다음을 ~/.profile
에 추가하세요:
export ASDF_DIR="$HOME/.asdf"
+. "$HOME/.asdf/asdf.sh"
~/.profile
에 asdf.sh
를 추가하세요:
echo -e "\\nexport ASDF_DIR=\\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
+echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
다음을 ~/.profile
에 추가하세요:
export ASDF_DIR="/opt/asdf-vm"
+. /opt/asdf-vm/asdf.sh
asdf
스크립트들은 $PATH
설정한 이후에 프레임워크 (oh-my-zsh 등) source 이후에 source 되어야 합니다.
::: 경고 macOS에서, Bash 혹은 Zsh 셸 시작시에 자동적으로 path_helper
유틸리티를 실행시킵니다. path_helper
는 PATH
(와 MANPATH
)에 항목들을 재배열 시켜 특정 순서를 요구하는 툴들의 일관된 동작을 방해합니다. 이를 방지하기 위해, macOS에서 asdf
는 PATH
앞부분에 (가장 높은 우선순위) 강제로 추가합니다. 이는 ASDF_FORCE_PREPEND
를 통해 변경가능합니다. :::
PATH
업데이트를 위해 셸을 재시작하세요. 새로운 터미널을 여는 경우 대부분 해결됩니다.
asdf
코어 설치를 완료했습니다 🎉
asdf
는 플러그인과 툴을 설치하고, 버전들을 관리해야 유용합니다. 설치 및 관리방법을 이 가이드 아래에서 계속해서 배우세요.
데모 목적으로 우리는 asdf-nodejs
플러그인을 통해 Node.js 설치 & 설정을 해보겠습니다.
각 플러그인은 dependencies 갖고 있어 우리는 플러그인 리포지토리의 목록을 확인해야합니다. asdf-nodejs
는 다음을 가지고 있습니다:
OS | Dependency 설치 |
---|---|
Debian | apt-get install dirmngr gpg curl gawk |
CentOS/ Rocky Linux/ AlmaLinux | yum install gnupg2 curl gawk |
macOS | brew install gpg gawk |
우리는 어떤 플러그인들은 설치-후 훅들을 갖고있어 dependencies 먼저 설치해야합니다.
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
이제 우리는 Node.js를 위한 플러그인을 갖고있어 툴 버전을 설치할 수 있습니다.
우리는 asdf list all nodejs
를 통해 어떤 버전들이 이용가능한지 혹은 asdf list all nodejs 14
를 통해 하위 버전들을 확인가능합니다.
우리는 이용가능한 latest
버전을 설치할 것입니다.
asdf install nodejs latest
노트
asdf
는 정확한 버전들을 강제합니다. latest
는 asdf
가 실행했을때 실제 버전을 찾는 헬퍼입니다.
asdf
는 현재 작업 디렉토리부터 $HOME
디렉토리까지 모든 .tool-versions
파일들에서 버전 검색을 수행합니다. 검색은 asdf
가 관리하는 툴을 실행시킬때 맞춰서 실행됩니다.
::: 경고 툴 실행을 위한 툴 버전을 설정하지 않으면 에러가 발생합니다. asdf current
는 현재 디렉토리로부터 툴 & 버전을 표시함으로써 어떤 툴들이 실행을 실패하는지 관찰할 수 있게합니다. :::
글로벌 기본값들은 $HOME/.tool-versions
에서 관리됩니다. 글로벌 버전을 다음을 이용해 설정하세요:
asdf global nodejs latest
$HOME/.tool-versions
은 다음과 같습니다:
nodejs 16.5.0
어떤 운영체제들은 asdf
가 아닌 시스템에 의해 관리되는 툴들이 이미 설치되어 있습니다, python
이 대표적인 예시입니다. 당신은 시스템에 의한 툴 관리를 위해 asdf
를 설정해야합니다. 버전 참조 섹션를 참고하세요.
로컬 버전들은 (현재 작업 디렉토리) $PWD/.tool-versions
파일에 정의 되어 있습니다. 보통, 이 디렉토리는 하나의 프로젝트의 Git 리포지토리입니다. 툴 버전을 설정하고 싶은 디렉토리에서 다음을 실행시키세요:
asdf local nodejs latest
$PWD/.tool-versions
은 다음과 같습니다:
nodejs 16.5.0
asdf
는 기존의 다른 버전 매니저들의 버전 파일들 마이그레이션을 지원합니다. 예시: rbenv
의 .ruby-version
. 이는 각 플러그인 기준으로 지원됩니다.
asdf-nodejs
는 .nvmrc
와 .node-version
파일들을 지원합니다. 이를 활성화하기 위해, 다음을 asdf
설정 파일 $HOME/.asdfrc
에 추가하세요:
legacy_version_file = yes
더 많은 설정 옵션들은 configuration 페이지를 참고하세요.
asdf
시작하기 가이드가 끝났습니다. 🎉 당신은 이제 당신의 프로젝트의 nodejs
버전들을 관리할 수 있습니다. 같은 방법으로 다른 각각의 툴들의 버전을 관리하세요!
asdf
는 우리가 익숙해져야하는 더 많은 명령어들을 가지고 있고, asdf --help
혹은 asdf
를 통해 확인할 수 있습니다. 명령어들의 코어의 3가지 카테고리로 나눠질 수 있습니다:
asdf
설치는 다음과 같습니다:
asdf
코어 다운로드asdf
설치.tool-versions
설정 파일들을 통해 글로벌 혹은 프로젝트 버전들 설정asdf는 git
& curl
이 필요합니다. 당신이 필요한 패키지 매니저를 구동하기 위한 일부 명령어들의 목록입니다. (몇몇은 나중 단계에서 자동으로 설치될 수 있습니다).
운영체제 | 패키지 매니저 | 명령어 |
---|---|---|
linux | Aptitude | apt install curl git |
linux | DNF | dnf install curl git |
linux | Pacman | pacman -S curl git |
linux | Zypper | zypper install curl git |
macOS | Homebrew | brew install coreutils curl git |
macOS | Spack | spack install coreutils curl git |
노트
시스템 설정에 의해 sudo
가 필요할 수 있습니다.
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
공식 git
방식을 사용할 것을 적극적으로 권장드립니다.
방법 | 명령어 |
---|---|
Homebrew | brew install asdf |
Pacman | git clone https://aur.archlinux.org/asdf-vm.git && cd asdf-vm && makepkg -si 혹은 선호하시는 AUR helper 사용 |
설정에 영향을 미치는 다양한 셸, 운영체제들 & 설치방법의 조합들이 있습니다. 아래 선택사항들 중 가장 적합한 것을 사용하세요.
macOS 사용자들은 이 섹션 마지막 부분에 path_helper
에 경고를 반드시 읽어보세요.
다음을 ~/.bashrc
에 추가하세요:
. "$HOME/.asdf/asdf.sh"
자동완성 설정은 다음을 .bashrc
에 추가하세요:
. "$HOME/.asdf/completions/asdf.bash"
macOS Catalina 혹은 그 이상을 사용하신다면, 기본 셸이 ZSH로 변경되었습니다. Bash로 다시 변경하지 않으셨다면, ZSH의 설치방법을 따라주세요.
다음을 ~/.bash_profile
에 추가하세요:
. "$HOME/.asdf/asdf.sh"
자동완성 설정은 다음을 .bash_profile
에 직접 추가하세요:
. "$HOME/.asdf/completions/asdf.bash"
~/.bashrc
에 asdf.sh
를 추가하세요:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bashrc
자동완성은 Homebrew'의 방법에 따라 설정되어야 합니다 혹은 다음을 이용하세요:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bashrc
macOS Catalina 혹은 그 이상을 사용하신다면, 기본 셸이 ZSH로 변경되었습니다. Bash로 다시 변경하지 않으셨다면, ZSH의 설치방법을 따라주세요.
~/.bash_profile
에 asdf.sh
추가하기:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bash_profile
자동완성은 Homebrew'의 방법에 따라 설정되어야 합니다 혹은 다음을 이용하세요:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bash_profile
다음을 ~/.config/fish/config.fish
에 추가하세요:
source ~/.asdf/asdf.fish
다음 명령어로 자동완성을 설정하세요:
mkdir -p ~/.config/fish/completions; and ln -s ~/.asdf/completions/asdf.fish ~/.config/fish/completions
~/.config/fish/config.fish
에 asdf.fish
를 추가하세요:
echo -e "\\nsource "(brew --prefix asdf)"/libexec/asdf.fish" >> ~/.config/fish/config.fish
자동완성은 Fish 셸 Homebrew에 의해 관리됩니다. 편하죠!
다음을 ~/.config/fish/config.fish
에 추가하세요:
source /opt/asdf-vm/asdf.fish
자동완성은 AUR 패키지를 통한 설치로 자동적으로 설정됩니다.
~/.config/elvish/rc.elv
에 asdf.elv
를 추가하세요:
mkdir -p ~/.config/elvish/lib; ln -s ~/.asdf/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
자동완성은 자동적으로 설정됩니다.
Add asdf.elv
to your ~/.config/elvish/rc.elv
with:
mkdir -p ~/.config/elvish/lib; ln -s (brew --prefix asdf)/libexec/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
자동완성은 자동적으로 설정됩니다.
~/.config/elvish/rc.elv
에 asdf.elv
를 추가하세요:
mkdir -p ~/.config/elvish/lib; ln -s /opt/asdf-vm/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
자동완성은 자동적으로 설정됩니다.
다음을 ~/.zshrc
에 추가하세요:
. "$HOME/.asdf/asdf.sh"
혹은 위 스크립트와 자동완성을 설정하는 asdf를 위한 oh-my-zsh와 같은 ZSH 프레임워크 플러그인을 사용하세요.
자동완성은 ZSH 프레임워크 asdf
플러그인 혹은 다음을 .zshrc
에 추가함으로써 설정됩니다:
# append completions to fpath
+fpath=(\${ASDF_DIR}/completions $fpath)
+# initialise completions with ZSH's compinit
+autoload -Uz compinit && compinit
compinit
설정을 사용중이라면, asdf.sh
를 source하고 난 다음 compinit
가 오도록 해주세요compinit
설정을 사용중이라면, 해당 프레임워크를 source하고 난 다음 compinit
가 오도록 해주세요경고
만약 ZSH 프레임워크를 사용중이라면, fpath
를 통해 새로운 ZSH 자동완성을 사용하려면 관련된 asdf
플러그인이 업데이트 되어야합니다. Oh-My-ZSH asdf 플로그인이 아직 업데이트 되지 않았습니다, ohmyzsh/ohmyzsh#8837 참고.
~/.zshrc
에 asdf.sh
를 추가하세요:
echo -e "\\n. $(brew --prefix asdf)/libexec/asdf.sh" >> \${ZDOTDIR:-~}/.zshrc
혹은 위 스크립트와 자동완성을 설정하는 asdf를 위한 oh-my-zsh와 같은 ZSH 프레임워크 플러그인을 사용하세요.
자동완성은 asdf
ZSH 프레임워크 혹은 Homebrew'의 방법에 따라 설정되어야 합니다. 만약 ZSH 프레임워크를 사용중이라면, fpath
를 통해 새로운 ZSH 자동완성을 사용하려면 관련된 asdf 플러그인이 업데이트 되어야합니다. Oh-My-ZSH asdf 플로그인이 아직 업데이트 되지 않았습니다, ohmyzsh/ohmyzsh#8837 참고.
다음을 ~/.zshrc
에 추가하세요:
. /opt/asdf-vm/asdf.sh
자동완성은 ZSH 친화적인 위치에 있지만, ZSH는 자동완성 사용을 위해 반드시 설정 되어야합니다.
다음을 ~/.config/powershell/profile.ps1
에 추가하세요:
. "$HOME/.asdf/asdf.ps1"
~/.config/powershell/profile.ps1
에 asdf.sh
를 추가하세요:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.ps1\\"" >> ~/.config/powershell/profile.ps1
다음을 ~/.config/powershell/profile.ps1
에 추가하세요:
. /opt/asdf-vm/asdf.ps1
~/.config/nushell/config.nu
에 asdf.nu
를 추가하세요:
"\\n$env.ASDF_DIR = ($env.HOME | path join '.asdf')\\n source " + ($env.HOME | path join '.asdf/asdf.nu') | save --append $nu.config-path
자동완성은 자동적으로 설정됩니다.
~/.config/nushell/config.nu
에 asdf.nu
를 추가하세요:
"\\n$env.ASDF_DIR = (brew --prefix asdf | str trim | into string | path join 'libexec')\\n source " + (brew --prefix asdf | str trim | into string | path join 'libexec/asdf.nu') | save --append $nu.config-path
자동완성은 자동적으로 설정됩니다.
~/.config/nushell/config.nu
에 asdf.nu
를 추가하세요:
"\\n$env.ASDF_DIR = '/opt/asdf-vm/'\\n source /opt/asdf-vm/asdf.nu" | save --append $nu.config-path
자동완성은 자동적으로 설정됩니다.
다음을 ~/.profile
에 추가하세요:
export ASDF_DIR="$HOME/.asdf"
+. "$HOME/.asdf/asdf.sh"
~/.profile
에 asdf.sh
를 추가하세요:
echo -e "\\nexport ASDF_DIR=\\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
+echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
다음을 ~/.profile
에 추가하세요:
export ASDF_DIR="/opt/asdf-vm"
+. /opt/asdf-vm/asdf.sh
asdf
스크립트들은 $PATH
설정한 이후에 프레임워크 (oh-my-zsh 등) source 이후에 source 되어야 합니다.
::: 경고 macOS에서, Bash 혹은 Zsh 셸 시작시에 자동적으로 path_helper
유틸리티를 실행시킵니다. path_helper
는 PATH
(와 MANPATH
)에 항목들을 재배열 시켜 특정 순서를 요구하는 툴들의 일관된 동작을 방해합니다. 이를 방지하기 위해, macOS에서 asdf
는 PATH
앞부분에 (가장 높은 우선순위) 강제로 추가합니다. 이는 ASDF_FORCE_PREPEND
를 통해 변경가능합니다. :::
PATH
업데이트를 위해 셸을 재시작하세요. 새로운 터미널을 여는 경우 대부분 해결됩니다.
asdf
코어 설치를 완료했습니다 🎉
asdf
는 플러그인과 툴을 설치하고, 버전들을 관리해야 유용합니다. 설치 및 관리방법을 이 가이드 아래에서 계속해서 배우세요.
데모 목적으로 우리는 asdf-nodejs
플러그인을 통해 Node.js 설치 & 설정을 해보겠습니다.
각 플러그인은 dependencies 갖고 있어 우리는 플러그인 리포지토리의 목록을 확인해야합니다. asdf-nodejs
는 다음을 가지고 있습니다:
OS | Dependency 설치 |
---|---|
Debian | apt-get install dirmngr gpg curl gawk |
CentOS/ Rocky Linux/ AlmaLinux | yum install gnupg2 curl gawk |
macOS | brew install gpg gawk |
우리는 어떤 플러그인들은 설치-후 훅들을 갖고있어 dependencies 먼저 설치해야합니다.
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
이제 우리는 Node.js를 위한 플러그인을 갖고있어 툴 버전을 설치할 수 있습니다.
우리는 asdf list all nodejs
를 통해 어떤 버전들이 이용가능한지 혹은 asdf list all nodejs 14
를 통해 하위 버전들을 확인가능합니다.
우리는 이용가능한 latest
버전을 설치할 것입니다.
asdf install nodejs latest
노트
asdf
는 정확한 버전들을 강제합니다. latest
는 asdf
가 실행했을때 실제 버전을 찾는 헬퍼입니다.
asdf
는 현재 작업 디렉토리부터 $HOME
디렉토리까지 모든 .tool-versions
파일들에서 버전 검색을 수행합니다. 검색은 asdf
가 관리하는 툴을 실행시킬때 맞춰서 실행됩니다.
::: 경고 툴 실행을 위한 툴 버전을 설정하지 않으면 에러가 발생합니다. asdf current
는 현재 디렉토리로부터 툴 & 버전을 표시함으로써 어떤 툴들이 실행을 실패하는지 관찰할 수 있게합니다. :::
글로벌 기본값들은 $HOME/.tool-versions
에서 관리됩니다. 글로벌 버전을 다음을 이용해 설정하세요:
asdf global nodejs latest
$HOME/.tool-versions
은 다음과 같습니다:
nodejs 16.5.0
어떤 운영체제들은 asdf
가 아닌 시스템에 의해 관리되는 툴들이 이미 설치되어 있습니다, python
이 대표적인 예시입니다. 당신은 시스템에 의한 툴 관리를 위해 asdf
를 설정해야합니다. 버전 참조 섹션를 참고하세요.
로컬 버전들은 (현재 작업 디렉토리) $PWD/.tool-versions
파일에 정의 되어 있습니다. 보통, 이 디렉토리는 하나의 프로젝트의 Git 리포지토리입니다. 툴 버전을 설정하고 싶은 디렉토리에서 다음을 실행시키세요:
asdf local nodejs latest
$PWD/.tool-versions
은 다음과 같습니다:
nodejs 16.5.0
asdf
는 기존의 다른 버전 매니저들의 버전 파일들 마이그레이션을 지원합니다. 예시: rbenv
의 .ruby-version
. 이는 각 플러그인 기준으로 지원됩니다.
asdf-nodejs
는 .nvmrc
와 .node-version
파일들을 지원합니다. 이를 활성화하기 위해, 다음을 asdf
설정 파일 $HOME/.asdfrc
에 추가하세요:
legacy_version_file = yes
더 많은 설정 옵션들은 configuration 페이지를 참고하세요.
asdf
시작하기 가이드가 끝났습니다. 🎉 당신은 이제 당신의 프로젝트의 nodejs
버전들을 관리할 수 있습니다. 같은 방법으로 다른 각각의 툴들의 버전을 관리하세요!
asdf
는 우리가 익숙해져야하는 더 많은 명령어들을 가지고 있고, asdf --help
혹은 asdf
를 통해 확인할 수 있습니다. 명령어들의 코어의 3가지 카테고리로 나눠질 수 있습니다:
asdf
는 툴 버전 매니저입니다. 모든 툴 버전 정의들은 당신의 팀들과 공유되는 프로젝트의 Git 리포지토리에서 확인할 수 있는 하나의 (.tool-versions
) 파일에 있으며, 모든 사람들이 정확히 같은 버전의 툴들을 사용하게 합니다.
기존의 작업 방식은 여러 CLI 버전 매니저들, 각각의 고유한 API, 설정 파일들 그리고 구현이 필요했었습니다 (e.g. $PATH
조정, shims, 환경 변수 등...). asdf
는 개발 워크플로우 단순화를 위해 단 하나의 인터페이스와 설정파일을 제공하고 단순한 플러그인 인터페이스를 통해 모든 툴과 런타임들 확장가능합니다.
asdf
코어가 셸 설정과 함께 설치되면, 플러그인들이 특정 툴들을 관리하기 위해 설치됩니다. 플러그인에 의해 한가지 툴이 설치되면, shims들을 가진 실행파일들이 각각의 툴들을 위해 생성됩니다. 실행파일들을 실행하려 할 때, .tool-versions
에 설정된 툴의 버전을 통해 asdf
가 어떤 버전을 실행시킬 지 결정하고 해당 shim이 대신 실행됩니다.
nvm, n 그리고 rbenv과 같은 툴들은 설치된 실행파일을 위한 shim들을 만드는 셸 스크립트들로 작성되어 있습니다.
asdf
는 매우 비슷하고 툴/런타임 버전 관리의 영역에서 경쟁하기 위해 만들어졌습니다. asdf
의 차별화 요소는 플러그인 시스템이 툴/런타임 별 매니저의 필요성, 각기 다른 명령어들, 그리고 리포지토리에 각각 *-version
파일들을 제거하였다는 것입니다.
현재 디렉토리에 따라 환경 변수들을 load와 unload 할 수 있는 새로운 기능을 기존의 셸에 추가합니다.
asdf
는 환경 변수들을 관리하지 않습니다만, asdf-direnv
플러그인을 통해 direnv 동작를 asdf
에 통합할 수 있습니다.
direnv 문서에서 더보기.
macOS (혹은 Linux)에서의 패키지 매니저 부재
Homebrew는 패키지들과 upstream dependencies들을 관리합니다. asdf
는 upstream dependencies들을 관리하지 않고, 패키지 매니저가 아니고, 우리가 dependency 목록들을 작게 유지하므로, 사용자가 직접 관리해야합니다.
Homebrew 문서에서 더보기.
Nix는 패키지 관리와 시스템 설정에 창의적으로 접근하는 툴입니다.
NixOS는, asdf
가 제공하지 않는, 각 툴의 전체 dependency tree를 통해 패키지들의 정확한 버전들을 관리함으로써 재현가능한 환경 구축을 목표로 합니다. NixOS는 자신만의 프로그래밍 언어, 많은 CLI 툴들, 그리고 6000개가 넘는 패키지 컬렉션을 통해 해당 기능을 제공합니다.
다시 한번 말씀드리지만, asdf
는 upstream dependencies들을 관리하지 않으며 패키지 매니저가 아닙니다.
NixOS 문서에서 더보기.
asdf
는 팀들이 플러그인 시스템을 통해 다양한 툴들의 지원 그리고 셸 설정에 포함시킬 하나의 셸 스크립트의 단순함 과 친숙성 을 통해 정확히 같은 버전의 툴들을 사용하는 것을 보장합니다.
노트
asdf
는 시스템 패키지 매니저가 아닙니다. 이것은 툴 버전 매니저입니다. 단지 어떠한 툴을 위한 플러그인을 생성하고 그것의 버전을 asdf
로 관리할 수 있다고 해서, 그 특정한 툴을 버전 관리를 위한 최선의 방법을 의미하는 것은 아닙니다.
asdf
는 툴 버전 매니저입니다. 모든 툴 버전 정의들은 당신의 팀들과 공유되는 프로젝트의 Git 리포지토리에서 확인할 수 있는 하나의 (.tool-versions
) 파일에 있으며, 모든 사람들이 정확히 같은 버전의 툴들을 사용하게 합니다.
기존의 작업 방식은 여러 CLI 버전 매니저들, 각각의 고유한 API, 설정 파일들 그리고 구현이 필요했었습니다 (e.g. $PATH
조정, shims, 환경 변수 등...). asdf
는 개발 워크플로우 단순화를 위해 단 하나의 인터페이스와 설정파일을 제공하고 단순한 플러그인 인터페이스를 통해 모든 툴과 런타임들 확장가능합니다.
asdf
코어가 셸 설정과 함께 설치되면, 플러그인들이 특정 툴들을 관리하기 위해 설치됩니다. 플러그인에 의해 한가지 툴이 설치되면, shims들을 가진 실행파일들이 각각의 툴들을 위해 생성됩니다. 실행파일들을 실행하려 할 때, .tool-versions
에 설정된 툴의 버전을 통해 asdf
가 어떤 버전을 실행시킬 지 결정하고 해당 shim이 대신 실행됩니다.
nvm, n 그리고 rbenv과 같은 툴들은 설치된 실행파일을 위한 shim들을 만드는 셸 스크립트들로 작성되어 있습니다.
asdf
는 매우 비슷하고 툴/런타임 버전 관리의 영역에서 경쟁하기 위해 만들어졌습니다. asdf
의 차별화 요소는 플러그인 시스템이 툴/런타임 별 매니저의 필요성, 각기 다른 명령어들, 그리고 리포지토리에 각각 *-version
파일들을 제거하였다는 것입니다.
현재 디렉토리에 따라 환경 변수들을 load와 unload 할 수 있는 새로운 기능을 기존의 셸에 추가합니다.
asdf
는 환경 변수들을 관리하지 않습니다만, asdf-direnv
플러그인을 통해 direnv 동작를 asdf
에 통합할 수 있습니다.
direnv 문서에서 더보기.
macOS (혹은 Linux)에서의 패키지 매니저 부재
Homebrew는 패키지들과 upstream dependencies들을 관리합니다. asdf
는 upstream dependencies들을 관리하지 않고, 패키지 매니저가 아니고, 우리가 dependency 목록들을 작게 유지하므로, 사용자가 직접 관리해야합니다.
Homebrew 문서에서 더보기.
Nix는 패키지 관리와 시스템 설정에 창의적으로 접근하는 툴입니다.
NixOS는, asdf
가 제공하지 않는, 각 툴의 전체 dependency tree를 통해 패키지들의 정확한 버전들을 관리함으로써 재현가능한 환경 구축을 목표로 합니다. NixOS는 자신만의 프로그래밍 언어, 많은 CLI 툴들, 그리고 6000개가 넘는 패키지 컬렉션을 통해 해당 기능을 제공합니다.
다시 한번 말씀드리지만, asdf
는 upstream dependencies들을 관리하지 않으며 패키지 매니저가 아닙니다.
NixOS 문서에서 더보기.
asdf
는 팀들이 플러그인 시스템을 통해 다양한 툴들의 지원 그리고 셸 설정에 포함시킬 하나의 셸 스크립트의 단순함 과 친숙성 을 통해 정확히 같은 버전의 툴들을 사용하는 것을 보장합니다.
노트
asdf
는 시스템 패키지 매니저가 아닙니다. 이것은 툴 버전 매니저입니다. 단지 어떠한 툴을 위한 플러그인을 생성하고 그것의 버전을 asdf
로 관리할 수 있다고 해서, 그 특정한 툴을 버전 관리를 위한 최선의 방법을 의미하는 것은 아닙니다.
다음 목록은 asdf
에서 이용가능한 모든 명령어들입니다. 해당 목록은 asdf help
명령어를 통해 확인가능합니다.
MANAGE PLUGINS
+asdf plugin add <name> [<git-url>] Add a plugin from the plugin repo OR,
+ add a Git repo as a plugin by
+ specifying the name and repo url
+asdf plugin list [--urls] [--refs] List installed plugins. Optionally show
+ git urls and git-ref
+asdf plugin list all List plugins registered on asdf-plugins
+ repository with URLs
+asdf plugin remove <name> Remove plugin and package versions
+asdf plugin update <name> [<git-ref>] Update a plugin to latest commit on
+ default branch or a particular git-ref
+asdf plugin update --all Update all plugins to latest commit on
+ default branch
+
+
+MANAGE PACKAGES
+asdf current Display current version set or being
+ used for all packages
+asdf current <name> Display current version set or being
+ used for package
+asdf global <name> <version> Set the package global version
+asdf global <name> latest[:<version>] Set the package global version to the
+ latest provided version
+asdf help <name> [<version>] Output documentation for plugin and tool
+asdf install Install all the package versions listed
+ in the .tool-versions file
+asdf install <name> Install one tool at the version
+ specified in the .tool-versions file
+asdf install <name> <version> Install a specific version of a package
+asdf install <name> latest[:<version>] Install the latest stable version of a
+ package, or with optional version,
+ install the latest stable version that
+ begins with the given string
+asdf latest <name> [<version>] Show latest stable version of a package
+asdf latest --all Show latest stable version of all the
+ packages and if they are installed
+asdf list <name> [version] List installed versions of a package and
+ optionally filter the versions
+asdf list all <name> [<version>] List all versions of a package and
+ optionally filter the returned versions
+asdf local <name> <version> Set the package local version
+asdf local <name> latest[:<version>] Set the package local version to the
+ latest provided version
+asdf shell <name> <version> Set the package version to
+ \`ASDF_\${LANG}_VERSION\` in the current shell
+asdf uninstall <name> <version> Remove a specific version of a package
+asdf where <name> [<version>] Display install path for an installed
+ or current version
+asdf which <command> Display the path to an executable
+
+
+UTILS
+asdf exec <command> [args...] Executes the command shim for current version
+asdf env <command> [util] Runs util (default: \`env\`) inside the
+ environment used for command shim execution.
+asdf info Print OS, Shell and ASDF debug information.
+asdf version Print the currently installed version of ASDF
+asdf reshim <name> <version> Recreate shims for version of a package
+asdf shim-versions <command> List the plugins and versions that
+ provide a command
+asdf update Update asdf to the latest stable release
+asdf update --head Update asdf to the latest on the master branch
+
+RESOURCES
+GitHub: https://github.com/asdf-vm/asdf
+Docs: https://asdf-vm.com
다음 목록은 asdf
에서 이용가능한 모든 명령어들입니다. 해당 목록은 asdf help
명령어를 통해 확인가능합니다.
MANAGE PLUGINS
+asdf plugin add <name> [<git-url>] Add a plugin from the plugin repo OR,
+ add a Git repo as a plugin by
+ specifying the name and repo url
+asdf plugin list [--urls] [--refs] List installed plugins. Optionally show
+ git urls and git-ref
+asdf plugin list all List plugins registered on asdf-plugins
+ repository with URLs
+asdf plugin remove <name> Remove plugin and package versions
+asdf plugin update <name> [<git-ref>] Update a plugin to latest commit on
+ default branch or a particular git-ref
+asdf plugin update --all Update all plugins to latest commit on
+ default branch
+
+
+MANAGE PACKAGES
+asdf current Display current version set or being
+ used for all packages
+asdf current <name> Display current version set or being
+ used for package
+asdf global <name> <version> Set the package global version
+asdf global <name> latest[:<version>] Set the package global version to the
+ latest provided version
+asdf help <name> [<version>] Output documentation for plugin and tool
+asdf install Install all the package versions listed
+ in the .tool-versions file
+asdf install <name> Install one tool at the version
+ specified in the .tool-versions file
+asdf install <name> <version> Install a specific version of a package
+asdf install <name> latest[:<version>] Install the latest stable version of a
+ package, or with optional version,
+ install the latest stable version that
+ begins with the given string
+asdf latest <name> [<version>] Show latest stable version of a package
+asdf latest --all Show latest stable version of all the
+ packages and if they are installed
+asdf list <name> [version] List installed versions of a package and
+ optionally filter the versions
+asdf list all <name> [<version>] List all versions of a package and
+ optionally filter the returned versions
+asdf local <name> <version> Set the package local version
+asdf local <name> latest[:<version>] Set the package local version to the
+ latest provided version
+asdf shell <name> <version> Set the package version to
+ \`ASDF_\${LANG}_VERSION\` in the current shell
+asdf uninstall <name> <version> Remove a specific version of a package
+asdf where <name> [<version>] Display install path for an installed
+ or current version
+asdf which <command> Display the path to an executable
+
+
+UTILS
+asdf exec <command> [args...] Executes the command shim for current version
+asdf env <command> [util] Runs util (default: \`env\`) inside the
+ environment used for command shim execution.
+asdf info Print OS, Shell and ASDF debug information.
+asdf version Print the currently installed version of ASDF
+asdf reshim <name> <version> Recreate shims for version of a package
+asdf shim-versions <command> List the plugins and versions that
+ provide a command
+asdf update Update asdf to the latest stable release
+asdf update --head Update asdf to the latest on the master branch
+
+RESOURCES
+GitHub: https://github.com/asdf-vm/asdf
+Docs: https://asdf-vm.com
asdf
의 설정은 공유가능한 .tool-versions
파일들 뿐만 아니라 .asdfrc
를 통한 특정한 사용자 맞춤화 및 환경 변수들을 모두 포함합니다.
.tool-versions
한 디렉토리에 .tool-versions
파일이 존재하면, 해당 파일에 정의된 툴 버전들은 해당 디렉토리와 모든 하위 디렉토리에서 사용됩니다.
노트
글로벌 기본값들은 $HOME/.tool-versions
파일에 설정 가능합니다
.tool-versions
파일의 형태는 다음과 같습니다:
ruby 2.5.3
+nodejs 10.15.0
다음과 같이 주석을 넣을 수 있습니다:
ruby 2.5.3 # This is a comment
+# This is another comment
+nodejs 10.15.0
버전들은 다음과 같은 형식일 수 있습니다:
10.15.0
- 실제 버전. 바이너리 다운로드를 지원하는 플러그인은 바이너리를 다운로드합니다.ref:v1.0.2-a
혹은 ref:39cb398vb39
- 지정된 태그/커밋/브랜치 Github로부터 다운로드하고 컴파일됩니다.path:~/src/elixir
- 사용하려는 툴의 맞춤 컴파일 버전을 위한 경로. 언어 개발자들 등이 사용합니다.system
- 이 키워드는 asdf가 asdf에 의해 관리되지 않는 시스템 버전 툴의 버전을 사용하게합니다.TIP
다양한 버전들은 공백으로 구분하여 설정될 수 있습니다. 예를 들어, 파이썬 3.7.2
를 사용하고, 파이썬 2.7.15
로 그리고 마지막으로 system
파이썬으로 폴백하려면, 다음을 .tool-versions
에 추가해주세요.
python 3.7.2 2.7.15 system
.tool-version
파일에 정의된 모든 툴들을 설치하려면 .tool-version
파일이 포함된 디렉토리에서 다른 인수 없이 asdf install
을 실행합니다.
.tool-versions
파일에 정의된 하나의 툴을 설치하려면 .tool-version
파일이 포함된 디렉토리에서 asdf install <name>
를 실행합니다. 이 툴은 .tool-versions
파일에 정의된 버전으로 설치됩니다.
해당 파일은 직접 편집하거나 asdf local
명령어(또는 asdf global
명령어)를 사용하여 업데이트해 주세요.
.asdfrc
.asdfrc
파일은 사용자의 머신별 설정을 정의합니다.
\${HOME}/.asdfrc
는 asdf가 사용하는 기본 위치입니다. 이는 환경 변수 ASDF_CONFIG_FILE
로 설정 가능합니다.
아래 파일은 필수적인 형식과 기본값들을 보여줍니다:
legacy_version_file = no
+use_release_candidates = no
+always_keep_download = no
+plugin_repository_last_check_duration = 60
+disable_plugin_short_name_repository = no
+concurrency = auto
legacy_version_file
지원되는 플러그인들은 다른 버전 매니저에서 사용되는 버전 파일들을 읽을 수 있습니다, 예를 들어, 루비의 rbenv
에서 .ruby-version
.
동기화 이벤트는 다음 명령어들을 실행할 때 발생합니다:
asdf plugin add <name>
asdf plugin list all
asdf plugin add <name> <git-url>
플러그인 동기화를 트리거하지 않습니다.
노트
해당 값을 never
로 설정하는 것은 플러그인 리포지토리의 초기 동기화를 막지 않고, 해당 기능을 위해 disable_plugin_short_name_repository
를 참조하세요.
disable_plugin_short_name_repository
asdf 플러그인 short-name 리포지토리의 동기화를 비활성화합니다. short-name 리포지토리가 비활성화 되어있으면 동기화 이벤트가 조기 종료됩니다.
',6)),e("table",x,[t[31]||(t[31]=e("thead",null,[e("tr",null,[e("th",{style:{"text-align":"left"}},"옵션"),e("th",{style:{"text-align":"left"}},"설명")])],-1)),e("tbody",null,[e("tr",null,[e("td",_,[t[27]||(t[27]=e("code",null,"no",-1)),t[28]||(t[28]=l()),o(d,{type:"tip",text:"기본",vertical:"middle"})]),t[29]||(t[29]=e("td",{style:{"text-align":"left"}},"동기화 이벤트에서 asdf 플러그인 리포지토리 clone 또는 업데이트",-1))]),t[30]||(t[30]=e("tr",null,[e("td",{style:{"text-align":"left"}},[e("code",null,"yes")]),e("td",{style:{"text-align":"left"}},"short-name 플러그인 리포지토리 비활성화")],-1))])]),t[40]||(t[40]=a('동기화 이벤트는 다음 명령어들을 실행할 때 발생합니다:
asdf plugin add <name>
asdf plugin list all
asdf plugin add <name> <git-url>
는 플러그인 동기화를 트리거하지 않습니다.
노트
플러그인 short-name repository를 비활성화해도 리포지토리가 이미 동기화된 경우 제거되지 않습니다. rm --recursive --trash $ASDF_DATA_DIR/repository
로 플러그인 리포지토리를 제거합니다.
플러그인 short-name 리포지토리를 비활성화해도 그 리포지토리로부터 설치된 이전의 플러그인은 제거되지 않습니다. asdf plugin remove <name>
을 사용하여 플러그인을 제거할 수 있습니다. 플러그인을 제거하면 해당 툴의 모든 설치된 버전이 제거됩니다.
concurrency
컴파일 중에 사용할 기본 코어 수입니다.
옵션 | 설명 |
---|---|
정수 | 소스 코드를 컴파일할 때 사용할 코어 수 |
auto | nproc , sysctl hw.ncpu , /proc/cpuinfo 또는 1 을 순차적으로 사용하여 코어 수를 계산합니다 |
노트: ASDF_CONCURRENCY
환경 변수가 존재하는 경우 우선 순위를 갖습니다.
다음에서 사용자 맞춤 코드를 실행이 가능합니다:
예를 들어 foo
라는 플러그인이 설치되어 있고 bar
라는 실행파일이 제공된 경우, 다음 훅들을 사용하여 사용자 맞춤 코드를 먼저 실행할 수 있습니다:
pre_foo_bar = echo Executing with args: $@
지원되는 패턴은 다음과 같습니다:
pre_<plugin_name>_<command>
pre_asdf_download_<plugin_name>
{pre,post}_asdf_{install,reshim,uninstall}_<plugin_name>
$1
: 풀 버전{pre,post}_asdf_plugin_{add,update,remove,reshim}
$1
: 플러그인 이름{pre,post}_asdf_plugin_{add,update,remove}_<plugin_name>
어떤 명령어 훅들이 어떤 명령어 이전 또는 이후에 실행되는 지에 대한 자세한 내용은 플러그인 생성하기를 참조하세요.
환경 변수 설정은 시스템과 셸에 따라 다릅니다. 기본 위치는 설치 위치와 방식(Git clone, Homebrew, AUR)에 달려있습니다.
환경 변수들은 일반적으로 asdf.sh
/asdf.fish
등을 source하기 전에 설정됩니다. Elvish의 경우는, 상단에서 use asdf
로 설정합니다.
다음은 Bash 셸에서 사용법에 관한 설명입니다.
ASDF_CONFIG_FILE
.asdfrc
설정 파일의 경로. 임의의 위치로 설정 가능합니다. 절대 경로여야 합니다.
$HOME/.asdfrc
가 사용됩니다.export ASDF_CONFIG_FILE=/home/john_doe/.config/asdf/.asdfrc
ASDF_DEFAULT_TOOL_VERSIONS_FILENAME
툴 이름과 버전을 저장하는 파일의 파일이름입니다. 임의의 유효한 파일 이름이면 됩니다. 일반적으로, .tool-version
파일들을 무시하고 싶을 때 해당 값을 설정하세요.
.tool-versions
가 사용됩니다.export ASDF_DEFAULT_TOOL_VERSIONS_FILENAME=tool_versions
ASDF_DIR
asdf
코어 스크립트의 위치. 임의의 위치로 설정할 수 있습니다. 절대 경로여야 합니다.
bin/asdf
실행파일의 한 단계 상위 디렉토리가 사용됩니다.export ASDF_DIR=/home/john_doe/.config/asdf
ASDF_DATA_DIR
asdf
가 플러그인, shim들, 툴 버전들을 설치하는 위치. 임의의 위치로 설정할 수 있습니다. 절대 경로여야 합니다.
$HOME/.asdf
존재 시 사용, 존재하지 않는 경우 ASDF_DIR
사용export ASDF_DATA_DIR=/home/john_doe/.asdf
ASDF_CONCURRENCY
소스 코드를 컴파일할 때 사용할 코어 수입니다. 설정하면 이 값이 asdf 설정 concurrency
값보다 우선 시 됩니다.
concurrency
값이 사용됩니다.export ASDF_CONCURRENCY=32
ASDF_FORCE_PREPEND
PATH
의 맨 앞(최우선순위) 부분에 asdf
shim과 경로 디렉토리를 추가할 것인지 여부.
yes
가 기본값; 다른 시스템에서는 no
가 기본값yes
: PATH
의 앞 부분에 asdf
디렉토리 강제 추가yes
이외의 다른 문자열: PATH
의 앞 부분에 asdf
디렉토리 강제로 추가하지 않음ASDF_FORCE_PREPEND=no . "<path-to-asdf-directory>/asdf.sh"
다음을 이용한 간단한 asdf 설치는:
$HOME/.asdf
설치 위치.asdfrc
파일 없음다음의 결과가 나오게 됩니다:
항목 | 값 | 값이 세팅되는 과정 |
---|---|---|
config file location | $HOME/.asdfrc | ASDF_CONFIG_FILE 가 비었으므로, $HOME/.asdfrc 을 사용 |
default tool versions filename | .tool-versions | ASDF_DEFAULT_TOOL_VERSIONS_FILENAME 가 비었으므로, .tool-versions 을 사용 |
asdf dir | $HOME/.asdf | ASDF_DIR 가 비었으므로, bin/asdf 의 한 단계 상위 디렉토리 사용 |
asdf data dir | $HOME/.asdf | ASDF_DATA_DIR 가 비었으므로, $HOME/.asdf 를 $HOME 으로 사용. |
concurrency | auto | ASDF_CONCURRENCY 가 비었으므로, 기본 설정의 concurrency 값에 의존 |
legacy_version_file | no | 맞춤 .asdfrc 없음, 기본 설정 사용 |
use_release_candidates | no | 맞춤 .asdfrc 없음, 기본 설정 사용 |
always_keep_download | no | 맞춤 .asdfrc 없음, 기본 설정 사용 |
plugin_repository_last_check_duration | 60 | 맞춤 .asdfrc 없음, 기본 설정 사용 |
disable_plugin_short_name_repository | no | 맞춤 .asdfrc 없음, 기본 설정 사용 |
이 섹션은 패키지 관리자 및 통합자에게 유용한 asdf
내부 설정을 설명하므로 일반 사용자들은 이 섹션에 대해 걱정할 필요가 없습니다.
$ASDF_DIR/asdf_updates_disabled
: 이 파일이 있으면 asdf update
명령어를 통한 업데이트가 (내용과 무관하게) 비활성화됩니다. 이는 Pacman이나 Homebrew와 같은 패키지 매니저들이 특정 설치에 올바른 업데이트 방법이 사용되었는지 확인하는 데 사용됩니다.asdf
의 설정은 공유가능한 .tool-versions
파일들 뿐만 아니라 .asdfrc
를 통한 특정한 사용자 맞춤화 및 환경 변수들을 모두 포함합니다.
.tool-versions
한 디렉토리에 .tool-versions
파일이 존재하면, 해당 파일에 정의된 툴 버전들은 해당 디렉토리와 모든 하위 디렉토리에서 사용됩니다.
노트
글로벌 기본값들은 $HOME/.tool-versions
파일에 설정 가능합니다
.tool-versions
파일의 형태는 다음과 같습니다:
ruby 2.5.3
+nodejs 10.15.0
다음과 같이 주석을 넣을 수 있습니다:
ruby 2.5.3 # This is a comment
+# This is another comment
+nodejs 10.15.0
버전들은 다음과 같은 형식일 수 있습니다:
10.15.0
- 실제 버전. 바이너리 다운로드를 지원하는 플러그인은 바이너리를 다운로드합니다.ref:v1.0.2-a
혹은 ref:39cb398vb39
- 지정된 태그/커밋/브랜치 Github로부터 다운로드하고 컴파일됩니다.path:~/src/elixir
- 사용하려는 툴의 맞춤 컴파일 버전을 위한 경로. 언어 개발자들 등이 사용합니다.system
- 이 키워드는 asdf가 asdf에 의해 관리되지 않는 시스템 버전 툴의 버전을 사용하게합니다.TIP
다양한 버전들은 공백으로 구분하여 설정될 수 있습니다. 예를 들어, 파이썬 3.7.2
를 사용하고, 파이썬 2.7.15
로 그리고 마지막으로 system
파이썬으로 폴백하려면, 다음을 .tool-versions
에 추가해주세요.
python 3.7.2 2.7.15 system
.tool-version
파일에 정의된 모든 툴들을 설치하려면 .tool-version
파일이 포함된 디렉토리에서 다른 인수 없이 asdf install
을 실행합니다.
.tool-versions
파일에 정의된 하나의 툴을 설치하려면 .tool-version
파일이 포함된 디렉토리에서 asdf install <name>
를 실행합니다. 이 툴은 .tool-versions
파일에 정의된 버전으로 설치됩니다.
해당 파일은 직접 편집하거나 asdf local
명령어(또는 asdf global
명령어)를 사용하여 업데이트해 주세요.
.asdfrc
.asdfrc
파일은 사용자의 머신별 설정을 정의합니다.
\${HOME}/.asdfrc
는 asdf가 사용하는 기본 위치입니다. 이는 환경 변수 ASDF_CONFIG_FILE
로 설정 가능합니다.
아래 파일은 필수적인 형식과 기본값들을 보여줍니다:
legacy_version_file = no
+use_release_candidates = no
+always_keep_download = no
+plugin_repository_last_check_duration = 60
+disable_plugin_short_name_repository = no
+concurrency = auto
legacy_version_file
지원되는 플러그인들은 다른 버전 매니저에서 사용되는 버전 파일들을 읽을 수 있습니다, 예를 들어, 루비의 rbenv
에서 .ruby-version
.
동기화 이벤트는 다음 명령어들을 실행할 때 발생합니다:
asdf plugin add <name>
asdf plugin list all
asdf plugin add <name> <git-url>
플러그인 동기화를 트리거하지 않습니다.
노트
해당 값을 never
로 설정하는 것은 플러그인 리포지토리의 초기 동기화를 막지 않고, 해당 기능을 위해 disable_plugin_short_name_repository
를 참조하세요.
disable_plugin_short_name_repository
asdf 플러그인 short-name 리포지토리의 동기화를 비활성화합니다. short-name 리포지토리가 비활성화 되어있으면 동기화 이벤트가 조기 종료됩니다.
',6)),e("table",x,[t[31]||(t[31]=e("thead",null,[e("tr",null,[e("th",{style:{"text-align":"left"}},"옵션"),e("th",{style:{"text-align":"left"}},"설명")])],-1)),e("tbody",null,[e("tr",null,[e("td",_,[t[27]||(t[27]=e("code",null,"no",-1)),t[28]||(t[28]=l()),o(d,{type:"tip",text:"기본",vertical:"middle"})]),t[29]||(t[29]=e("td",{style:{"text-align":"left"}},"동기화 이벤트에서 asdf 플러그인 리포지토리 clone 또는 업데이트",-1))]),t[30]||(t[30]=e("tr",null,[e("td",{style:{"text-align":"left"}},[e("code",null,"yes")]),e("td",{style:{"text-align":"left"}},"short-name 플러그인 리포지토리 비활성화")],-1))])]),t[40]||(t[40]=a('동기화 이벤트는 다음 명령어들을 실행할 때 발생합니다:
asdf plugin add <name>
asdf plugin list all
asdf plugin add <name> <git-url>
는 플러그인 동기화를 트리거하지 않습니다.
노트
플러그인 short-name repository를 비활성화해도 리포지토리가 이미 동기화된 경우 제거되지 않습니다. rm --recursive --trash $ASDF_DATA_DIR/repository
로 플러그인 리포지토리를 제거합니다.
플러그인 short-name 리포지토리를 비활성화해도 그 리포지토리로부터 설치된 이전의 플러그인은 제거되지 않습니다. asdf plugin remove <name>
을 사용하여 플러그인을 제거할 수 있습니다. 플러그인을 제거하면 해당 툴의 모든 설치된 버전이 제거됩니다.
concurrency
컴파일 중에 사용할 기본 코어 수입니다.
옵션 | 설명 |
---|---|
정수 | 소스 코드를 컴파일할 때 사용할 코어 수 |
auto | nproc , sysctl hw.ncpu , /proc/cpuinfo 또는 1 을 순차적으로 사용하여 코어 수를 계산합니다 |
노트: ASDF_CONCURRENCY
환경 변수가 존재하는 경우 우선 순위를 갖습니다.
다음에서 사용자 맞춤 코드를 실행이 가능합니다:
예를 들어 foo
라는 플러그인이 설치되어 있고 bar
라는 실행파일이 제공된 경우, 다음 훅들을 사용하여 사용자 맞춤 코드를 먼저 실행할 수 있습니다:
pre_foo_bar = echo Executing with args: $@
지원되는 패턴은 다음과 같습니다:
pre_<plugin_name>_<command>
pre_asdf_download_<plugin_name>
{pre,post}_asdf_{install,reshim,uninstall}_<plugin_name>
$1
: 풀 버전{pre,post}_asdf_plugin_{add,update,remove,reshim}
$1
: 플러그인 이름{pre,post}_asdf_plugin_{add,update,remove}_<plugin_name>
어떤 명령어 훅들이 어떤 명령어 이전 또는 이후에 실행되는 지에 대한 자세한 내용은 플러그인 생성하기를 참조하세요.
환경 변수 설정은 시스템과 셸에 따라 다릅니다. 기본 위치는 설치 위치와 방식(Git clone, Homebrew, AUR)에 달려있습니다.
환경 변수들은 일반적으로 asdf.sh
/asdf.fish
등을 source하기 전에 설정됩니다. Elvish의 경우는, 상단에서 use asdf
로 설정합니다.
다음은 Bash 셸에서 사용법에 관한 설명입니다.
ASDF_CONFIG_FILE
.asdfrc
설정 파일의 경로. 임의의 위치로 설정 가능합니다. 절대 경로여야 합니다.
$HOME/.asdfrc
가 사용됩니다.export ASDF_CONFIG_FILE=/home/john_doe/.config/asdf/.asdfrc
ASDF_DEFAULT_TOOL_VERSIONS_FILENAME
툴 이름과 버전을 저장하는 파일의 파일이름입니다. 임의의 유효한 파일 이름이면 됩니다. 일반적으로, .tool-version
파일들을 무시하고 싶을 때 해당 값을 설정하세요.
.tool-versions
가 사용됩니다.export ASDF_DEFAULT_TOOL_VERSIONS_FILENAME=tool_versions
ASDF_DIR
asdf
코어 스크립트의 위치. 임의의 위치로 설정할 수 있습니다. 절대 경로여야 합니다.
bin/asdf
실행파일의 한 단계 상위 디렉토리가 사용됩니다.export ASDF_DIR=/home/john_doe/.config/asdf
ASDF_DATA_DIR
asdf
가 플러그인, shim들, 툴 버전들을 설치하는 위치. 임의의 위치로 설정할 수 있습니다. 절대 경로여야 합니다.
$HOME/.asdf
존재 시 사용, 존재하지 않는 경우 ASDF_DIR
사용export ASDF_DATA_DIR=/home/john_doe/.asdf
ASDF_CONCURRENCY
소스 코드를 컴파일할 때 사용할 코어 수입니다. 설정하면 이 값이 asdf 설정 concurrency
값보다 우선 시 됩니다.
concurrency
값이 사용됩니다.export ASDF_CONCURRENCY=32
ASDF_FORCE_PREPEND
PATH
의 맨 앞(최우선순위) 부분에 asdf
shim과 경로 디렉토리를 추가할 것인지 여부.
yes
가 기본값; 다른 시스템에서는 no
가 기본값yes
: PATH
의 앞 부분에 asdf
디렉토리 강제 추가yes
이외의 다른 문자열: PATH
의 앞 부분에 asdf
디렉토리 강제로 추가하지 않음ASDF_FORCE_PREPEND=no . "<path-to-asdf-directory>/asdf.sh"
다음을 이용한 간단한 asdf 설치는:
$HOME/.asdf
설치 위치.asdfrc
파일 없음다음의 결과가 나오게 됩니다:
항목 | 값 | 값이 세팅되는 과정 |
---|---|---|
config file location | $HOME/.asdfrc | ASDF_CONFIG_FILE 가 비었으므로, $HOME/.asdfrc 을 사용 |
default tool versions filename | .tool-versions | ASDF_DEFAULT_TOOL_VERSIONS_FILENAME 가 비었으므로, .tool-versions 을 사용 |
asdf dir | $HOME/.asdf | ASDF_DIR 가 비었으므로, bin/asdf 의 한 단계 상위 디렉토리 사용 |
asdf data dir | $HOME/.asdf | ASDF_DATA_DIR 가 비었으므로, $HOME/.asdf 를 $HOME 으로 사용. |
concurrency | auto | ASDF_CONCURRENCY 가 비었으므로, 기본 설정의 concurrency 값에 의존 |
legacy_version_file | no | 맞춤 .asdfrc 없음, 기본 설정 사용 |
use_release_candidates | no | 맞춤 .asdfrc 없음, 기본 설정 사용 |
always_keep_download | no | 맞춤 .asdfrc 없음, 기본 설정 사용 |
plugin_repository_last_check_duration | 60 | 맞춤 .asdfrc 없음, 기본 설정 사용 |
disable_plugin_short_name_repository | no | 맞춤 .asdfrc 없음, 기본 설정 사용 |
이 섹션은 패키지 관리자 및 통합자에게 유용한 asdf
내부 설정을 설명하므로 일반 사용자들은 이 섹션에 대해 걱정할 필요가 없습니다.
$ASDF_DIR/asdf_updates_disabled
: 이 파일이 있으면 asdf update
명령어를 통한 업데이트가 (내용과 무관하게) 비활성화됩니다. 이는 Pacman이나 Homebrew와 같은 패키지 매니저들이 특정 설치에 올바른 업데이트 방법이 사용되었는지 확인하는 데 사용됩니다.코어 asdf
명령어는 소수지만, 많은 워크플로우를 원활하게 만들어줍니다.
시작하기의 가이드에 설명되어 있습니다.
asdf exec <command> [args...]
현재 버전의 shim 명령어를 실행합니다.
asdf env <command> [util]
asdf info
운영체제, 셸 및 asdf
디버깅 정보를 출력하는 헬퍼 명령어입니다. 버그 리포트 작성시 공유해주세요.
asdf reshim <name> <version>
패키지의 현재 버전 shim을 재생성합니다. 기본적으로, shim들은 플러그인을 통해 툴 설치 중에 생성됩니다. npm CLI 등과 같은 툴들은 실행파일을 글로벌 설치할 수 있습니다, 예를 들어, npm install -g yarn
을 통한 Yarn 설치. 이러한 실행파일은 플러그인의 라이프사이클을 통해 설치되지 않았기 때문에, 해당 플러그인을 위한 shim이 아직 존재하지 않습니다. 이때, nodejs
의 <version>
에 대해서, 예를 들면 yarn
과 같은, 새로운 실행파일의 shim을 asdf reshim nodejs <version>
을 통해 강제적으로 재작성 할 수 있습니다.
asdf shim-versions <command>
shim을 제공하는 플러그인 및 버전들을 나열합니다.
예를 들면, Node.js에는 node
와 npm
이라고 하는 2개의 실행파일이 제공되고 있습니다. asdf-nodejs
을 통해 여러 버전의 툴이 설치되어 있는 경우, shim-versions
는 아래와 같은 내용을 출력할 수 있습니다:
➜ asdf shim-versions node
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
➜ asdf shim-versions npm
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
asdf
는 (권장 설치 방법) Git에 의존하는 빌트인 업데이트 명령어가 있습니다. 다른 방법으로 설치한 경우, 그 방법을 위한 절차를 따라주세요:
방법 | 최신 안정 릴리스 | master 에 최신 커밋 |
---|---|---|
asdf (via Git) | asdf update | asdf update --head |
Homebrew | brew upgrade asdf | brew upgrade asdf --fetch-HEAD |
Pacman | 새로운 PKGBUILD 다운로드 & 재빌드 혹은 선호하는 AUR 헬퍼 사용 |
asdf
제거를 위해 다음 절차를 따르세요:
~/.bashrc
에서, asdf.sh
및 자동완성을 source하고 있는 행들을 삭제:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
디렉토리 제거:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bash_profile
에서, asdf.sh
및 자동완성을 source하고 있는 행들을 삭제:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
디렉토리 제거:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
에서, asdf.sh
및 자동완성을 source하고 있는 행들을 삭제:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
명령어 자동완성에 대해서는 Homebrew에 설명되어 있는 방법으로 설정 되어 있을 가능성이 있으므로, 그 가이드에 따라 삭제할 행을 찾아주세요.
brew uninstall asdf --force
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
macOS Catalina 혹은 그 이상을 사용하신다면, 기본 셸이 ZSH로 변경되었습니다. 만약, ~/.bash_profile
에서 설정을 찾을 수 없는 경우는, ~/.zshrc
에 있을 가능성이 있는데 이 경우 ZSH의 설명을 봐 주세요.
~/.bash_profile
에서, asdf.sh
및 자동완성을 source하고 있는 행들을 삭제:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
명령어 자동완성에 대해서는 Homebrew에 설명되어 있는 방법으로 설정 되어 있을 가능성이 있으므로, 그 가이드에 따라 삭제할 행을 찾아주세요.
brew uninstall asdf --force
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
에서, asdf.sh
및 자동완성을 source하고 있는 행들을 삭제:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
디렉토리 제거:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
에서, asdf.fish
를 source하고 있는 행들을 삭제:source ~/.asdf/asdf.fish
그리고 자동완성을 다음 명령어로 제거:
rm -rf ~/.config/fish/completions/asdf.fish
$HOME/.asdf
디렉토리 제거:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
에서, asdf.fish
를 source하고 있는 행들을 삭제:source "(brew --prefix asdf)"/libexec/asdf.fish
brew uninstall asdf --force
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
에서, asdf.fish
를 source하고 있는 행들을 삭제:source /opt/asdf-vm/asdf.fish
pacman -Rs asdf-vm
$HOME/.asdf
디렉토리 제거:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
에서, asdf
모듈을 사용하는 행들을 삭제:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
그리고 asdf
모듈을 다음 명령어로 제거:
rm -f ~/.config/elvish/lib/asdf.elv
$HOME/.asdf
디렉토리 제거:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
에서, asdf
모듈을 사용하는 행들을 삭제:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
그리고 asdf
모듈을 다음 명령어로 제거:
rm -f ~/.config/elvish/lib/asdf.elv
brew uninstall asdf --force
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
에서, asdf
모듈을 사용하는 행들을 삭제:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
그리고 asdf
모듈을 다음 명령어로 제거:
rm -f ~/.config/elvish/lib/asdf.elv
pacman -Rs asdf-vm
$HOME/.asdf
디렉토리 제거:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
에서, asdf.sh
및 자동완성을 source하고 있는 행들을 삭제:. "$HOME/.asdf/asdf.sh"
+# ...
+fpath=(\${ASDF_DIR}/completions $fpath)
+autoload -Uz compinit
+compinit
혹은 사용된 ZSH 프레임워크 플러그인 제거.
$HOME/.asdf
디렉토리 제거:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
에서, asdf.sh
을 source하고 있는 행들을 삭제:. $(brew --prefix asdf)/libexec/asdf.sh
brew uninstall asdf --force && brew autoremove
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
에서, asdf.sh
을 source하고 있는 행들을 삭제:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
디렉토리 제거:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
끝! 🎉
`,41)]))}const F=i(h,[["render",e]]);export{c as __pageData,F as default}; diff --git a/assets/ko-kr_manage_core.md.YwhJzC1z.lean.js b/assets/ko-kr_manage_core.md.YwhJzC1z.lean.js new file mode 100644 index 00000000..202d655d --- /dev/null +++ b/assets/ko-kr_manage_core.md.YwhJzC1z.lean.js @@ -0,0 +1,18 @@ +import{_ as i,c as a,a2 as l,o as t}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"코어","description":"","frontmatter":{},"headers":[],"relativePath":"ko-kr/manage/core.md","filePath":"ko-kr/manage/core.md","lastUpdated":1734384735000}'),h={name:"ko-kr/manage/core.md"};function e(n,s,p,k,d,o){return t(),a("div",null,s[0]||(s[0]=[l(`코어 asdf
명령어는 소수지만, 많은 워크플로우를 원활하게 만들어줍니다.
시작하기의 가이드에 설명되어 있습니다.
asdf exec <command> [args...]
현재 버전의 shim 명령어를 실행합니다.
asdf env <command> [util]
asdf info
운영체제, 셸 및 asdf
디버깅 정보를 출력하는 헬퍼 명령어입니다. 버그 리포트 작성시 공유해주세요.
asdf reshim <name> <version>
패키지의 현재 버전 shim을 재생성합니다. 기본적으로, shim들은 플러그인을 통해 툴 설치 중에 생성됩니다. npm CLI 등과 같은 툴들은 실행파일을 글로벌 설치할 수 있습니다, 예를 들어, npm install -g yarn
을 통한 Yarn 설치. 이러한 실행파일은 플러그인의 라이프사이클을 통해 설치되지 않았기 때문에, 해당 플러그인을 위한 shim이 아직 존재하지 않습니다. 이때, nodejs
의 <version>
에 대해서, 예를 들면 yarn
과 같은, 새로운 실행파일의 shim을 asdf reshim nodejs <version>
을 통해 강제적으로 재작성 할 수 있습니다.
asdf shim-versions <command>
shim을 제공하는 플러그인 및 버전들을 나열합니다.
예를 들면, Node.js에는 node
와 npm
이라고 하는 2개의 실행파일이 제공되고 있습니다. asdf-nodejs
을 통해 여러 버전의 툴이 설치되어 있는 경우, shim-versions
는 아래와 같은 내용을 출력할 수 있습니다:
➜ asdf shim-versions node
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
➜ asdf shim-versions npm
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
asdf
는 (권장 설치 방법) Git에 의존하는 빌트인 업데이트 명령어가 있습니다. 다른 방법으로 설치한 경우, 그 방법을 위한 절차를 따라주세요:
방법 | 최신 안정 릴리스 | master 에 최신 커밋 |
---|---|---|
asdf (via Git) | asdf update | asdf update --head |
Homebrew | brew upgrade asdf | brew upgrade asdf --fetch-HEAD |
Pacman | 새로운 PKGBUILD 다운로드 & 재빌드 혹은 선호하는 AUR 헬퍼 사용 |
asdf
제거를 위해 다음 절차를 따르세요:
~/.bashrc
에서, asdf.sh
및 자동완성을 source하고 있는 행들을 삭제:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
디렉토리 제거:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bash_profile
에서, asdf.sh
및 자동완성을 source하고 있는 행들을 삭제:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
디렉토리 제거:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
에서, asdf.sh
및 자동완성을 source하고 있는 행들을 삭제:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
명령어 자동완성에 대해서는 Homebrew에 설명되어 있는 방법으로 설정 되어 있을 가능성이 있으므로, 그 가이드에 따라 삭제할 행을 찾아주세요.
brew uninstall asdf --force
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
macOS Catalina 혹은 그 이상을 사용하신다면, 기본 셸이 ZSH로 변경되었습니다. 만약, ~/.bash_profile
에서 설정을 찾을 수 없는 경우는, ~/.zshrc
에 있을 가능성이 있는데 이 경우 ZSH의 설명을 봐 주세요.
~/.bash_profile
에서, asdf.sh
및 자동완성을 source하고 있는 행들을 삭제:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
명령어 자동완성에 대해서는 Homebrew에 설명되어 있는 방법으로 설정 되어 있을 가능성이 있으므로, 그 가이드에 따라 삭제할 행을 찾아주세요.
brew uninstall asdf --force
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
에서, asdf.sh
및 자동완성을 source하고 있는 행들을 삭제:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
디렉토리 제거:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
에서, asdf.fish
를 source하고 있는 행들을 삭제:source ~/.asdf/asdf.fish
그리고 자동완성을 다음 명령어로 제거:
rm -rf ~/.config/fish/completions/asdf.fish
$HOME/.asdf
디렉토리 제거:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
에서, asdf.fish
를 source하고 있는 행들을 삭제:source "(brew --prefix asdf)"/libexec/asdf.fish
brew uninstall asdf --force
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
에서, asdf.fish
를 source하고 있는 행들을 삭제:source /opt/asdf-vm/asdf.fish
pacman -Rs asdf-vm
$HOME/.asdf
디렉토리 제거:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
에서, asdf
모듈을 사용하는 행들을 삭제:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
그리고 asdf
모듈을 다음 명령어로 제거:
rm -f ~/.config/elvish/lib/asdf.elv
$HOME/.asdf
디렉토리 제거:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
에서, asdf
모듈을 사용하는 행들을 삭제:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
그리고 asdf
모듈을 다음 명령어로 제거:
rm -f ~/.config/elvish/lib/asdf.elv
brew uninstall asdf --force
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
에서, asdf
모듈을 사용하는 행들을 삭제:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
그리고 asdf
모듈을 다음 명령어로 제거:
rm -f ~/.config/elvish/lib/asdf.elv
pacman -Rs asdf-vm
$HOME/.asdf
디렉토리 제거:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
에서, asdf.sh
및 자동완성을 source하고 있는 행들을 삭제:. "$HOME/.asdf/asdf.sh"
+# ...
+fpath=(\${ASDF_DIR}/completions $fpath)
+autoload -Uz compinit
+compinit
혹은 사용된 ZSH 프레임워크 플러그인 제거.
$HOME/.asdf
디렉토리 제거:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
에서, asdf.sh
을 source하고 있는 행들을 삭제:. $(brew --prefix asdf)/libexec/asdf.sh
brew uninstall asdf --force && brew autoremove
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
에서, asdf.sh
을 source하고 있는 행들을 삭제:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
디렉토리 제거:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
설정 파일들 제거를 위해 아래 명령어 실행:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
끝! 🎉
`,41)]))}const F=i(h,[["render",e]]);export{c as __pageData,F as default}; diff --git a/assets/ko-kr_manage_plugins.md.BStZ_uo9.js b/assets/ko-kr_manage_plugins.md.BStZ_uo9.js new file mode 100644 index 00000000..6124e7af --- /dev/null +++ b/assets/ko-kr_manage_plugins.md.BStZ_uo9.js @@ -0,0 +1,11 @@ +import{_ as a,c as i,a2 as l,o as e}from"./chunks/framework.BQmytedh.js";const g=JSON.parse('{"title":"플러그인","description":"","frontmatter":{},"headers":[],"relativePath":"ko-kr/manage/plugins.md","filePath":"ko-kr/manage/plugins.md","lastUpdated":1734384735000}'),t={name:"ko-kr/manage/plugins.md"};function n(h,s,p,d,k,r){return e(),i("div",null,s[0]||(s[0]=[l(`플로그인들은 asdf
가 Node.js, Ruby, Elixir 등 여러가지 툴들을 취급하는 방법입니다.
더 많은 툴들 지원을 위한 플러그인 API는 플러그인 생성하기 참고하세요.
Git URL로 플러그인 추가하기:
asdf plugin add <name> <git-url>
+# asdf plugin add elm https://github.com/vic/asdf-elm
또는 플러그인 리포지토리에 short-name을 통해 추가하기:
asdf plugin add <name>
+# asdf plugin add erlang
추천
short-name 리포지토리에 독립적인 긴 git-url
방식이 선호됩니다.
asdf plugin list
+# asdf plugin list
+# java
+# nodejs
asdf plugin list --urls
+# asdf plugin list
+# java https://github.com/halcyon/asdf-java.git
+# nodejs https://github.com/asdf-vm/asdf-nodejs.git
asdf plugin list all
플러그인들의 전체 short-name 목록을 플러그인 Shortname 인덱스에서 확인하세요.
asdf plugin update --all
특정 패키지를 업데이트하고 싶다면, 다음 명령어를 사용하세요.
asdf plugin update <name>
+# asdf plugin update erlang
이 명령어는 해당 플러그인 리포지토리의 origin 기본 브랜치 의 가장 최근 커밋 을 fetch합니다. 버전화된 플러그인들과 업데이트들은 현재 개발 진행중 입니다 (#916).
asdf plugin remove <name>
+# asdf plugin remove erlang
플러그인 제거는 해당 툴과 관련된 모든 것을 제거합니다. 이것은 한 툴의 미사용중인 많은 버전들의 cleaning/pruning에 유용합니다.
Short-name 리포지토리는 로컬 머신에 주기적으로 동기화됩니다. 동기화 방식들로 다음 방식들이 있습니다:
asdf plugin add <name>
asdf plugin list all
disable_plugin_short_name_repository
설정 옵션이 yes
로 설정되어 있다면, 동기화는 조기 종료됩니다. asdf 설정 문서에서 더보기.X
분 동안 진행되지 않았다면, 동기화가 진행됩니다. X
의 기본값은 60
입니다만, .asdfrc
의 plugin_repository_last_check_duration
옵션을 통해 설정될 수 있습니다. asdf 설정 문서에서 더보기.플로그인들은 asdf
가 Node.js, Ruby, Elixir 등 여러가지 툴들을 취급하는 방법입니다.
더 많은 툴들 지원을 위한 플러그인 API는 플러그인 생성하기 참고하세요.
Git URL로 플러그인 추가하기:
asdf plugin add <name> <git-url>
+# asdf plugin add elm https://github.com/vic/asdf-elm
또는 플러그인 리포지토리에 short-name을 통해 추가하기:
asdf plugin add <name>
+# asdf plugin add erlang
추천
short-name 리포지토리에 독립적인 긴 git-url
방식이 선호됩니다.
asdf plugin list
+# asdf plugin list
+# java
+# nodejs
asdf plugin list --urls
+# asdf plugin list
+# java https://github.com/halcyon/asdf-java.git
+# nodejs https://github.com/asdf-vm/asdf-nodejs.git
asdf plugin list all
플러그인들의 전체 short-name 목록을 플러그인 Shortname 인덱스에서 확인하세요.
asdf plugin update --all
특정 패키지를 업데이트하고 싶다면, 다음 명령어를 사용하세요.
asdf plugin update <name>
+# asdf plugin update erlang
이 명령어는 해당 플러그인 리포지토리의 origin 기본 브랜치 의 가장 최근 커밋 을 fetch합니다. 버전화된 플러그인들과 업데이트들은 현재 개발 진행중 입니다 (#916).
asdf plugin remove <name>
+# asdf plugin remove erlang
플러그인 제거는 해당 툴과 관련된 모든 것을 제거합니다. 이것은 한 툴의 미사용중인 많은 버전들의 cleaning/pruning에 유용합니다.
Short-name 리포지토리는 로컬 머신에 주기적으로 동기화됩니다. 동기화 방식들로 다음 방식들이 있습니다:
asdf plugin add <name>
asdf plugin list all
disable_plugin_short_name_repository
설정 옵션이 yes
로 설정되어 있다면, 동기화는 조기 종료됩니다. asdf 설정 문서에서 더보기.X
분 동안 진행되지 않았다면, 동기화가 진행됩니다. X
의 기본값은 60
입니다만, .asdfrc
의 plugin_repository_last_check_duration
옵션을 통해 설정될 수 있습니다. asdf 설정 문서에서 더보기.asdf install <name> <version>
+# asdf install erlang 17.3
플러그인이 소스에서 다운로드 & 컴파일을 지원하는 경우, ref:foo
를 지정할 수 있으며 여기서 foo
는 특정 브랜치, 태그 또는 커밋입니다. 제거할 때도 동일한 이름과 참조를 사용해야 합니다.
asdf install <name> latest
+# asdf install erlang latest
주어진 문자열로 시작하는 최신 안정 버전을 설치합니다.
asdf install <name> latest:<version>
+# asdf install erlang latest:17
asdf list <name>
+# asdf list erlang
주어진 문자열로 시작하는 버전으로 필터링합니다.
asdf list <name> <version>
+# asdf list erlang 17
asdf list all <name>
+# asdf list all erlang
주어진 문자열로 시작하는 버전으로 필터링합니다.
asdf list all <name> <version>
+# asdf list all erlang 17
asdf latest <name>
+# asdf latest erlang
주어진 문자열로 시작하는 최신 안정 버전을 보여줍니다.
asdf latest <name> <version>
+# asdf latest erlang 17
asdf global <name> <version> [<version>...]
+asdf shell <name> <version> [<version>...]
+asdf local <name> <version> [<version>...]
+# asdf global elixir 1.2.4
+
+asdf global <name> latest[:<version>]
+asdf local <name> latest[:<version>]
+# asdf global elixir latest
global
은 해당 버전을 $HOME/.tool-versions
에 작성합니다.
현재 셸 세션에 대해서만, shell
은 ASDF_\${TOOL}_VERSION
이라는 이름의 환경 변수로 버전을 설정합니다.
local
은 해당 버전을 $PWD/.tool-versions
에 작성합니다, 존재하지 않을 시에 새로 만듦.
세부 내용은 .tool-versions
설정 섹션에 파일을 참고하세요.
대체수단
현재 셸 세션에 대해서만 버전을 설정하려는 경우 또는 특정 툴 버전 하에 단순히 한개의 명령어만 실행하기 위해, 당신은 ASDF_\${TOOL}_VERSION
과 같은 환경 변수를 설정할 수 있습니다.
다음 예시에서는 버전 1.4.0
의 Elixir 프로젝트에서 테스트를 수행합니다. 버전 형식은 .tool-versions
파일에서 지원되는 것과 동일하게 지원됩니다.
ASDF_ELIXIR_VERSION=1.4.0 mix test
asdf 관리 버전이 아닌 <name>
도구의 시스템 버전을 사용하려면 도구의 버전을 system
으로 설정할 수 있습니다.
위에 현재 버전 설정 섹션에 나와있는대로, system
을 global
, local
or shell
중에 하나로 설정하세요.
asdf local <name> system
+# asdf local python system
asdf current
+# asdf current
+# erlang 17.3 /Users/kim/.tool-versions
+# nodejs 6.11.5 /Users/kim/cool-node-project/.tool-versions
+
+asdf current <name>
+# asdf current erlang
+# erlang 17.3 /Users/kim/.tool-versions
asdf uninstall <name> <version>
+# asdf uninstall erlang 17.3
asdf는 패키지를 설치할 때 해당 패키지의 모든 실행 프로그램에 대한 shim들을 $ASDF_DATA_DIR/shims
디렉토리 (기본값은 ~/.asdf/shims
)에 생성합니다. 이 디렉토리는 설치된 프로그램들이 이용가능하도록 $PATH
(asdf.sh
, asdf.fish
등)에 존재합니다.
Shim 자체는 플러그인 이름과 shim이 감싸고 있는 설치된 패키지의 실행파일의 경로를 넘겨주는 asdf exec
라는 헬퍼 프로그램을 exec
시키는 매우 단순한 wrapper입니다.
asdf exec
헬퍼는 (.tool-version
파일에 지정된 대로, asdf local...
또는 asdf global...
에서 선택된 대로) 사용할 패키지의 버전을 결정합니다, (플러그인의 exec-path
콜백에 의해 조정될 수 있음) 패키지 설치 디렉토리의 실행 파일에 대한 최종 경로 및 (플러그인에 의해 제공된 - exec-env
스크립트) 실행할 환경을 결정하고, 최종적으로 이를 실행합니다.
노트
이 시스템은 exec
호출을 사용하기 때문에, 실행 대신 셸에 의해 source 되야하는 패키지의 스크립트는 shim wrapper를 통하지 않고 직접 액세스되야 합니다. 두 가지 asdf
명령어: which
와 where
는 설치된 패키지로의 경로를 반환할 수 있습니다:
# returns path to main executable in current version
+source $(asdf which \${PLUGIN})/../script.sh
+
+# returns path to the package installation directory
+source $(asdf where \${PLUGIN})/bin/script.sh
어떠한 이유로 asdf의 shim들을 우회하고 싶거나 프로젝트의 디렉토리로 이동했을 때 자동으로 환경 변수를 설정되게 하고 싶으시면 asdf-direnv 플러그인이 도움이 될 것입니다. 상세한 내용은 README를 확인해 주세요.
`,45)]))}const c=i(t,[["render",n]]);export{o as __pageData,c as default}; diff --git a/assets/ko-kr_manage_versions.md.CMPcUJSc.lean.js b/assets/ko-kr_manage_versions.md.CMPcUJSc.lean.js new file mode 100644 index 00000000..55a3c66d --- /dev/null +++ b/assets/ko-kr_manage_versions.md.CMPcUJSc.lean.js @@ -0,0 +1,30 @@ +import{_ as i,c as a,a2 as l,o as h}from"./chunks/framework.BQmytedh.js";const o=JSON.parse('{"title":"버전","description":"","frontmatter":{},"headers":[],"relativePath":"ko-kr/manage/versions.md","filePath":"ko-kr/manage/versions.md","lastUpdated":1734384735000}'),t={name:"ko-kr/manage/versions.md"};function n(e,s,p,k,d,r){return h(),a("div",null,s[0]||(s[0]=[l(`asdf install <name> <version>
+# asdf install erlang 17.3
플러그인이 소스에서 다운로드 & 컴파일을 지원하는 경우, ref:foo
를 지정할 수 있으며 여기서 foo
는 특정 브랜치, 태그 또는 커밋입니다. 제거할 때도 동일한 이름과 참조를 사용해야 합니다.
asdf install <name> latest
+# asdf install erlang latest
주어진 문자열로 시작하는 최신 안정 버전을 설치합니다.
asdf install <name> latest:<version>
+# asdf install erlang latest:17
asdf list <name>
+# asdf list erlang
주어진 문자열로 시작하는 버전으로 필터링합니다.
asdf list <name> <version>
+# asdf list erlang 17
asdf list all <name>
+# asdf list all erlang
주어진 문자열로 시작하는 버전으로 필터링합니다.
asdf list all <name> <version>
+# asdf list all erlang 17
asdf latest <name>
+# asdf latest erlang
주어진 문자열로 시작하는 최신 안정 버전을 보여줍니다.
asdf latest <name> <version>
+# asdf latest erlang 17
asdf global <name> <version> [<version>...]
+asdf shell <name> <version> [<version>...]
+asdf local <name> <version> [<version>...]
+# asdf global elixir 1.2.4
+
+asdf global <name> latest[:<version>]
+asdf local <name> latest[:<version>]
+# asdf global elixir latest
global
은 해당 버전을 $HOME/.tool-versions
에 작성합니다.
현재 셸 세션에 대해서만, shell
은 ASDF_\${TOOL}_VERSION
이라는 이름의 환경 변수로 버전을 설정합니다.
local
은 해당 버전을 $PWD/.tool-versions
에 작성합니다, 존재하지 않을 시에 새로 만듦.
세부 내용은 .tool-versions
설정 섹션에 파일을 참고하세요.
대체수단
현재 셸 세션에 대해서만 버전을 설정하려는 경우 또는 특정 툴 버전 하에 단순히 한개의 명령어만 실행하기 위해, 당신은 ASDF_\${TOOL}_VERSION
과 같은 환경 변수를 설정할 수 있습니다.
다음 예시에서는 버전 1.4.0
의 Elixir 프로젝트에서 테스트를 수행합니다. 버전 형식은 .tool-versions
파일에서 지원되는 것과 동일하게 지원됩니다.
ASDF_ELIXIR_VERSION=1.4.0 mix test
asdf 관리 버전이 아닌 <name>
도구의 시스템 버전을 사용하려면 도구의 버전을 system
으로 설정할 수 있습니다.
위에 현재 버전 설정 섹션에 나와있는대로, system
을 global
, local
or shell
중에 하나로 설정하세요.
asdf local <name> system
+# asdf local python system
asdf current
+# asdf current
+# erlang 17.3 /Users/kim/.tool-versions
+# nodejs 6.11.5 /Users/kim/cool-node-project/.tool-versions
+
+asdf current <name>
+# asdf current erlang
+# erlang 17.3 /Users/kim/.tool-versions
asdf uninstall <name> <version>
+# asdf uninstall erlang 17.3
asdf는 패키지를 설치할 때 해당 패키지의 모든 실행 프로그램에 대한 shim들을 $ASDF_DATA_DIR/shims
디렉토리 (기본값은 ~/.asdf/shims
)에 생성합니다. 이 디렉토리는 설치된 프로그램들이 이용가능하도록 $PATH
(asdf.sh
, asdf.fish
등)에 존재합니다.
Shim 자체는 플러그인 이름과 shim이 감싸고 있는 설치된 패키지의 실행파일의 경로를 넘겨주는 asdf exec
라는 헬퍼 프로그램을 exec
시키는 매우 단순한 wrapper입니다.
asdf exec
헬퍼는 (.tool-version
파일에 지정된 대로, asdf local...
또는 asdf global...
에서 선택된 대로) 사용할 패키지의 버전을 결정합니다, (플러그인의 exec-path
콜백에 의해 조정될 수 있음) 패키지 설치 디렉토리의 실행 파일에 대한 최종 경로 및 (플러그인에 의해 제공된 - exec-env
스크립트) 실행할 환경을 결정하고, 최종적으로 이를 실행합니다.
노트
이 시스템은 exec
호출을 사용하기 때문에, 실행 대신 셸에 의해 source 되야하는 패키지의 스크립트는 shim wrapper를 통하지 않고 직접 액세스되야 합니다. 두 가지 asdf
명령어: which
와 where
는 설치된 패키지로의 경로를 반환할 수 있습니다:
# returns path to main executable in current version
+source $(asdf which \${PLUGIN})/../script.sh
+
+# returns path to the package installation directory
+source $(asdf where \${PLUGIN})/bin/script.sh
어떠한 이유로 asdf의 shim들을 우회하고 싶거나 프로젝트의 디렉토리로 이동했을 때 자동으로 환경 변수를 설정되게 하고 싶으시면 asdf-direnv 플러그인이 도움이 될 것입니다. 상세한 내용은 README를 확인해 주세요.
`,45)]))}const c=i(t,[["render",n]]);export{o as __pageData,c as default}; diff --git a/assets/ko-kr_more_community-projects.md.BGgZzLbH.js b/assets/ko-kr_more_community-projects.md.BGgZzLbH.js new file mode 100644 index 00000000..09942c46 --- /dev/null +++ b/assets/ko-kr_more_community-projects.md.BGgZzLbH.js @@ -0,0 +1 @@ +import{_ as t,c as a,a2 as o,o as r}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"커뮤니티 프로젝트","description":"","frontmatter":{},"headers":[],"relativePath":"ko-kr/more/community-projects.md","filePath":"ko-kr/more/community-projects.md","lastUpdated":1734384735000}'),s={name:"ko-kr/more/community-projects.md"};function c(n,e,i,d,l,m){return r(),a("div",null,e[0]||(e[0]=[o('asdf
와 관련된 커뮤니티 프로젝트들입니다:
노트
asdf 코어 팀은 이 프로젝트들 혹은 코드를 소유하지 않습니다. asdf 코어는 위의 목록들에 품질과 보안을 책임지지 않습니다.
asdf
와 관련된 커뮤니티 프로젝트들입니다:
노트
asdf 코어 팀은 이 프로젝트들 혹은 코드를 소유하지 않습니다. asdf 코어는 위의 목록들에 품질과 보안을 책임지지 않습니다.
asdf
에 관련된 공통된 질문들입니다.
WSL1 (Windows Subsystem for Linux 1)는 공식적으로 지원되지 않습니다. 어떤 부분의 asdf
의 제대로 동작하지 않을 수 있습니다. 우리는 WSL1의 공식 지원을 추가할 계획이 없습니다.
WSL2 (Windows Subsystem for Linux 2)는 당신이 선택한 WSL distro를 위한 설치 & dependency 설명서를 따르면 작동합니다.
중요한 것은, WSL2는 오직 현재 작업 디렉토리가 Unix 드라이브 그리고 Windows 드라이브에 종속되어 있지 않을때 정상적으로 동작합니다.
우리는 호스트 runner support가 GitHub Actions에서 사용가능할 때 WSL2에서 테스트 suite를 진행할 계획입니다만, 현재는 아직 이용가능하지 않은 것 같습니다.
방금
npm install -g yarn
, 그러나yarn
을 실행시킬 수 없습니다. 어떻게 해야하나요?
asdf
는 shims를 사용하여 실행파일들을 관리합니다. 플러그인에 의해서 설치되는 실행파일들은 자동적으로 shim이 생성되지만, asdf
가 관리하고 있는 툴에 의해서 실행파일이 설치 된 경우는 shim을 생성해야 한다고 하는 것을 asdf
에 알려줄 필요가 있습니다. 이러한 경우, Yarn의 shim을 생성하기 위해 asdf reshim
명령어 문서를 참고하세요.
만약 asdf reshim
가 문제를 해결하지 못한다면, 대부분의 경우 asdf.sh
혹은 asdf.fish
sourcing이 당신의 셸 설정 파일 (.bash_profile
, .zshrc
, config.fish
etc) 아래쪽에 있지 않을 가능성이 높습니다. 당신의 $PATH
가 설정 된 후에 그리고 사용중인 프레임워크 (oh-my-zsh etc)가 source 된 후에 source 되어야 합니다.
asdf
에 관련된 공통된 질문들입니다.
WSL1 (Windows Subsystem for Linux 1)는 공식적으로 지원되지 않습니다. 어떤 부분의 asdf
의 제대로 동작하지 않을 수 있습니다. 우리는 WSL1의 공식 지원을 추가할 계획이 없습니다.
WSL2 (Windows Subsystem for Linux 2)는 당신이 선택한 WSL distro를 위한 설치 & dependency 설명서를 따르면 작동합니다.
중요한 것은, WSL2는 오직 현재 작업 디렉토리가 Unix 드라이브 그리고 Windows 드라이브에 종속되어 있지 않을때 정상적으로 동작합니다.
우리는 호스트 runner support가 GitHub Actions에서 사용가능할 때 WSL2에서 테스트 suite를 진행할 계획입니다만, 현재는 아직 이용가능하지 않은 것 같습니다.
방금
npm install -g yarn
, 그러나yarn
을 실행시킬 수 없습니다. 어떻게 해야하나요?
asdf
는 shims를 사용하여 실행파일들을 관리합니다. 플러그인에 의해서 설치되는 실행파일들은 자동적으로 shim이 생성되지만, asdf
가 관리하고 있는 툴에 의해서 실행파일이 설치 된 경우는 shim을 생성해야 한다고 하는 것을 asdf
에 알려줄 필요가 있습니다. 이러한 경우, Yarn의 shim을 생성하기 위해 asdf reshim
명령어 문서를 참고하세요.
만약 asdf reshim
가 문제를 해결하지 못한다면, 대부분의 경우 asdf.sh
혹은 asdf.fish
sourcing이 당신의 셸 설정 파일 (.bash_profile
, .zshrc
, config.fish
etc) 아래쪽에 있지 않을 가능성이 높습니다. 당신의 $PATH
가 설정 된 후에 그리고 사용중인 프레임워크 (oh-my-zsh etc)가 source 된 후에 source 되어야 합니다.
asdf 저자들 & 기여자들을 위한 감사 페이지!
나 (@HashNuke), 고열, 감기, 기침.
2014년부터 종료까지의 저작권 (MIT License)
GitHub에서 기여자들의 목록를 확인하세요 🙏
',9)]))}const p=a(o,[["render",s]]);export{u as __pageData,p as default}; diff --git a/assets/ko-kr_more_thanks.md.DLiIYnLr.lean.js b/assets/ko-kr_more_thanks.md.DLiIYnLr.lean.js new file mode 100644 index 00000000..8961cea0 --- /dev/null +++ b/assets/ko-kr_more_thanks.md.DLiIYnLr.lean.js @@ -0,0 +1 @@ +import{_ as a,c as r,a2 as t,o as h}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"감사인사","description":"","frontmatter":{},"headers":[],"relativePath":"ko-kr/more/thanks.md","filePath":"ko-kr/more/thanks.md","lastUpdated":1734384735000}'),o={name:"ko-kr/more/thanks.md"};function s(l,e,i,n,d,c){return h(),r("div",null,e[0]||(e[0]=[t('asdf 저자들 & 기여자들을 위한 감사 페이지!
나 (@HashNuke), 고열, 감기, 기침.
2014년부터 종료까지의 저작권 (MIT License)
GitHub에서 기여자들의 목록를 확인하세요 🙏
',9)]))}const p=a(o,[["render",s]]);export{u as __pageData,p as default}; diff --git a/assets/ko-kr_plugins_create.md.CGqR6Egc.js b/assets/ko-kr_plugins_create.md.CGqR6Egc.js new file mode 100644 index 00000000..3c3e7c82 --- /dev/null +++ b/assets/ko-kr_plugins_create.md.CGqR6Egc.js @@ -0,0 +1,35 @@ +import{_ as n,c as p,a2 as e,j as i,a,G as l,B as d,o}from"./chunks/framework.BQmytedh.js";const x=JSON.parse('{"title":"플러그인 생성하기","description":"","frontmatter":{},"headers":[],"relativePath":"ko-kr/plugins/create.md","filePath":"ko-kr/plugins/create.md","lastUpdated":1734384735000}'),h={name:"ko-kr/plugins/create.md"},r={tabindex:"0"},k={style:{"text-align":"left"}},g={style:{"text-align":"left"}},c={style:{"text-align":"left"}},u={style:{"text-align":"left"}},b={id:"bin-list-all",tabindex:"-1"},F={id:"bin-download",tabindex:"-1"},E={id:"bin-install",tabindex:"-1"},y={id:"bin-latest-stable",tabindex:"-1"},m={id:"asdf-cli-확장-명령어",tabindex:"-1"},f={id:"맞춤-shim-템플릿",tabindex:"-1"};function v(A,s,_,C,S,D){const t=d("Badge");return o(),p("div",null,[s[48]||(s[48]=e('플러그인은 언어 / 툴의 버전 관리를 지원하는 실행 가능한 스크립트들이 있는 Git 리포지토리입니다. 이 스크립트들은 asdf에 의해 특정 명령어들을 받아 asdf list-all <name>
, asdf install <name> <version>
등의 지원을 위해 실행됩니다.
자체 플러그인을 만드는 것을 시작하는 두 가지 옵션이 있습니다:
asdf-<tool_name>
이름으로) 플러그인 리포지토리 생성하기. 리포지토리가 생성되면, 그 리포지토리를 clone하고 템플릿을 유기적으로 업데이트하여 setup.bash
스크립트를 실행합니다.asdf-<tool_name>
로 이룸 붙인 리포지토리를 시작하고 아래 문서에 필수 스크립트들을 구현하세요.asdf
명령어를 호출하면 안됩니다.sort -V
. asdf core를 참고하세요 금지된 명령어 목록asdf에서 호출 가능한 스크립트의 전체 목록입니다.
',9)),i("table",r,[s[25]||(s[25]=i("thead",null,[i("tr",null,[i("th",{style:{"text-align":"left"}},"스크립트"),i("th",{style:{"text-align":"left"}},"설명")])],-1)),i("tbody",null,[i("tr",null,[i("td",k,[s[0]||(s[0]=i("a",{href:"#bin-list-all"},"bin/list-all",-1)),s[1]||(s[1]=a()),l(t,{type:"tip",text:"필수",vertical:"middle"})]),s[2]||(s[2]=i("td",{style:{"text-align":"left"}},"모든 설치 가능한 버전들을 나열",-1))]),i("tr",null,[i("td",g,[s[3]||(s[3]=i("a",{href:"#bin-download"},"bin/download",-1)),s[4]||(s[4]=a()),l(t,{type:"tip",text:"필수",vertical:"middle"})]),s[5]||(s[5]=i("td",{style:{"text-align":"left"}},"지정한 버전에 대한 소스 코드 또는 바이너리 다운로드",-1))]),i("tr",null,[i("td",c,[s[6]||(s[6]=i("a",{href:"#bin-install"},"bin/install",-1)),s[7]||(s[7]=a()),l(t,{type:"tip",text:"필수",vertical:"middle"})]),s[8]||(s[8]=i("td",{style:{"text-align":"left"}},"지정된 버전을 설치",-1))]),i("tr",null,[i("td",u,[s[9]||(s[9]=i("a",{href:"#bin-latest-stable"},"bin/latest-stable",-1)),s[10]||(s[10]=a()),l(t,{type:"warning",text:"추천",vertical:"middle"})]),s[11]||(s[11]=i("td",{style:{"text-align":"left"}},"지정된 도구의 최신 안정 버전 나열",-1))]),s[12]||(s[12]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.overview"},"bin/help.overview")]),i("td",{style:{"text-align":"left"}},"플러그인 및 도구에 대한 일반적인 설명을 출력")],-1)),s[13]||(s[13]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.deps"},"bin/help.deps")]),i("td",{style:{"text-align":"left"}},"운영 체제별 dependencies 목록 출력")],-1)),s[14]||(s[14]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.config"},"bin/help.config")]),i("td",{style:{"text-align":"left"}},"플러그인 및 툴 설정 정보 출력")],-1)),s[15]||(s[15]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.links"},"bin/help.links")]),i("td",{style:{"text-align":"left"}},"플러그인 및 툴에 대한 링크 목록 출력")],-1)),s[16]||(s[16]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-list-bin-paths"},"bin/list-bin-paths")]),i("td",{style:{"text-align":"left"}},"shim들을 생성하기 위해 바이너리 파일이 있는 디렉토리에 대한 상대 경로 나열")],-1)),s[17]||(s[17]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-exec-env"},"bin/exec-env")]),i("td",{style:{"text-align":"left"}},"바이너리 실행을 위한 환경 준비")],-1)),s[18]||(s[18]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-exec-path"},"bin/exec-path")]),i("td",{style:{"text-align":"left"}},"툴 버전의 실행파일 경로 출력")],-1)),s[19]||(s[19]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-uninstall"},"bin/uninstall")]),i("td",{style:{"text-align":"left"}},"툴의 특정 버전 제거")],-1)),s[20]||(s[20]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-list-legacy-filenames"},"bin/list-legacy-filenames")]),i("td",{style:{"text-align":"left"}},[a("레거시 버전 파일의 이름 출력: "),i("code",null,".ruby-version")])],-1)),s[21]||(s[21]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-parse-legacy-file"},"bin/parse-legacy-file")]),i("td",{style:{"text-align":"left"}},"레거시 버전 파일들을 위한 맞춤 parser")],-1)),s[22]||(s[22]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-post-plugin-add"},"bin/post-plugin-add")]),i("td",{style:{"text-align":"left"}},"플러그인이 추가된 후 실행될 훅")],-1)),s[23]||(s[23]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-post-plugin-update"},"bin/post-plugin-update")]),i("td",{style:{"text-align":"left"}},"플러그인이 업데이트 된 후 실행될 훅")],-1)),s[24]||(s[24]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-pre-plugin-remove"},"bin/pre-plugin-remove")]),i("td",{style:{"text-align":"left"}},"플러그인이 제거되기 전 실행될 훅")],-1))])]),s[49]||(s[49]=e('어떤 명령어가 어떤 스크립트를 호출하는지 확인하려면, 각 스크립트에 대한 자세한 문서를 참조하세요.
모든 스크립트에서 사용되는 환경 변수의 전체 목록입니다.
환경 변수 | 설명 |
---|---|
ASDF_INSTALL_TYPE | version 또는 ref |
ASDF_INSTALL_VERSION | ASDF_INSTALL_TYPE 에 따른 풀 버전 번호 또는 Git Ref |
ASDF_INSTALL_PATH | 툴이 설치 되어야하는 혹은 되어있는 경로 |
ASDF_CONCURRENCY | 소스 코드를 컴파일할 때 사용할 코어 수. make-j 를 설정할 때 유용 |
ASDF_DOWNLOAD_PATH | bin/download 에 의해 소스 코드 또는 바이너리가 다운로드 된 경로 |
ASDF_PLUGIN_PATH | 플러그인이 설치된 경로 |
ASDF_PLUGIN_SOURCE_URL | 플러그인의 소스 URL |
ASDF_PLUGIN_PREV_REF | 플러그인 리포지토리의 이전 git-ref |
ASDF_PLUGIN_POST_REF | 플러그인 리포지토리의 업데이트 된 git-ref |
ASDF_CMD_FILE | source 되는 파일의 전체 경로를 해결 |
노트
모든 스크립트에서 모든 환경 변수를 사용할 수 있는 것은 아닙니다. 아래 각 스크립트에 대한 문서를 확인하여 사용할 수 있는 환경 변수들을 확인하세요.
설명
설치 가능한 모든 버전 나열.
출력 형식
공백으로 구분된 문자열을 반드시 출력. 예를 들어:
1.0.1 1.0.2 1.3.0 1.4
최신 버전이 마지막에 와야 합니다.
asdf core는 각 버전을 각각의 행에 출력하여, 일부 버전을 화면 밖으로 밀어낼 가능성이 있습니다.
정렬
웹사이트의 릴리스 페이지에서 버전을 가져오는 경우에는 이미 올바른 순서로 되어 있는 경우가 많기 때문에 제공된 순서대로 두는 것이 좋습니다. 역순으로 되어 있는 경우 tac
을 통해 해당 버전들을 바로 잡는것으로 충분합니다.
정렬이 불가피한 경우, sort -V
는 사용이 불가능하므로, 다음 중 하나를 제안합니다:
v2.18.0
이상 필요)sed
, sort
& awk
필요)스크립트에서 사용 가능한 환경 변수
이 스크립트에는 환경 변수가 제공되지 않습니다.
이 스크립트를 호출하는 명령어
asdf list all <name> [version]
asdf list all nodejs
: 이 스크립트에 의해 반환된 모든 버전을 나열합니다, 한 행에 한개씩.asdf list all nodejs 18
: 이 스크립트에 의해 반환된 모든 버전을 나열하며, 각 행에 하나씩, 18
로 시작하는 모든 버전에 필터가 적용됩니다.asdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}/bin/list-all"
설명
지정된 장소에 지정된 버전에 대한 소스 코드 또는 바이너리 다운로드
구현 세부사항
ASDF_DOWNLOAD_PATH
에서 지정된 디렉토리에 다운로드해야합니다.ASDF_DOWNLOAD_PATH
디렉토리에 위치해야합니다.ASDF_DOLOAD_PATH
에 어떠한 파일도 남아서는 안 됩니다.0
이 종료 코드입니다.레거시 플러그인
비록 이 스크립트는 모든 플러그인에서 _필수_로 되어 있지만, 이 스크립트가 도입되기 이전의 "레거시" 플러그인에서는 선택 입니다.
이 스크립트가 없는 경우, asdf는 bin/install
스크립트가 있다고 가정하고 해당 버전을 다운로드 그리고 설치합니다.
레거시 플러그인 지원은 최종적으로 제거될 예정이기 때문에 앞으로 작성할 모든 플러그인에서 이 스크립트를 포함해야합니다.
스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.ASDF_DOWNLOAD_PATH
: 소스 코드 또는 바이너리 파일이 다운로드 된 경로.이 스크립트를 호출하는 명령어
asdf install <tool> [version]
asdf install <tool> latest[:version]
asdf install nodejs 18.0.0
: Node.js 버전 18.0.0
의 소스 코드 또는 바이너리를 다운로드하고 ASDF_DOWLOAD_PATH
디렉토리에 저장. 그 다음 bin/install
스크립트를 실행.asdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}"/bin/download
설명
특정 버전의 도구를 지정된 위치에 설치.
구현 세부사항
ASDF_INSTALL_PATH
경로에 지정된 버전을 설치해야합니다.$ASDF_INSTALL_PATH/bin
에 있는 어떠한 파일에 대해서든 기본적으로 생성됩니다. 이 동작은 선택적 bin/list-bin-paths 스크립트로 맞춤 설정 가능합니다.0
이 종료 코드입니다.ASDF_INSTALL_PATH
에 배치합니다.레거시 플러그인
bin/download
스크립트가 없는 경우, 이 스크립트는 지정된 버전을 다운로드 그리고 설치해야합니다.
0.7._
보다 이전 그리고 0.8._
보다 이후 asdf 코어 버전들의 호환성을 확인하려면, ASDF_DOWNLOAD_PATH
환경 변수가 있는지 확인합니다. 그 환경 변수가 존재하는 경우, 이미 bin/download
스크립트가 그 버전을 다운로드했다고 가정하고, 존재하지 않으면 bin/install
스크립트에서 소스 코드를 다운로드합니다.
스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.ASDF_CONCURRENCY
: 소스 코드를 컴파일할 때 사용할 코어 수. make-j
를 설정할 때 유용.ASDF_DOWNLOAD_PATH
: 소스 코드 또는 바이너리 파일이 다운로드 된 경로.이 스크립트를 호출하는 명령어
asdf install
asdf install <tool>
asdf install <tool> [version]
asdf install <tool> latest[:version]
asdf install nodejs 18.0.0
: Node.js 버전 18.0.0
을 ASDF_INSTALL_PATH
디렉토리에 설치.asdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}"/bin/install
설명
도구의 최신 안정 버전을 결정합니다. 이 스크립트가 존재하지 않는 경우, asdf 코어는 bin/list-all
의 출력을 비의도적으로 tail
합니다.
구현 세부사항
asdf list all ruby
는 jruby
, rbx
, truffleruby
등의 많은 제공자들의 Ruby 버전 목록을 출력합니다. 사용자가 제공한 필터는 플러그인이 유의적 버전 및/또는 공급자를 필터링하는 데 사용될 수 있습니다.> asdf latest ruby\n3.2.2\n> asdf latest ruby 2\n2.7.8\n> asdf latest ruby truffleruby\ntruffleruby+graalvm-22.3.1
0
이 종료 코드입니다.스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf global <tool> latest
: 툴의 글로벌 버전을 해당 툴의 최신 안정 버전으로 설정합니다.asdf local <name> latest
: 툴의 로컬 버전을 해당 툴의 최신 안정 버전으로 설정합니다.asdf install <tool> latest
: 최신 버전의 툴을 설치합니다.asdf latest <tool> [<version>]
: 선택적인 필터를 기반으로 도구의 최신 버전을 출력합니다.asdf latest --all
: asdf에서 관리하는 모든 툴의 최신 버전과 설치 여부를 출력합니다.asdf core에서 호출 시그니처
이 스크립트는 필터 쿼리라는 하나의 인수를 받습니다.
"${plugin_path}"/bin/latest-stable "$query"
bin/help.overview
설명
플러그인 및 관리 중인 툴에 대한 일반적인 설명을 출력.
구현 세부사항
ASDF_INSTALL_VERSION
및 ASDF_INSTALL_TYPE
환경 변수의 값을 사용하십시오).0
이 종료 코드입니다.스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf help <name> [<version>]
: 플러그인 및 도구 문서를 출력asdf core에서 호출 시그니처
"${plugin_path}"/bin/help.overview
bin/help.deps
설명
운영 체제에 맞는 dependencies 목록을 출합니다. 한 행마다 한 개의 dependency.
git\ncurl\nsed
구현 세부사항
bin/help.overview
가 필요합니다.ASDF_INSTALL_VERSION
및 ASDF_INSTALL_TYPE
환경 변수의 값을 사용하십시오).0
이 종료 코드입니다.스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf help <name> [<version>]
: 플러그인 및 도구 문서를 출력asdf core에서 호출 시그니처
"${plugin_path}"/bin/help.deps
bin/help.config
설명
플러그인 및 도구에 필수적 또는 선택적 설정 출력. 예를 들어, 도구를 설치하거나 컴파일하는 데 필요한 환경 변수나 기타 플래그를 설명.
구현 세부사항
bin/help.overview
가 필요합니다.ASDF_INSTALL_VERSION
및 ASDF_INSTALL_TYPE
환경 변수의 값을 사용하십시오).0
이 종료 코드입니다.스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf help <name> [<version>]
: 플러그인 및 도구 문서를 출력asdf core에서 호출 시그니처
"${plugin_path}"/bin/help.config
bin/help.links
설명
플러그인 및 툴과 관련된 링크 목록을 출력. 한 행마다 한 개의 링크.
Git Repository: https://github.com/vlang/v\nDocumentation: https://vlang.io
구현 세부사항
bin/help.overview
가 필요합니다.<title>: <link>
<link>
ASDF_INSTALL_VERSION
및 ASDF_INSTALL_TYPE
환경 변수의 값을 사용하십시오).0
이 종료 코드입니다.스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf help <name> [<version>]
: 플러그인 및 도구 문서를 출력asdf core에서 호출 시그니처
"${plugin_path}"/bin/help.links
bin/list-bin-paths
설명
툴의 특정 버전에서 실행파일이 포함된 디렉토리 목록을 출력.
구현 세부사항
"${ASDF_INSTALL_PATH}"/bin
디렉토리 내에 있는 바이너리들을 찾아 그 바이너리를 위한 shim들을 생성합니다.ASDF_INSTALL_PATH
로의 상대 경로이어야 합니다. 출력 예시는 다음과 같습니다:bin tools veggies
이는 asdf가 그 파일들을 위한 shim들을 다음 위치에 생성하게 지시합니다:
"${ASDF_INSTALL_PATH}"/bin
"${ASDF_INSTALL_PATH}"/tools
"${ASDF_INSTALL_PATH}"/veggies
스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf install <tool> [version]
: 초기에 바이너리들을 위한 shim들 생성.asdf reshim <tool> <version>
: 바이너리들을 위한 shim들 재생성.asdf core에서 호출 시그니처
"${plugin_path}/bin/list-bin-paths"
bin/exec-env
설명
툴 바이너리의 shim을 실행하기 전에 환경을 준비.
스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf which <command>
: 실행파일의 경로 표시asdf exec <command> [args...]
: 현재 버전에서 shim 명령을 실행asdf env <command> [util]
: shim 명령어 실행 시 사용되는 환경에서 유틸리티(기본값: env
)를 실행.asdf core에서 호출 시그니처
"${plugin_path}/bin/exec-env"
bin/exec-path
툴의 특정 버전의 실행파일 경로를 가져옵니다. 실행파일에 대한 상대 경로를 문자열로 출력해야합니다. 이는 플러그인이 shim에서 지정한 실행파일 경로를 조건부로 덮어쓰게 하거나, 그렇지 않으면 shim에서 지정한 기본 경로를 반환합니다.
설명
툴의 특정 버전의 실행파일 경로를 가져옵니다.
구현 세부사항
Usage:\n plugin/bin/exec-path <install-path> <command> <executable-path>\n\nExample Call:\n ~/.asdf/plugins/foo/bin/exec-path "~/.asdf/installs/foo/1.0" "foo" "bin/foo"\n\nOutput:\n bin/foox
스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf which <command>
: 실행파일의 경로 표시asdf exec <command> [args...]
: 현재 버전에서 shim 명령을 실행asdf env <command> [util]
: shim 명령어 실행 시 사용되는 환경에서 유틸리티(기본값: env
)를 실행.asdf core에서 호출 시그니처
"${plugin_path}/bin/exec-path" "$install_path" "$cmd" "$relative_path"
bin/uninstall
설명
툴의 지정된 버전을 제거합니다.
출력 형식
출력값은 stdout
또는 stderr
에 적절히 송신 되어야 합니다. 어떠한 출력값도 후속 코어 실행에 의해 사용되지 않습니다.
스크립트에서 사용 가능한 환경 변수
이 스크립트에는 환경 변수가 제공되지 않습니다.
이 스크립트를 호출하는 명령어
asdf list all <name> <version>
asdf uninstall nodejs 18.15.0
: nodejs의 18.15.0
버전을 제거, npm i -g
로 설치된 모든 글로벌 shim들 또한 제거.asdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}/bin/uninstall"
bin/list-legacy-filenames
설명
툴 버전을 결정하는 데 사용된 레거시 설정 파일 목록을 출력.
구현 세부사항
.ruby-version .rvmrc
"${HOME}"/.asdfrc
에서 legacy_version_file
옵션을 활성화한 사용자에게만 적용됩니다.스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
툴 버전을 가져오는 모든 명령에서 호출됩니다.
asdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}/bin/list-legacy-filenames"
bin/parse-legacy-file
설명
asdf에 의해 발견된 레거시 파일을 parse하여 툴의 버전을 결정. 자바스크립트의 package.json
이나 Go 언어의 go.mod
와 같은 파일에서 버전 번호를 추출하는 데 유용.
구현 세부사항
cat
하여 버전을 결정합니다.1.2.3
스크립트에서 사용 가능한 환경 변수
이 스크립트가 호출되기 전에 환경 변수가 설정되지 않습니다.
이 스크립트를 호출하는 명령어
툴 버전을 가져오는 모든 명령에서 호출됩니다.
asdf core에서 호출 시그니처
이 스크립트는 레거시 파일의 내용을 읽기 위해 레거시 파일의 경로라는 하나의 인수를 받습니다.
"${plugin_path}/bin/parse-legacy-file" "$file_path"
bin/post-plugin-add
설명
이 콜백 스크립트는 asdf의 asdf plugin add <tool>
명령어로 플러그인이 추가된 후에 실행됩니다.
관련된 명령어 훅들을 참조하세요:
pre_asdf_plugin_add
pre_asdf_plugin_add_${plugin_name}
post_asdf_plugin_add
post_asdf_plugin_add_${plugin_name}
스크립트에서 사용 가능한 환경 변수
ASDF_PLUGIN_PATH
: 플러그인이 설치된 경로.ASDF_PLUGIN_SOURCE_URL
: 플러그인 소스의 URL. 로컬 디렉토리 경로일 수 있음.asdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}/bin/post-plugin-add"
bin/post-plugin-update
설명
이 콜백 스크립트는 asdf가 asdf plugin update <tool> [<git-ref>]
커맨드로 플러그인 업데이트 를 다운로드한 후에 실행됩니다.
관련된 명령어 훅들을 참조하세요:
pre_asdf_plugin_update
pre_asdf_plugin_update_${plugin_name}
post_asdf_plugin_update
post_asdf_plugin_update_${plugin_name}
스크립트에서 사용 가능한 환경 변수
ASDF_PLUGIN_PATH
: 플러그인이 설치된 경로.ASDF_PLUGIN_PREV_REF
: 플러그인의 이전 git-refASDF_PLUGIN_POST_REF
: 플러그인의 업데이트 된 git-refasdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}/bin/post-plugin-update"
bin/pre-plugin-remove
설명
asdf가 asdf plugin remove <tool>
커맨드로 플러그인을 제거하기 전에 이 콜백 스크립트를 실행시키세요.
관련된 명령어 훅들을 참조하세요:
pre_asdf_plugin_remove
pre_asdf_plugin_remove_${plugin_name}
post_asdf_plugin_remove
post_asdf_plugin_remove_${plugin_name}
스크립트에서 사용 가능한 환경 변수
ASDF_PLUGIN_PATH
: 플러그인이 설치된 경로.asdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}/bin/pre-plugin-remove"
lib/commands/command*.bash
스크립트 또는 플러그인 이름을 하위명령어로 사용하여 asdf 명령줄 인터페이스를 통해 호출할 수 있는 실행파일을 제공함으로써 새로운 asdf 명령어를 정의할 수 있습니다.
예를 들면, foo
라고 하는 플러그인이 있다고 하면:
foo/\n lib/commands/\n command.bash\n command-bat.bash\n command-bat-man.bash\n command-help.bash
사용자는 아래 명령을 실행할 수 있게 됩니다:
$ asdf foo # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash`\n$ asdf foo bar # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash bar`\n$ asdf foo help # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-help.bash`\n$ asdf foo bat man # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat-man.bash`\n$ asdf foo bat baz # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat.bash baz`
플러그인 개발자는 이 기능을 사용하여 툴과 관련된 유틸리티를 제공하거나, asdf 자체의 명령어 확장 플러그인을 생성할 수 있습니다.
실행 가능 비트(executable bit)가 부여되어 있는 경우, asdf 실행을 대신하여 해당 스크립트가 실행됩니다.
실행 가능 비트(executable bit)가 부여되지 않은 경우, asdf는 해당 스크립트를 Bash 스크립트로 source합니다.
$ASDF_CMD_FILE
는 source 되는 파일의 전체 경로를 해결합니다.
haxe
는 이 기능을 사용하는 플러그인의 좋은 예시입니다. 이 플러그인은 Haxe 실행파일이 해당 디렉토리에서 상대적으로 동적 라이브러리를 찾으려하는 문제해결을 위해 asdf haxe neko-dylibs-link
를 제공합니다.
플러그인 README에는 asdf 확장 명령어에 관한 것을 반드시 기재하도록 하십시오.
',11)),i("h2",f,[s[45]||(s[45]=a("맞춤 Shim 템플릿 ")),l(t,{type:"danger",text:"고급",vertical:"middle"}),s[46]||(s[46]=a()),s[47]||(s[47]=i("a",{class:"header-anchor",href:"#맞춤-shim-템플릿","aria-label":'Permalink to "맞춤 Shim 템플릿경고
반드시 필요한 경우에만 사용하세요.
asdf에서는 맞춤 shim 템플릿을 사용할 수 있습니다. foo
라고 하는 실행파일에 대해, 플러그인 내에 shims/foo
파일이 존재하면, asdf는 표준 shim 템플릿을 사용하는 대신 그 파일을 복사합니다.
이 기능은 현명하게 사용해야합니다.
asdf 코어팀이 파악하고 있는 것은, 이 기능은 오직 공식 플러그인 Elixir 플러그인에서만 사용되고 있습니다. 이는 실행파일은 실행파일일 뿐만 아니라 Elixir 파일로도 읽히기 때문입니다. 이 때문에 표준 Bash shim을 사용할 수 없습니다.
asdf
에는 플러그인을 테스트하기 위한 plugin-test
명령어가 포함되어 있습니다:
asdf plugin test <plugin_name> <plugin_url> [--asdf-tool-version <version>] [--asdf-plugin-gitref <git_ref>] [test_command...]
<plugin_name>
및 <plugin_url>
는 필수적입니다[--asdf-tool-version <version>]
를 지정하면, 해당 지정된 버전의 툴이 설치됩니다. 기본값은 asdf latest <plugin-name>
입니다.[--asdf-plugin-gitref <git_ref>]
를 지정하면, 그 커밋/브랜치/태그로 플러그인 자체를 체크아웃합니다. 이것은 플러그인 CI에서 풀 요청을 테스트할 때 유용합니다.[test_command...]
는 설치된 툴이 올바르게 동작하는지 확인하기위해 실행시키는 명령어입니다. 일반적으로 <tool> --version
또는 <tool> --help
입니다. 예를 들어, NodeJS 플러그인을 테스트하기 위해, 다음을 실행시킬 수 있습니다# asdf plugin test <plugin_name> <plugin_url> [test_command]
+ asdf plugin test nodejs https://github.com/asdf-vm/asdf-nodejs.git node --version
노트
리눅스와 맥 운영체제 양쪽 CI 환경에서 모두 테스트하는 것을 권장합니다.
asdf-vm/actions 리포지토리는 GitHub에서 호스팅되는 플러그인을 테스트하기 위한 GitHub Action을 제공합니다. .github/workflows/test.yaml
액션 워크플로우 예시:
name: Test
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+
+jobs:
+ plugin_test:
+ name: asdf plugin test
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - macos-latest
+ runs-on: \${{ matrix.os }}
+ steps:
+ - name: asdf_plugin_test
+ uses: asdf-vm/actions/plugin-test@v2
+ with:
+ command: "<MY_TOOL> --version"
.travis.yml
예시 파일, 필요에 따라 바꿔 사용하세요:
language: c
+script: asdf plugin test <MY_TOOL> $TRAVIS_BUILD_DIR '<MY_TOOL> --version'
+before_script:
+ - git clone https://github.com/asdf-vm/asdf.git asdf
+ - . asdf/asdf.sh
+os:
+ - linux
+ - osx
노트
다른 CI를 사용하는 경우, 플러그인 위치에 대한 상대 경로를 전달할 필요가 있는 경우가 있습니다:
asdf plugin test <tool_name> <path> '<tool_command> --version'
bin/list-all
이나 bin/latest-stable
과 같이 명령어가 외부 API에 대한 접근에 의존하고 있는 경우, 자동화 테스트 중에 속도 제한이 발생할 수 있습니다. 이를 줄이기 위해, 환경 변수를 통해 인증 토큰을 제공하는 코드 경로가 있는지 확인하십시오. 예를 들어:
cmd="curl --silent"
+if [ -n "$GITHUB_API_TOKEN" ]; then
+ cmd="$cmd -H 'Authorization: token $GITHUB_API_TOKEN'"
+fi
+
+cmd="$cmd $releases_path"
GITHUB_API_TOKEN
GITHUB_API_TOKEN
를 사용할 때는, 오직 public_repo
액세스 권환으로 새로운 개인 토큰을 생성합니다.
다음으로 이 토큰을 CI pipeline 환경 변수에 추가하십시오.
경고
절대 인증 토큰을 코드 리포지토리에 공개해서는 안됩니다.
TIP
권장되는 플러그인 설치 방법은 URL을 바탕으로 직접 설치입니다:
# asdf plugin add <name> <git_url>
+ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
git_url
이 지정되지 않은 경우, asdf는 사용될 git_url
을 정확히 결정하기 위해 Shortname 인덱스 리포지토리를 사용합니다.
Shortname 인덱스에 설명서에 따라 플러그인을 해당 리포지토리에 추가할 수 있습니다.
`,27))])}const B=n(h,[["render",v]]);export{x as __pageData,B as default}; diff --git a/assets/ko-kr_plugins_create.md.CGqR6Egc.lean.js b/assets/ko-kr_plugins_create.md.CGqR6Egc.lean.js new file mode 100644 index 00000000..3c3e7c82 --- /dev/null +++ b/assets/ko-kr_plugins_create.md.CGqR6Egc.lean.js @@ -0,0 +1,35 @@ +import{_ as n,c as p,a2 as e,j as i,a,G as l,B as d,o}from"./chunks/framework.BQmytedh.js";const x=JSON.parse('{"title":"플러그인 생성하기","description":"","frontmatter":{},"headers":[],"relativePath":"ko-kr/plugins/create.md","filePath":"ko-kr/plugins/create.md","lastUpdated":1734384735000}'),h={name:"ko-kr/plugins/create.md"},r={tabindex:"0"},k={style:{"text-align":"left"}},g={style:{"text-align":"left"}},c={style:{"text-align":"left"}},u={style:{"text-align":"left"}},b={id:"bin-list-all",tabindex:"-1"},F={id:"bin-download",tabindex:"-1"},E={id:"bin-install",tabindex:"-1"},y={id:"bin-latest-stable",tabindex:"-1"},m={id:"asdf-cli-확장-명령어",tabindex:"-1"},f={id:"맞춤-shim-템플릿",tabindex:"-1"};function v(A,s,_,C,S,D){const t=d("Badge");return o(),p("div",null,[s[48]||(s[48]=e('플러그인은 언어 / 툴의 버전 관리를 지원하는 실행 가능한 스크립트들이 있는 Git 리포지토리입니다. 이 스크립트들은 asdf에 의해 특정 명령어들을 받아 asdf list-all <name>
, asdf install <name> <version>
등의 지원을 위해 실행됩니다.
자체 플러그인을 만드는 것을 시작하는 두 가지 옵션이 있습니다:
asdf-<tool_name>
이름으로) 플러그인 리포지토리 생성하기. 리포지토리가 생성되면, 그 리포지토리를 clone하고 템플릿을 유기적으로 업데이트하여 setup.bash
스크립트를 실행합니다.asdf-<tool_name>
로 이룸 붙인 리포지토리를 시작하고 아래 문서에 필수 스크립트들을 구현하세요.asdf
명령어를 호출하면 안됩니다.sort -V
. asdf core를 참고하세요 금지된 명령어 목록asdf에서 호출 가능한 스크립트의 전체 목록입니다.
',9)),i("table",r,[s[25]||(s[25]=i("thead",null,[i("tr",null,[i("th",{style:{"text-align":"left"}},"스크립트"),i("th",{style:{"text-align":"left"}},"설명")])],-1)),i("tbody",null,[i("tr",null,[i("td",k,[s[0]||(s[0]=i("a",{href:"#bin-list-all"},"bin/list-all",-1)),s[1]||(s[1]=a()),l(t,{type:"tip",text:"필수",vertical:"middle"})]),s[2]||(s[2]=i("td",{style:{"text-align":"left"}},"모든 설치 가능한 버전들을 나열",-1))]),i("tr",null,[i("td",g,[s[3]||(s[3]=i("a",{href:"#bin-download"},"bin/download",-1)),s[4]||(s[4]=a()),l(t,{type:"tip",text:"필수",vertical:"middle"})]),s[5]||(s[5]=i("td",{style:{"text-align":"left"}},"지정한 버전에 대한 소스 코드 또는 바이너리 다운로드",-1))]),i("tr",null,[i("td",c,[s[6]||(s[6]=i("a",{href:"#bin-install"},"bin/install",-1)),s[7]||(s[7]=a()),l(t,{type:"tip",text:"필수",vertical:"middle"})]),s[8]||(s[8]=i("td",{style:{"text-align":"left"}},"지정된 버전을 설치",-1))]),i("tr",null,[i("td",u,[s[9]||(s[9]=i("a",{href:"#bin-latest-stable"},"bin/latest-stable",-1)),s[10]||(s[10]=a()),l(t,{type:"warning",text:"추천",vertical:"middle"})]),s[11]||(s[11]=i("td",{style:{"text-align":"left"}},"지정된 도구의 최신 안정 버전 나열",-1))]),s[12]||(s[12]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.overview"},"bin/help.overview")]),i("td",{style:{"text-align":"left"}},"플러그인 및 도구에 대한 일반적인 설명을 출력")],-1)),s[13]||(s[13]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.deps"},"bin/help.deps")]),i("td",{style:{"text-align":"left"}},"운영 체제별 dependencies 목록 출력")],-1)),s[14]||(s[14]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.config"},"bin/help.config")]),i("td",{style:{"text-align":"left"}},"플러그인 및 툴 설정 정보 출력")],-1)),s[15]||(s[15]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-help.links"},"bin/help.links")]),i("td",{style:{"text-align":"left"}},"플러그인 및 툴에 대한 링크 목록 출력")],-1)),s[16]||(s[16]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-list-bin-paths"},"bin/list-bin-paths")]),i("td",{style:{"text-align":"left"}},"shim들을 생성하기 위해 바이너리 파일이 있는 디렉토리에 대한 상대 경로 나열")],-1)),s[17]||(s[17]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-exec-env"},"bin/exec-env")]),i("td",{style:{"text-align":"left"}},"바이너리 실행을 위한 환경 준비")],-1)),s[18]||(s[18]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-exec-path"},"bin/exec-path")]),i("td",{style:{"text-align":"left"}},"툴 버전의 실행파일 경로 출력")],-1)),s[19]||(s[19]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-uninstall"},"bin/uninstall")]),i("td",{style:{"text-align":"left"}},"툴의 특정 버전 제거")],-1)),s[20]||(s[20]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-list-legacy-filenames"},"bin/list-legacy-filenames")]),i("td",{style:{"text-align":"left"}},[a("레거시 버전 파일의 이름 출력: "),i("code",null,".ruby-version")])],-1)),s[21]||(s[21]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-parse-legacy-file"},"bin/parse-legacy-file")]),i("td",{style:{"text-align":"left"}},"레거시 버전 파일들을 위한 맞춤 parser")],-1)),s[22]||(s[22]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-post-plugin-add"},"bin/post-plugin-add")]),i("td",{style:{"text-align":"left"}},"플러그인이 추가된 후 실행될 훅")],-1)),s[23]||(s[23]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-post-plugin-update"},"bin/post-plugin-update")]),i("td",{style:{"text-align":"left"}},"플러그인이 업데이트 된 후 실행될 훅")],-1)),s[24]||(s[24]=i("tr",null,[i("td",{style:{"text-align":"left"}},[i("a",{href:"#bin-pre-plugin-remove"},"bin/pre-plugin-remove")]),i("td",{style:{"text-align":"left"}},"플러그인이 제거되기 전 실행될 훅")],-1))])]),s[49]||(s[49]=e('어떤 명령어가 어떤 스크립트를 호출하는지 확인하려면, 각 스크립트에 대한 자세한 문서를 참조하세요.
모든 스크립트에서 사용되는 환경 변수의 전체 목록입니다.
환경 변수 | 설명 |
---|---|
ASDF_INSTALL_TYPE | version 또는 ref |
ASDF_INSTALL_VERSION | ASDF_INSTALL_TYPE 에 따른 풀 버전 번호 또는 Git Ref |
ASDF_INSTALL_PATH | 툴이 설치 되어야하는 혹은 되어있는 경로 |
ASDF_CONCURRENCY | 소스 코드를 컴파일할 때 사용할 코어 수. make-j 를 설정할 때 유용 |
ASDF_DOWNLOAD_PATH | bin/download 에 의해 소스 코드 또는 바이너리가 다운로드 된 경로 |
ASDF_PLUGIN_PATH | 플러그인이 설치된 경로 |
ASDF_PLUGIN_SOURCE_URL | 플러그인의 소스 URL |
ASDF_PLUGIN_PREV_REF | 플러그인 리포지토리의 이전 git-ref |
ASDF_PLUGIN_POST_REF | 플러그인 리포지토리의 업데이트 된 git-ref |
ASDF_CMD_FILE | source 되는 파일의 전체 경로를 해결 |
노트
모든 스크립트에서 모든 환경 변수를 사용할 수 있는 것은 아닙니다. 아래 각 스크립트에 대한 문서를 확인하여 사용할 수 있는 환경 변수들을 확인하세요.
설명
설치 가능한 모든 버전 나열.
출력 형식
공백으로 구분된 문자열을 반드시 출력. 예를 들어:
1.0.1 1.0.2 1.3.0 1.4
최신 버전이 마지막에 와야 합니다.
asdf core는 각 버전을 각각의 행에 출력하여, 일부 버전을 화면 밖으로 밀어낼 가능성이 있습니다.
정렬
웹사이트의 릴리스 페이지에서 버전을 가져오는 경우에는 이미 올바른 순서로 되어 있는 경우가 많기 때문에 제공된 순서대로 두는 것이 좋습니다. 역순으로 되어 있는 경우 tac
을 통해 해당 버전들을 바로 잡는것으로 충분합니다.
정렬이 불가피한 경우, sort -V
는 사용이 불가능하므로, 다음 중 하나를 제안합니다:
v2.18.0
이상 필요)sed
, sort
& awk
필요)스크립트에서 사용 가능한 환경 변수
이 스크립트에는 환경 변수가 제공되지 않습니다.
이 스크립트를 호출하는 명령어
asdf list all <name> [version]
asdf list all nodejs
: 이 스크립트에 의해 반환된 모든 버전을 나열합니다, 한 행에 한개씩.asdf list all nodejs 18
: 이 스크립트에 의해 반환된 모든 버전을 나열하며, 각 행에 하나씩, 18
로 시작하는 모든 버전에 필터가 적용됩니다.asdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}/bin/list-all"
설명
지정된 장소에 지정된 버전에 대한 소스 코드 또는 바이너리 다운로드
구현 세부사항
ASDF_DOWNLOAD_PATH
에서 지정된 디렉토리에 다운로드해야합니다.ASDF_DOWNLOAD_PATH
디렉토리에 위치해야합니다.ASDF_DOLOAD_PATH
에 어떠한 파일도 남아서는 안 됩니다.0
이 종료 코드입니다.레거시 플러그인
비록 이 스크립트는 모든 플러그인에서 _필수_로 되어 있지만, 이 스크립트가 도입되기 이전의 "레거시" 플러그인에서는 선택 입니다.
이 스크립트가 없는 경우, asdf는 bin/install
스크립트가 있다고 가정하고 해당 버전을 다운로드 그리고 설치합니다.
레거시 플러그인 지원은 최종적으로 제거될 예정이기 때문에 앞으로 작성할 모든 플러그인에서 이 스크립트를 포함해야합니다.
스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.ASDF_DOWNLOAD_PATH
: 소스 코드 또는 바이너리 파일이 다운로드 된 경로.이 스크립트를 호출하는 명령어
asdf install <tool> [version]
asdf install <tool> latest[:version]
asdf install nodejs 18.0.0
: Node.js 버전 18.0.0
의 소스 코드 또는 바이너리를 다운로드하고 ASDF_DOWLOAD_PATH
디렉토리에 저장. 그 다음 bin/install
스크립트를 실행.asdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}"/bin/download
설명
특정 버전의 도구를 지정된 위치에 설치.
구현 세부사항
ASDF_INSTALL_PATH
경로에 지정된 버전을 설치해야합니다.$ASDF_INSTALL_PATH/bin
에 있는 어떠한 파일에 대해서든 기본적으로 생성됩니다. 이 동작은 선택적 bin/list-bin-paths 스크립트로 맞춤 설정 가능합니다.0
이 종료 코드입니다.ASDF_INSTALL_PATH
에 배치합니다.레거시 플러그인
bin/download
스크립트가 없는 경우, 이 스크립트는 지정된 버전을 다운로드 그리고 설치해야합니다.
0.7._
보다 이전 그리고 0.8._
보다 이후 asdf 코어 버전들의 호환성을 확인하려면, ASDF_DOWNLOAD_PATH
환경 변수가 있는지 확인합니다. 그 환경 변수가 존재하는 경우, 이미 bin/download
스크립트가 그 버전을 다운로드했다고 가정하고, 존재하지 않으면 bin/install
스크립트에서 소스 코드를 다운로드합니다.
스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.ASDF_CONCURRENCY
: 소스 코드를 컴파일할 때 사용할 코어 수. make-j
를 설정할 때 유용.ASDF_DOWNLOAD_PATH
: 소스 코드 또는 바이너리 파일이 다운로드 된 경로.이 스크립트를 호출하는 명령어
asdf install
asdf install <tool>
asdf install <tool> [version]
asdf install <tool> latest[:version]
asdf install nodejs 18.0.0
: Node.js 버전 18.0.0
을 ASDF_INSTALL_PATH
디렉토리에 설치.asdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}"/bin/install
설명
도구의 최신 안정 버전을 결정합니다. 이 스크립트가 존재하지 않는 경우, asdf 코어는 bin/list-all
의 출력을 비의도적으로 tail
합니다.
구현 세부사항
asdf list all ruby
는 jruby
, rbx
, truffleruby
등의 많은 제공자들의 Ruby 버전 목록을 출력합니다. 사용자가 제공한 필터는 플러그인이 유의적 버전 및/또는 공급자를 필터링하는 데 사용될 수 있습니다.> asdf latest ruby\n3.2.2\n> asdf latest ruby 2\n2.7.8\n> asdf latest ruby truffleruby\ntruffleruby+graalvm-22.3.1
0
이 종료 코드입니다.스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf global <tool> latest
: 툴의 글로벌 버전을 해당 툴의 최신 안정 버전으로 설정합니다.asdf local <name> latest
: 툴의 로컬 버전을 해당 툴의 최신 안정 버전으로 설정합니다.asdf install <tool> latest
: 최신 버전의 툴을 설치합니다.asdf latest <tool> [<version>]
: 선택적인 필터를 기반으로 도구의 최신 버전을 출력합니다.asdf latest --all
: asdf에서 관리하는 모든 툴의 최신 버전과 설치 여부를 출력합니다.asdf core에서 호출 시그니처
이 스크립트는 필터 쿼리라는 하나의 인수를 받습니다.
"${plugin_path}"/bin/latest-stable "$query"
bin/help.overview
설명
플러그인 및 관리 중인 툴에 대한 일반적인 설명을 출력.
구현 세부사항
ASDF_INSTALL_VERSION
및 ASDF_INSTALL_TYPE
환경 변수의 값을 사용하십시오).0
이 종료 코드입니다.스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf help <name> [<version>]
: 플러그인 및 도구 문서를 출력asdf core에서 호출 시그니처
"${plugin_path}"/bin/help.overview
bin/help.deps
설명
운영 체제에 맞는 dependencies 목록을 출합니다. 한 행마다 한 개의 dependency.
git\ncurl\nsed
구현 세부사항
bin/help.overview
가 필요합니다.ASDF_INSTALL_VERSION
및 ASDF_INSTALL_TYPE
환경 변수의 값을 사용하십시오).0
이 종료 코드입니다.스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf help <name> [<version>]
: 플러그인 및 도구 문서를 출력asdf core에서 호출 시그니처
"${plugin_path}"/bin/help.deps
bin/help.config
설명
플러그인 및 도구에 필수적 또는 선택적 설정 출력. 예를 들어, 도구를 설치하거나 컴파일하는 데 필요한 환경 변수나 기타 플래그를 설명.
구현 세부사항
bin/help.overview
가 필요합니다.ASDF_INSTALL_VERSION
및 ASDF_INSTALL_TYPE
환경 변수의 값을 사용하십시오).0
이 종료 코드입니다.스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf help <name> [<version>]
: 플러그인 및 도구 문서를 출력asdf core에서 호출 시그니처
"${plugin_path}"/bin/help.config
bin/help.links
설명
플러그인 및 툴과 관련된 링크 목록을 출력. 한 행마다 한 개의 링크.
Git Repository: https://github.com/vlang/v\nDocumentation: https://vlang.io
구현 세부사항
bin/help.overview
가 필요합니다.<title>: <link>
<link>
ASDF_INSTALL_VERSION
및 ASDF_INSTALL_TYPE
환경 변수의 값을 사용하십시오).0
이 종료 코드입니다.스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf help <name> [<version>]
: 플러그인 및 도구 문서를 출력asdf core에서 호출 시그니처
"${plugin_path}"/bin/help.links
bin/list-bin-paths
설명
툴의 특정 버전에서 실행파일이 포함된 디렉토리 목록을 출력.
구현 세부사항
"${ASDF_INSTALL_PATH}"/bin
디렉토리 내에 있는 바이너리들을 찾아 그 바이너리를 위한 shim들을 생성합니다.ASDF_INSTALL_PATH
로의 상대 경로이어야 합니다. 출력 예시는 다음과 같습니다:bin tools veggies
이는 asdf가 그 파일들을 위한 shim들을 다음 위치에 생성하게 지시합니다:
"${ASDF_INSTALL_PATH}"/bin
"${ASDF_INSTALL_PATH}"/tools
"${ASDF_INSTALL_PATH}"/veggies
스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf install <tool> [version]
: 초기에 바이너리들을 위한 shim들 생성.asdf reshim <tool> <version>
: 바이너리들을 위한 shim들 재생성.asdf core에서 호출 시그니처
"${plugin_path}/bin/list-bin-paths"
bin/exec-env
설명
툴 바이너리의 shim을 실행하기 전에 환경을 준비.
스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf which <command>
: 실행파일의 경로 표시asdf exec <command> [args...]
: 현재 버전에서 shim 명령을 실행asdf env <command> [util]
: shim 명령어 실행 시 사용되는 환경에서 유틸리티(기본값: env
)를 실행.asdf core에서 호출 시그니처
"${plugin_path}/bin/exec-env"
bin/exec-path
툴의 특정 버전의 실행파일 경로를 가져옵니다. 실행파일에 대한 상대 경로를 문자열로 출력해야합니다. 이는 플러그인이 shim에서 지정한 실행파일 경로를 조건부로 덮어쓰게 하거나, 그렇지 않으면 shim에서 지정한 기본 경로를 반환합니다.
설명
툴의 특정 버전의 실행파일 경로를 가져옵니다.
구현 세부사항
Usage:\n plugin/bin/exec-path <install-path> <command> <executable-path>\n\nExample Call:\n ~/.asdf/plugins/foo/bin/exec-path "~/.asdf/installs/foo/1.0" "foo" "bin/foo"\n\nOutput:\n bin/foox
스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
asdf which <command>
: 실행파일의 경로 표시asdf exec <command> [args...]
: 현재 버전에서 shim 명령을 실행asdf env <command> [util]
: shim 명령어 실행 시 사용되는 환경에서 유틸리티(기본값: env
)를 실행.asdf core에서 호출 시그니처
"${plugin_path}/bin/exec-path" "$install_path" "$cmd" "$relative_path"
bin/uninstall
설명
툴의 지정된 버전을 제거합니다.
출력 형식
출력값은 stdout
또는 stderr
에 적절히 송신 되어야 합니다. 어떠한 출력값도 후속 코어 실행에 의해 사용되지 않습니다.
스크립트에서 사용 가능한 환경 변수
이 스크립트에는 환경 변수가 제공되지 않습니다.
이 스크립트를 호출하는 명령어
asdf list all <name> <version>
asdf uninstall nodejs 18.15.0
: nodejs의 18.15.0
버전을 제거, npm i -g
로 설치된 모든 글로벌 shim들 또한 제거.asdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}/bin/uninstall"
bin/list-legacy-filenames
설명
툴 버전을 결정하는 데 사용된 레거시 설정 파일 목록을 출력.
구현 세부사항
.ruby-version .rvmrc
"${HOME}"/.asdfrc
에서 legacy_version_file
옵션을 활성화한 사용자에게만 적용됩니다.스크립트에서 사용 가능한 환경 변수
ASDF_INSTALL_TYPE
: version
또는 ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
의 경우, 풀 버전 번호.ASDF_INSTALL_TYPE=ref
의 경우, Git ref (태그/커밋/브랜치).ASDF_INSTALL_PATH
: 툴이 설치 되어있는, 또는 되어야하는 경로.이 스크립트를 호출하는 명령어
툴 버전을 가져오는 모든 명령에서 호출됩니다.
asdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}/bin/list-legacy-filenames"
bin/parse-legacy-file
설명
asdf에 의해 발견된 레거시 파일을 parse하여 툴의 버전을 결정. 자바스크립트의 package.json
이나 Go 언어의 go.mod
와 같은 파일에서 버전 번호를 추출하는 데 유용.
구현 세부사항
cat
하여 버전을 결정합니다.1.2.3
스크립트에서 사용 가능한 환경 변수
이 스크립트가 호출되기 전에 환경 변수가 설정되지 않습니다.
이 스크립트를 호출하는 명령어
툴 버전을 가져오는 모든 명령에서 호출됩니다.
asdf core에서 호출 시그니처
이 스크립트는 레거시 파일의 내용을 읽기 위해 레거시 파일의 경로라는 하나의 인수를 받습니다.
"${plugin_path}/bin/parse-legacy-file" "$file_path"
bin/post-plugin-add
설명
이 콜백 스크립트는 asdf의 asdf plugin add <tool>
명령어로 플러그인이 추가된 후에 실행됩니다.
관련된 명령어 훅들을 참조하세요:
pre_asdf_plugin_add
pre_asdf_plugin_add_${plugin_name}
post_asdf_plugin_add
post_asdf_plugin_add_${plugin_name}
스크립트에서 사용 가능한 환경 변수
ASDF_PLUGIN_PATH
: 플러그인이 설치된 경로.ASDF_PLUGIN_SOURCE_URL
: 플러그인 소스의 URL. 로컬 디렉토리 경로일 수 있음.asdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}/bin/post-plugin-add"
bin/post-plugin-update
설명
이 콜백 스크립트는 asdf가 asdf plugin update <tool> [<git-ref>]
커맨드로 플러그인 업데이트 를 다운로드한 후에 실행됩니다.
관련된 명령어 훅들을 참조하세요:
pre_asdf_plugin_update
pre_asdf_plugin_update_${plugin_name}
post_asdf_plugin_update
post_asdf_plugin_update_${plugin_name}
스크립트에서 사용 가능한 환경 변수
ASDF_PLUGIN_PATH
: 플러그인이 설치된 경로.ASDF_PLUGIN_PREV_REF
: 플러그인의 이전 git-refASDF_PLUGIN_POST_REF
: 플러그인의 업데이트 된 git-refasdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}/bin/post-plugin-update"
bin/pre-plugin-remove
설명
asdf가 asdf plugin remove <tool>
커맨드로 플러그인을 제거하기 전에 이 콜백 스크립트를 실행시키세요.
관련된 명령어 훅들을 참조하세요:
pre_asdf_plugin_remove
pre_asdf_plugin_remove_${plugin_name}
post_asdf_plugin_remove
post_asdf_plugin_remove_${plugin_name}
스크립트에서 사용 가능한 환경 변수
ASDF_PLUGIN_PATH
: 플러그인이 설치된 경로.asdf core에서 호출 시그니처
제공되는 매개변수는 없습니다.
"${plugin_path}/bin/pre-plugin-remove"
lib/commands/command*.bash
스크립트 또는 플러그인 이름을 하위명령어로 사용하여 asdf 명령줄 인터페이스를 통해 호출할 수 있는 실행파일을 제공함으로써 새로운 asdf 명령어를 정의할 수 있습니다.
예를 들면, foo
라고 하는 플러그인이 있다고 하면:
foo/\n lib/commands/\n command.bash\n command-bat.bash\n command-bat-man.bash\n command-help.bash
사용자는 아래 명령을 실행할 수 있게 됩니다:
$ asdf foo # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash`\n$ asdf foo bar # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash bar`\n$ asdf foo help # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-help.bash`\n$ asdf foo bat man # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat-man.bash`\n$ asdf foo bat baz # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat.bash baz`
플러그인 개발자는 이 기능을 사용하여 툴과 관련된 유틸리티를 제공하거나, asdf 자체의 명령어 확장 플러그인을 생성할 수 있습니다.
실행 가능 비트(executable bit)가 부여되어 있는 경우, asdf 실행을 대신하여 해당 스크립트가 실행됩니다.
실행 가능 비트(executable bit)가 부여되지 않은 경우, asdf는 해당 스크립트를 Bash 스크립트로 source합니다.
$ASDF_CMD_FILE
는 source 되는 파일의 전체 경로를 해결합니다.
haxe
는 이 기능을 사용하는 플러그인의 좋은 예시입니다. 이 플러그인은 Haxe 실행파일이 해당 디렉토리에서 상대적으로 동적 라이브러리를 찾으려하는 문제해결을 위해 asdf haxe neko-dylibs-link
를 제공합니다.
플러그인 README에는 asdf 확장 명령어에 관한 것을 반드시 기재하도록 하십시오.
',11)),i("h2",f,[s[45]||(s[45]=a("맞춤 Shim 템플릿 ")),l(t,{type:"danger",text:"고급",vertical:"middle"}),s[46]||(s[46]=a()),s[47]||(s[47]=i("a",{class:"header-anchor",href:"#맞춤-shim-템플릿","aria-label":'Permalink to "맞춤 Shim 템플릿경고
반드시 필요한 경우에만 사용하세요.
asdf에서는 맞춤 shim 템플릿을 사용할 수 있습니다. foo
라고 하는 실행파일에 대해, 플러그인 내에 shims/foo
파일이 존재하면, asdf는 표준 shim 템플릿을 사용하는 대신 그 파일을 복사합니다.
이 기능은 현명하게 사용해야합니다.
asdf 코어팀이 파악하고 있는 것은, 이 기능은 오직 공식 플러그인 Elixir 플러그인에서만 사용되고 있습니다. 이는 실행파일은 실행파일일 뿐만 아니라 Elixir 파일로도 읽히기 때문입니다. 이 때문에 표준 Bash shim을 사용할 수 없습니다.
asdf
에는 플러그인을 테스트하기 위한 plugin-test
명령어가 포함되어 있습니다:
asdf plugin test <plugin_name> <plugin_url> [--asdf-tool-version <version>] [--asdf-plugin-gitref <git_ref>] [test_command...]
<plugin_name>
및 <plugin_url>
는 필수적입니다[--asdf-tool-version <version>]
를 지정하면, 해당 지정된 버전의 툴이 설치됩니다. 기본값은 asdf latest <plugin-name>
입니다.[--asdf-plugin-gitref <git_ref>]
를 지정하면, 그 커밋/브랜치/태그로 플러그인 자체를 체크아웃합니다. 이것은 플러그인 CI에서 풀 요청을 테스트할 때 유용합니다.[test_command...]
는 설치된 툴이 올바르게 동작하는지 확인하기위해 실행시키는 명령어입니다. 일반적으로 <tool> --version
또는 <tool> --help
입니다. 예를 들어, NodeJS 플러그인을 테스트하기 위해, 다음을 실행시킬 수 있습니다# asdf plugin test <plugin_name> <plugin_url> [test_command]
+ asdf plugin test nodejs https://github.com/asdf-vm/asdf-nodejs.git node --version
노트
리눅스와 맥 운영체제 양쪽 CI 환경에서 모두 테스트하는 것을 권장합니다.
asdf-vm/actions 리포지토리는 GitHub에서 호스팅되는 플러그인을 테스트하기 위한 GitHub Action을 제공합니다. .github/workflows/test.yaml
액션 워크플로우 예시:
name: Test
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+
+jobs:
+ plugin_test:
+ name: asdf plugin test
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - macos-latest
+ runs-on: \${{ matrix.os }}
+ steps:
+ - name: asdf_plugin_test
+ uses: asdf-vm/actions/plugin-test@v2
+ with:
+ command: "<MY_TOOL> --version"
.travis.yml
예시 파일, 필요에 따라 바꿔 사용하세요:
language: c
+script: asdf plugin test <MY_TOOL> $TRAVIS_BUILD_DIR '<MY_TOOL> --version'
+before_script:
+ - git clone https://github.com/asdf-vm/asdf.git asdf
+ - . asdf/asdf.sh
+os:
+ - linux
+ - osx
노트
다른 CI를 사용하는 경우, 플러그인 위치에 대한 상대 경로를 전달할 필요가 있는 경우가 있습니다:
asdf plugin test <tool_name> <path> '<tool_command> --version'
bin/list-all
이나 bin/latest-stable
과 같이 명령어가 외부 API에 대한 접근에 의존하고 있는 경우, 자동화 테스트 중에 속도 제한이 발생할 수 있습니다. 이를 줄이기 위해, 환경 변수를 통해 인증 토큰을 제공하는 코드 경로가 있는지 확인하십시오. 예를 들어:
cmd="curl --silent"
+if [ -n "$GITHUB_API_TOKEN" ]; then
+ cmd="$cmd -H 'Authorization: token $GITHUB_API_TOKEN'"
+fi
+
+cmd="$cmd $releases_path"
GITHUB_API_TOKEN
GITHUB_API_TOKEN
를 사용할 때는, 오직 public_repo
액세스 권환으로 새로운 개인 토큰을 생성합니다.
다음으로 이 토큰을 CI pipeline 환경 변수에 추가하십시오.
경고
절대 인증 토큰을 코드 리포지토리에 공개해서는 안됩니다.
TIP
권장되는 플러그인 설치 방법은 URL을 바탕으로 직접 설치입니다:
# asdf plugin add <name> <git_url>
+ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
git_url
이 지정되지 않은 경우, asdf는 사용될 git_url
을 정확히 결정하기 위해 Shortname 인덱스 리포지토리를 사용합니다.
Shortname 인덱스에 설명서에 따라 플러그인을 해당 리포지토리에 추가할 수 있습니다.
`,27))])}const B=n(h,[["render",v]]);export{x as __pageData,B as default}; diff --git a/assets/manage_commands.md.-uGyRGzy.js b/assets/manage_commands.md.-uGyRGzy.js new file mode 100644 index 00000000..5f6c56ee --- /dev/null +++ b/assets/manage_commands.md.-uGyRGzy.js @@ -0,0 +1,66 @@ +import{_ as a,c as n,a2 as e,o as l}from"./chunks/framework.BQmytedh.js";const m=JSON.parse('{"title":"All Commands","description":"","frontmatter":{},"headers":[],"relativePath":"manage/commands.md","filePath":"manage/commands.md","lastUpdated":1687069487000}'),p={name:"manage/commands.md"};function t(i,s,o,c,r,d){return l(),n("div",null,s[0]||(s[0]=[e(`The list of all commands available in asdf
. This list is the asdf help
command text.
MANAGE PLUGINS
+asdf plugin add <name> [<git-url>] Add a plugin from the plugin repo OR,
+ add a Git repo as a plugin by
+ specifying the name and repo url
+asdf plugin list [--urls] [--refs] List installed plugins. Optionally show
+ git urls and git-ref
+asdf plugin list all List plugins registered on asdf-plugins
+ repository with URLs
+asdf plugin remove <name> Remove plugin and package versions
+asdf plugin update <name> [<git-ref>] Update a plugin to latest commit on
+ default branch or a particular git-ref
+asdf plugin update --all Update all plugins to latest commit on
+ default branch
+
+
+MANAGE PACKAGES
+asdf current Display current version set or being
+ used for all packages
+asdf current <name> Display current version set or being
+ used for package
+asdf global <name> <version> Set the package global version
+asdf global <name> latest[:<version>] Set the package global version to the
+ latest provided version
+asdf help <name> [<version>] Output documentation for plugin and tool
+asdf install Install all the package versions listed
+ in the .tool-versions file
+asdf install <name> Install one tool at the version
+ specified in the .tool-versions file
+asdf install <name> <version> Install a specific version of a package
+asdf install <name> latest[:<version>] Install the latest stable version of a
+ package, or with optional version,
+ install the latest stable version that
+ begins with the given string
+asdf latest <name> [<version>] Show latest stable version of a package
+asdf latest --all Show latest stable version of all the
+ packages and if they are installed
+asdf list <name> [version] List installed versions of a package and
+ optionally filter the versions
+asdf list all <name> [<version>] List all versions of a package and
+ optionally filter the returned versions
+asdf local <name> <version> Set the package local version
+asdf local <name> latest[:<version>] Set the package local version to the
+ latest provided version
+asdf shell <name> <version> Set the package version to
+ \`ASDF_\${LANG}_VERSION\` in the current shell
+asdf uninstall <name> <version> Remove a specific version of a package
+asdf where <name> [<version>] Display install path for an installed
+ or current version
+asdf which <command> Display the path to an executable
+
+
+UTILS
+asdf exec <command> [args...] Executes the command shim for current version
+asdf env <command> [util] Runs util (default: \`env\`) inside the
+ environment used for command shim execution.
+asdf info Print OS, Shell and ASDF debug information.
+asdf version Print the currently installed version of ASDF
+asdf reshim <name> <version> Recreate shims for version of a package
+asdf shim-versions <command> List the plugins and versions that
+ provide a command
+asdf update Update asdf to the latest stable release
+asdf update --head Update asdf to the latest on the master branch
+
+RESOURCES
+GitHub: https://github.com/asdf-vm/asdf
+Docs: https://asdf-vm.com
The list of all commands available in asdf
. This list is the asdf help
command text.
MANAGE PLUGINS
+asdf plugin add <name> [<git-url>] Add a plugin from the plugin repo OR,
+ add a Git repo as a plugin by
+ specifying the name and repo url
+asdf plugin list [--urls] [--refs] List installed plugins. Optionally show
+ git urls and git-ref
+asdf plugin list all List plugins registered on asdf-plugins
+ repository with URLs
+asdf plugin remove <name> Remove plugin and package versions
+asdf plugin update <name> [<git-ref>] Update a plugin to latest commit on
+ default branch or a particular git-ref
+asdf plugin update --all Update all plugins to latest commit on
+ default branch
+
+
+MANAGE PACKAGES
+asdf current Display current version set or being
+ used for all packages
+asdf current <name> Display current version set or being
+ used for package
+asdf global <name> <version> Set the package global version
+asdf global <name> latest[:<version>] Set the package global version to the
+ latest provided version
+asdf help <name> [<version>] Output documentation for plugin and tool
+asdf install Install all the package versions listed
+ in the .tool-versions file
+asdf install <name> Install one tool at the version
+ specified in the .tool-versions file
+asdf install <name> <version> Install a specific version of a package
+asdf install <name> latest[:<version>] Install the latest stable version of a
+ package, or with optional version,
+ install the latest stable version that
+ begins with the given string
+asdf latest <name> [<version>] Show latest stable version of a package
+asdf latest --all Show latest stable version of all the
+ packages and if they are installed
+asdf list <name> [version] List installed versions of a package and
+ optionally filter the versions
+asdf list all <name> [<version>] List all versions of a package and
+ optionally filter the returned versions
+asdf local <name> <version> Set the package local version
+asdf local <name> latest[:<version>] Set the package local version to the
+ latest provided version
+asdf shell <name> <version> Set the package version to
+ \`ASDF_\${LANG}_VERSION\` in the current shell
+asdf uninstall <name> <version> Remove a specific version of a package
+asdf where <name> [<version>] Display install path for an installed
+ or current version
+asdf which <command> Display the path to an executable
+
+
+UTILS
+asdf exec <command> [args...] Executes the command shim for current version
+asdf env <command> [util] Runs util (default: \`env\`) inside the
+ environment used for command shim execution.
+asdf info Print OS, Shell and ASDF debug information.
+asdf version Print the currently installed version of ASDF
+asdf reshim <name> <version> Recreate shims for version of a package
+asdf shim-versions <command> List the plugins and versions that
+ provide a command
+asdf update Update asdf to the latest stable release
+asdf update --head Update asdf to the latest on the master branch
+
+RESOURCES
+GitHub: https://github.com/asdf-vm/asdf
+Docs: https://asdf-vm.com
Configuration of asdf
encompasses both the sharable .tool-versions
files as well as user specific customisations with .asdfrc
and Environment Variables.
.tool-versions
Whenever .tool-versions
file is present in a directory, the tool versions it declares will be used in that directory and any subdirectories.
Note
Global defaults can be set in the file $HOME/.tool-versions
This is what a .tool-versions
file looks like:
ruby 2.5.3
+nodejs 10.15.0
You can also include comments:
ruby 2.5.3 # This is a comment
+# This is another comment
+nodejs 10.15.0
The versions can be in the following format:
10.15.0
- an actual version. Plugins that support downloading binaries, will download binaries.ref:v1.0.2-a
or ref:39cb398vb39
- tag/commit/branch to download from github and compilepath:~/src/elixir
- a path to custom compiled version of a tool to use. For use by language developers and such.system
- this keyword causes asdf to passthrough to the version of the tool on the system that is not managed by asdf.TIP
Multiple versions can be set by separating them with a space. For example, to use Python 3.7.2
, fallback to Python 2.7.15
and finally to the system
Python, the following line can be added to .tool-versions
.
python 3.7.2 2.7.15 system
To install all the tools defined in a .tool-versions
file run asdf install
with no other arguments in the directory containing the .tool-versions
file.
To install a single tool defined in a .tool-versions
file run asdf install <name>
in the directory containing the .tool-versions
file. The tool will be installed at the version specified in the .tool-versions
file.
Edit the file directly or use asdf local
(or asdf global
) which updates it.
.asdfrc
The .asdfrc
file defines the user's machine specific configuration.
\${HOME}/.asdfrc
is the default location used by asdf. This can be set with the Environment Variable ASDF_CONFIG_FILE
.
The below file shows the required format with the default values:
legacy_version_file = no
+use_release_candidates = no
+always_keep_download = no
+plugin_repository_last_check_duration = 60
+disable_plugin_short_name_repository = no
+concurrency = auto
legacy_version_file
Plugins with support can read the versions files used by other version managers, for example, .ruby-version
in the case of Ruby's rbenv
.
Sync events occur when the following commands are executed:
asdf plugin add <name>
asdf plugin list all
asdf plugin add <name> <git-url>
does NOT trigger a plugin sync.
Note
Setting the value to never
does not stop the plugin repository from being initially synced, for that behaviour see disable_plugin_short_name_repository
.
disable_plugin_short_name_repository
Disable synchronization of the asdf plugin short-name repository. Sync events will exit early if the short-name repository is disabled.
',6)),e("table",v,[t[32]||(t[32]=e("thead",null,[e("tr",null,[e("th",{style:{"text-align":"left"}},"Options"),e("th",{style:{"text-align":"left"}},"Description")])],-1)),e("tbody",null,[e("tr",null,[e("td",x,[t[28]||(t[28]=e("code",null,"no",-1)),t[29]||(t[29]=o()),a(l,{type:"tip",text:"default",vertical:"middle"})]),t[30]||(t[30]=e("td",{style:{"text-align":"left"}},"Clone or update the asdf plugin repository on sync events",-1))]),t[31]||(t[31]=e("tr",null,[e("td",{style:{"text-align":"left"}},[e("code",null,"yes")]),e("td",{style:{"text-align":"left"}},"Disable the plugin short-name repository")],-1))])]),t[41]||(t[41]=s('Sync events occur when the following commands are executed:
asdf plugin add <name>
asdf plugin list all
asdf plugin add <name> <git-url>
does NOT trigger a plugin sync.
Note
Disabling the plugin short-name repository does not remove the repository if it has already synced. Remove the plugin repo with rm --recursive --trash $ASDF_DATA_DIR/repository
.
Disabling the plugin short-name repository does not remove plugins previously installed from this source. Plugins can be removed with asdf plugin remove <name>
. Removing a plugin will remove all installed versions of the managed tool.
concurrency
The default number of cores to use during compilation.
Options | Description |
---|---|
integer | Number of cores to use when compiling the source code |
auto | Calculate the number of cores using nproc , then sysctl hw.ncpu , then /proc/cpuinfo or else 1 |
Note: the environment variable ASDF_CONCURRENCY
take precedence if set.
It is possible to execute custom code:
For example, if a plugin called foo
is installed and provides a bar
executable, then the following hooks can be used to execute custom code first:
pre_foo_bar = echo Executing with args: $@
The following patterns are supported:
pre_<plugin_name>_<command>
pre_asdf_download_<plugin_name>
{pre,post}_asdf_{install,reshim,uninstall}_<plugin_name>
$1
: full version{pre,post}_asdf_plugin_{add,update,remove,reshim}
$1
: plugin name{pre,post}_asdf_plugin_{add,update,remove}_<plugin_name>
See Create a Plugin for specifics on what command hooks are ran before or after what commands.
Setting environment variables varies depending on your system and Shell. Default locations depend upon your installation location and method (Git clone, Homebrew, AUR).
Environment variables should generally be set before sourcing asdf.sh
/asdf.fish
etc. For Elvish set above use asdf
.
The following describe usage with a Bash Shell.
ASDF_CONFIG_FILE
Path to the .asdfrc
configuration file. Can be set to any location. Must be an absolute path.
$HOME/.asdfrc
will be used.export ASDF_CONFIG_FILE=/home/john_doe/.config/asdf/.asdfrc
ASDF_DEFAULT_TOOL_VERSIONS_FILENAME
The filename of the file storing the tool names and versions. Can be any valid filename. Typically, you should not set this value unless you want to ignore .tool-versions
files.
.tool-versions
will be used.export ASDF_DEFAULT_TOOL_VERSIONS_FILENAME=tool_versions
ASDF_DIR
The location of asdf
core scripts. Can be set to any location. Must be an absolute path.
bin/asdf
executable is used.export ASDF_DIR=/home/john_doe/.config/asdf
ASDF_DATA_DIR
The location where asdf
will install plugins, shims and tool versions. Can be set to any location. Must be an absolute path.
$HOME/.asdf
if it exists, or else the value of ASDF_DIR
export ASDF_DATA_DIR=/home/john_doe/.asdf
ASDF_CONCURRENCY
Number of cores to use when compiling the source code. If set, this value takes precedence over the asdf config concurrency
value.
concurrency
value is used.export ASDF_CONCURRENCY=32
ASDF_FORCE_PREPEND
Whether or not to prepend the asdf
shims and path directories to the front-most (highest-priority) part of the PATH
.
yes
; but on other systems, defaults to no
yes
: Force asdf
directories to the front of the PATH
yes
: Do not force asdf
directories to the front of the PATH
ASDF_FORCE_PREPEND=no . "<path-to-asdf-directory>/asdf.sh"
Following a simple asdf setup with:
$HOME/.asdf
.asdfrc
filewould result in the following outcomes:
Configuration | Value | Calculated by |
---|---|---|
config file location | $HOME/.asdfrc | ASDF_CONFIG_FILE is empty, so use $HOME/.asdfrc |
default tool versions filename | .tool-versions | ASDF_DEFAULT_TOOL_VERSIONS_FILENAME is empty, so use .tool-versions |
asdf dir | $HOME/.asdf | ASDF_DIR is empty, so use parent dir of bin/asdf |
asdf data dir | $HOME/.asdf | ASDF_DATA_DIR is empty so use $HOME/.asdf as $HOME exists. |
concurrency | auto | ASDF_CONCURRENCY is empty, so rely on concurrency value from the default configuration |
legacy_version_file | no | No custom .asdfrc , so use the default configuration |
use_release_candidates | no | No custom .asdfrc , so use the default configuration |
always_keep_download | no | No custom .asdfrc , so use the default configuration |
plugin_repository_last_check_duration | 60 | No custom .asdfrc , so use the default configuration |
disable_plugin_short_name_repository | no | No custom .asdfrc , so use the default configuration |
Users should not worry about this section as it describes configuration internal to asdf
useful for Package Managers and integrators.
$ASDF_DIR/asdf_updates_disabled
: Updates via the asdf update
command are disabled when this file is present (content irrelevant). This is used by package managers like Pacman or Homebrew to ensure the correct update method is used for the particular installation.Configuration of asdf
encompasses both the sharable .tool-versions
files as well as user specific customisations with .asdfrc
and Environment Variables.
.tool-versions
Whenever .tool-versions
file is present in a directory, the tool versions it declares will be used in that directory and any subdirectories.
Note
Global defaults can be set in the file $HOME/.tool-versions
This is what a .tool-versions
file looks like:
ruby 2.5.3
+nodejs 10.15.0
You can also include comments:
ruby 2.5.3 # This is a comment
+# This is another comment
+nodejs 10.15.0
The versions can be in the following format:
10.15.0
- an actual version. Plugins that support downloading binaries, will download binaries.ref:v1.0.2-a
or ref:39cb398vb39
- tag/commit/branch to download from github and compilepath:~/src/elixir
- a path to custom compiled version of a tool to use. For use by language developers and such.system
- this keyword causes asdf to passthrough to the version of the tool on the system that is not managed by asdf.TIP
Multiple versions can be set by separating them with a space. For example, to use Python 3.7.2
, fallback to Python 2.7.15
and finally to the system
Python, the following line can be added to .tool-versions
.
python 3.7.2 2.7.15 system
To install all the tools defined in a .tool-versions
file run asdf install
with no other arguments in the directory containing the .tool-versions
file.
To install a single tool defined in a .tool-versions
file run asdf install <name>
in the directory containing the .tool-versions
file. The tool will be installed at the version specified in the .tool-versions
file.
Edit the file directly or use asdf local
(or asdf global
) which updates it.
.asdfrc
The .asdfrc
file defines the user's machine specific configuration.
\${HOME}/.asdfrc
is the default location used by asdf. This can be set with the Environment Variable ASDF_CONFIG_FILE
.
The below file shows the required format with the default values:
legacy_version_file = no
+use_release_candidates = no
+always_keep_download = no
+plugin_repository_last_check_duration = 60
+disable_plugin_short_name_repository = no
+concurrency = auto
legacy_version_file
Plugins with support can read the versions files used by other version managers, for example, .ruby-version
in the case of Ruby's rbenv
.
Sync events occur when the following commands are executed:
asdf plugin add <name>
asdf plugin list all
asdf plugin add <name> <git-url>
does NOT trigger a plugin sync.
Note
Setting the value to never
does not stop the plugin repository from being initially synced, for that behaviour see disable_plugin_short_name_repository
.
disable_plugin_short_name_repository
Disable synchronization of the asdf plugin short-name repository. Sync events will exit early if the short-name repository is disabled.
',6)),e("table",v,[t[32]||(t[32]=e("thead",null,[e("tr",null,[e("th",{style:{"text-align":"left"}},"Options"),e("th",{style:{"text-align":"left"}},"Description")])],-1)),e("tbody",null,[e("tr",null,[e("td",x,[t[28]||(t[28]=e("code",null,"no",-1)),t[29]||(t[29]=o()),a(l,{type:"tip",text:"default",vertical:"middle"})]),t[30]||(t[30]=e("td",{style:{"text-align":"left"}},"Clone or update the asdf plugin repository on sync events",-1))]),t[31]||(t[31]=e("tr",null,[e("td",{style:{"text-align":"left"}},[e("code",null,"yes")]),e("td",{style:{"text-align":"left"}},"Disable the plugin short-name repository")],-1))])]),t[41]||(t[41]=s('Sync events occur when the following commands are executed:
asdf plugin add <name>
asdf plugin list all
asdf plugin add <name> <git-url>
does NOT trigger a plugin sync.
Note
Disabling the plugin short-name repository does not remove the repository if it has already synced. Remove the plugin repo with rm --recursive --trash $ASDF_DATA_DIR/repository
.
Disabling the plugin short-name repository does not remove plugins previously installed from this source. Plugins can be removed with asdf plugin remove <name>
. Removing a plugin will remove all installed versions of the managed tool.
concurrency
The default number of cores to use during compilation.
Options | Description |
---|---|
integer | Number of cores to use when compiling the source code |
auto | Calculate the number of cores using nproc , then sysctl hw.ncpu , then /proc/cpuinfo or else 1 |
Note: the environment variable ASDF_CONCURRENCY
take precedence if set.
It is possible to execute custom code:
For example, if a plugin called foo
is installed and provides a bar
executable, then the following hooks can be used to execute custom code first:
pre_foo_bar = echo Executing with args: $@
The following patterns are supported:
pre_<plugin_name>_<command>
pre_asdf_download_<plugin_name>
{pre,post}_asdf_{install,reshim,uninstall}_<plugin_name>
$1
: full version{pre,post}_asdf_plugin_{add,update,remove,reshim}
$1
: plugin name{pre,post}_asdf_plugin_{add,update,remove}_<plugin_name>
See Create a Plugin for specifics on what command hooks are ran before or after what commands.
Setting environment variables varies depending on your system and Shell. Default locations depend upon your installation location and method (Git clone, Homebrew, AUR).
Environment variables should generally be set before sourcing asdf.sh
/asdf.fish
etc. For Elvish set above use asdf
.
The following describe usage with a Bash Shell.
ASDF_CONFIG_FILE
Path to the .asdfrc
configuration file. Can be set to any location. Must be an absolute path.
$HOME/.asdfrc
will be used.export ASDF_CONFIG_FILE=/home/john_doe/.config/asdf/.asdfrc
ASDF_DEFAULT_TOOL_VERSIONS_FILENAME
The filename of the file storing the tool names and versions. Can be any valid filename. Typically, you should not set this value unless you want to ignore .tool-versions
files.
.tool-versions
will be used.export ASDF_DEFAULT_TOOL_VERSIONS_FILENAME=tool_versions
ASDF_DIR
The location of asdf
core scripts. Can be set to any location. Must be an absolute path.
bin/asdf
executable is used.export ASDF_DIR=/home/john_doe/.config/asdf
ASDF_DATA_DIR
The location where asdf
will install plugins, shims and tool versions. Can be set to any location. Must be an absolute path.
$HOME/.asdf
if it exists, or else the value of ASDF_DIR
export ASDF_DATA_DIR=/home/john_doe/.asdf
ASDF_CONCURRENCY
Number of cores to use when compiling the source code. If set, this value takes precedence over the asdf config concurrency
value.
concurrency
value is used.export ASDF_CONCURRENCY=32
ASDF_FORCE_PREPEND
Whether or not to prepend the asdf
shims and path directories to the front-most (highest-priority) part of the PATH
.
yes
; but on other systems, defaults to no
yes
: Force asdf
directories to the front of the PATH
yes
: Do not force asdf
directories to the front of the PATH
ASDF_FORCE_PREPEND=no . "<path-to-asdf-directory>/asdf.sh"
Following a simple asdf setup with:
$HOME/.asdf
.asdfrc
filewould result in the following outcomes:
Configuration | Value | Calculated by |
---|---|---|
config file location | $HOME/.asdfrc | ASDF_CONFIG_FILE is empty, so use $HOME/.asdfrc |
default tool versions filename | .tool-versions | ASDF_DEFAULT_TOOL_VERSIONS_FILENAME is empty, so use .tool-versions |
asdf dir | $HOME/.asdf | ASDF_DIR is empty, so use parent dir of bin/asdf |
asdf data dir | $HOME/.asdf | ASDF_DATA_DIR is empty so use $HOME/.asdf as $HOME exists. |
concurrency | auto | ASDF_CONCURRENCY is empty, so rely on concurrency value from the default configuration |
legacy_version_file | no | No custom .asdfrc , so use the default configuration |
use_release_candidates | no | No custom .asdfrc , so use the default configuration |
always_keep_download | no | No custom .asdfrc , so use the default configuration |
plugin_repository_last_check_duration | 60 | No custom .asdfrc , so use the default configuration |
disable_plugin_short_name_repository | no | No custom .asdfrc , so use the default configuration |
Users should not worry about this section as it describes configuration internal to asdf
useful for Package Managers and integrators.
$ASDF_DIR/asdf_updates_disabled
: Updates via the asdf update
command are disabled when this file is present (content irrelevant). This is used by package managers like Pacman or Homebrew to ensure the correct update method is used for the particular installation.The core asdf
command list is rather small, but can facilitate many workflows.
Covered in the Getting Started guide.
asdf exec <command> [args...]
Executes the command shim for the current version.
asdf env <command> [util]
asdf info
A helper command to print the OS, Shell and asdf
debug information. Share this when making a bug report.
asdf reshim <name> <version>
This recreates the shims for the current version of a package. By default, shims are created by plugins during installation of a tool. Some tools like the npm CLI allow global installation of executables, for example, installing Yarn via npm install -g yarn
. Since this executable was not installed via the plugin lifecycle, no shim exists for it yet. asdf reshim nodejs <version>
will force recalculation of shims for any new executables, like yarn
, for <version>
of nodejs
.
asdf shim-versions <command>
Lists the plugins and versions that provide shims for a command.
As an example, Node.js ships with two executables, node
and npm
. When many versions of the tools are installed with asdf-nodejs
shim-versions
can return:
➜ asdf shim-versions node
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
➜ asdf shim-versions npm
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
asdf
has a built in command to update which relies on Git (our recommended installation method). If you installed using a different method you should follow the steps for that method:
Method | Latest Stable Release | Latest commit on master |
---|---|---|
asdf (via Git) | asdf update | asdf update --head |
Homebrew | brew upgrade asdf | brew upgrade asdf --fetch-HEAD |
Pacman | Download a new PKGBUILD & rebuild or use your preferred AUR helper |
To uninstall asdf
follow these steps:
~/.bashrc
remove the lines that source asdf.sh
and the completions:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
dir:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bash_profile
remove the lines that source asdf.sh
and the completions:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
dir:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
remove the lines that source asdf.sh
and the completions:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
Completions may have been configured as per Homebrew's instructions so follow their guide to find out what to remove.
brew uninstall asdf --force
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
If using macOS Catalina or newer, the default shell has changed to ZSH. If you can't find any config in your ~/.bash_profile
it may be in a ~/.zshrc
in which case please follow the ZSH instructions.
~/.bash_profile
remove the lines that source asdf.sh
and the completions:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
Completions may have been configured as per Homebrew's instructions so follow their guide to find out what to remove.
brew uninstall asdf --force
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
remove the lines that source asdf.sh
and the completions:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
dir:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
remove the lines that source asdf.fish
:source ~/.asdf/asdf.fish
and remove completions with this command:
rm -rf ~/.config/fish/completions/asdf.fish
$HOME/.asdf
dir:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
remove the lines that source asdf.fish
:source "(brew --prefix asdf)"/libexec/asdf.fish
brew uninstall asdf --force
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
remove the lines that source asdf.fish
:source /opt/asdf-vm/asdf.fish
pacman -Rs asdf-vm
$HOME/.asdf
dir:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
remove the lines that use the asdf
module:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
and uninstall the asdf
module with this command:
rm -f ~/.config/elvish/lib/asdf.elv
$HOME/.asdf
dir:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
remove the lines that use the asdf
module:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
and uninstall the asdf
module with this command:
rm -f ~/.config/elvish/lib/asdf.elv
brew uninstall asdf --force
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
remove the lines that use the asdf
module:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
and uninstall the asdf
module with this command:
rm -f ~/.config/elvish/lib/asdf.elv
pacman -Rs asdf-vm
$HOME/.asdf
dir:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
remove the lines that source asdf.sh
and completions:. "$HOME/.asdf/asdf.sh"
+# ...
+fpath=(\${ASDF_DIR}/completions $fpath)
+autoload -Uz compinit
+compinit
OR the ZSH Framework plugin if used.
$HOME/.asdf
dir:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
remove the lines that source asdf.sh
:. $(brew --prefix asdf)/libexec/asdf.sh
brew uninstall asdf --force && brew autoremove
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
remove the lines that source asdf.sh
:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
dir:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
That's it! 🎉
`,41)]))}const g=i(e,[["render",h]]);export{c as __pageData,g as default}; diff --git a/assets/manage_core.md.D6WBxbgc.lean.js b/assets/manage_core.md.D6WBxbgc.lean.js new file mode 100644 index 00000000..be642d9e --- /dev/null +++ b/assets/manage_core.md.D6WBxbgc.lean.js @@ -0,0 +1,18 @@ +import{_ as i,c as a,a2 as t,o as l}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"Core","description":"","frontmatter":{},"headers":[],"relativePath":"manage/core.md","filePath":"manage/core.md","lastUpdated":1687069487000}'),e={name:"manage/core.md"};function h(n,s,p,k,d,o){return l(),a("div",null,s[0]||(s[0]=[t(`The core asdf
command list is rather small, but can facilitate many workflows.
Covered in the Getting Started guide.
asdf exec <command> [args...]
Executes the command shim for the current version.
asdf env <command> [util]
asdf info
A helper command to print the OS, Shell and asdf
debug information. Share this when making a bug report.
asdf reshim <name> <version>
This recreates the shims for the current version of a package. By default, shims are created by plugins during installation of a tool. Some tools like the npm CLI allow global installation of executables, for example, installing Yarn via npm install -g yarn
. Since this executable was not installed via the plugin lifecycle, no shim exists for it yet. asdf reshim nodejs <version>
will force recalculation of shims for any new executables, like yarn
, for <version>
of nodejs
.
asdf shim-versions <command>
Lists the plugins and versions that provide shims for a command.
As an example, Node.js ships with two executables, node
and npm
. When many versions of the tools are installed with asdf-nodejs
shim-versions
can return:
➜ asdf shim-versions node
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
➜ asdf shim-versions npm
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
asdf
has a built in command to update which relies on Git (our recommended installation method). If you installed using a different method you should follow the steps for that method:
Method | Latest Stable Release | Latest commit on master |
---|---|---|
asdf (via Git) | asdf update | asdf update --head |
Homebrew | brew upgrade asdf | brew upgrade asdf --fetch-HEAD |
Pacman | Download a new PKGBUILD & rebuild or use your preferred AUR helper |
To uninstall asdf
follow these steps:
~/.bashrc
remove the lines that source asdf.sh
and the completions:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
dir:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bash_profile
remove the lines that source asdf.sh
and the completions:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
dir:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
remove the lines that source asdf.sh
and the completions:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
Completions may have been configured as per Homebrew's instructions so follow their guide to find out what to remove.
brew uninstall asdf --force
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
If using macOS Catalina or newer, the default shell has changed to ZSH. If you can't find any config in your ~/.bash_profile
it may be in a ~/.zshrc
in which case please follow the ZSH instructions.
~/.bash_profile
remove the lines that source asdf.sh
and the completions:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
Completions may have been configured as per Homebrew's instructions so follow their guide to find out what to remove.
brew uninstall asdf --force
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
remove the lines that source asdf.sh
and the completions:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
dir:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
remove the lines that source asdf.fish
:source ~/.asdf/asdf.fish
and remove completions with this command:
rm -rf ~/.config/fish/completions/asdf.fish
$HOME/.asdf
dir:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
remove the lines that source asdf.fish
:source "(brew --prefix asdf)"/libexec/asdf.fish
brew uninstall asdf --force
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
remove the lines that source asdf.fish
:source /opt/asdf-vm/asdf.fish
pacman -Rs asdf-vm
$HOME/.asdf
dir:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
remove the lines that use the asdf
module:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
and uninstall the asdf
module with this command:
rm -f ~/.config/elvish/lib/asdf.elv
$HOME/.asdf
dir:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
remove the lines that use the asdf
module:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
and uninstall the asdf
module with this command:
rm -f ~/.config/elvish/lib/asdf.elv
brew uninstall asdf --force
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
remove the lines that use the asdf
module:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
and uninstall the asdf
module with this command:
rm -f ~/.config/elvish/lib/asdf.elv
pacman -Rs asdf-vm
$HOME/.asdf
dir:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
remove the lines that source asdf.sh
and completions:. "$HOME/.asdf/asdf.sh"
+# ...
+fpath=(\${ASDF_DIR}/completions $fpath)
+autoload -Uz compinit
+compinit
OR the ZSH Framework plugin if used.
$HOME/.asdf
dir:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
remove the lines that source asdf.sh
:. $(brew --prefix asdf)/libexec/asdf.sh
brew uninstall asdf --force && brew autoremove
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
remove the lines that source asdf.sh
:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
dir:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
config files:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
That's it! 🎉
`,41)]))}const g=i(e,[["render",h]]);export{c as __pageData,g as default}; diff --git a/assets/manage_plugins.md.BLO16oTi.js b/assets/manage_plugins.md.BLO16oTi.js new file mode 100644 index 00000000..71c6af14 --- /dev/null +++ b/assets/manage_plugins.md.BLO16oTi.js @@ -0,0 +1,11 @@ +import{_ as i,c as a,a2 as e,o as t}from"./chunks/framework.BQmytedh.js";const g=JSON.parse('{"title":"Plugins","description":"","frontmatter":{},"headers":[],"relativePath":"manage/plugins.md","filePath":"manage/plugins.md","lastUpdated":1687069487000}'),l={name:"manage/plugins.md"};function n(h,s,p,d,o,r){return t(),a("div",null,s[0]||(s[0]=[e(`Plugins are how asdf
knows to handle different tools like Node.js, Ruby, Elixir etc.
See Creating Plugins for the plugin API used to support more tools.
Add plugins via their Git URL:
asdf plugin add <name> <git-url>
+# asdf plugin add elm https://github.com/vic/asdf-elm
or via the short-name association in the plugins repository:
asdf plugin add <name>
+# asdf plugin add erlang
Recommendation
Prefer the longer git-url
method as it is independent of the short-name repo.
asdf plugin list
+# asdf plugin list
+# java
+# nodejs
asdf plugin list --urls
+# asdf plugin list
+# java https://github.com/halcyon/asdf-java.git
+# nodejs https://github.com/asdf-vm/asdf-nodejs.git
asdf plugin list all
See Plugins Shortname Index for the entire short-name list of plugins.
asdf plugin update --all
If you want to update a specific package, just say so.
asdf plugin update <name>
+# asdf plugin update erlang
This update will fetch the latest commit on the default branch of the origin of the plugin repository. Versioned plugins and updates are currently being developed (#916)
asdf plugin remove <name>
+# asdf plugin remove erlang
Removing a plugin will remove all installations of the tool made with the plugin. This can be used as a shorthand for cleaning/pruning many unused versions of a tool.
The short-name repo is synced to your local machine and periodically refreshed. This method to determine a sync is as follows:
asdf plugin add <name>
asdf plugin list all
disable_plugin_short_name_repository
is set to yes
, then sync is aborted early. See the asdf config docs for more.X
minutes then the sync will occur. X
defaults to 60
, but can be configured in your .asdfrc
via the plugin_repository_last_check_duration
option. See the asdf config docs for more.Plugins are how asdf
knows to handle different tools like Node.js, Ruby, Elixir etc.
See Creating Plugins for the plugin API used to support more tools.
Add plugins via their Git URL:
asdf plugin add <name> <git-url>
+# asdf plugin add elm https://github.com/vic/asdf-elm
or via the short-name association in the plugins repository:
asdf plugin add <name>
+# asdf plugin add erlang
Recommendation
Prefer the longer git-url
method as it is independent of the short-name repo.
asdf plugin list
+# asdf plugin list
+# java
+# nodejs
asdf plugin list --urls
+# asdf plugin list
+# java https://github.com/halcyon/asdf-java.git
+# nodejs https://github.com/asdf-vm/asdf-nodejs.git
asdf plugin list all
See Plugins Shortname Index for the entire short-name list of plugins.
asdf plugin update --all
If you want to update a specific package, just say so.
asdf plugin update <name>
+# asdf plugin update erlang
This update will fetch the latest commit on the default branch of the origin of the plugin repository. Versioned plugins and updates are currently being developed (#916)
asdf plugin remove <name>
+# asdf plugin remove erlang
Removing a plugin will remove all installations of the tool made with the plugin. This can be used as a shorthand for cleaning/pruning many unused versions of a tool.
The short-name repo is synced to your local machine and periodically refreshed. This method to determine a sync is as follows:
asdf plugin add <name>
asdf plugin list all
disable_plugin_short_name_repository
is set to yes
, then sync is aborted early. See the asdf config docs for more.X
minutes then the sync will occur. X
defaults to 60
, but can be configured in your .asdfrc
via the plugin_repository_last_check_duration
option. See the asdf config docs for more.asdf install <name> <version>
+# asdf install erlang 17.3
If a plugin supports downloading & compiling from source, you can specify ref:foo
where foo
is a specific branch, tag, or commit. You'll need to use the same name and reference when uninstalling too.
asdf install <name> latest
+# asdf install erlang latest
Install latest stable version that begins with a given string.
asdf install <name> latest:<version>
+# asdf install erlang latest:17
asdf list <name>
+# asdf list erlang
Filter versions to those that begin with a given string.
asdf list <name> <version>
+# asdf list erlang 17
asdf list all <name>
+# asdf list all erlang
Filter versions to those that begin with a given string.
asdf list all <name> <version>
+# asdf list all erlang 17
asdf latest <name>
+# asdf latest erlang
Show latest stable version that begins with a given string.
asdf latest <name> <version>
+# asdf latest erlang 17
asdf global <name> <version> [<version>...]
+asdf shell <name> <version> [<version>...]
+asdf local <name> <version> [<version>...]
+# asdf global elixir 1.2.4
+
+asdf global <name> latest[:<version>]
+asdf local <name> latest[:<version>]
+# asdf global elixir latest
global
writes the version to $HOME/.tool-versions
.
shell
sets the version to an environment variable named ASDF_\${TOOL}_VERSION
, for the current shell session only.
local
writes the version to $PWD/.tool-versions
, creating it if needed.
See the .tool-versions
file in the Configuration section for details.
Alternatively
If you want to set a version only for the current shell session or for executing just a command under a particular tool version, you can set an environment variable like ASDF_\${TOOL}_VERSION
.
The following example runs tests on an Elixir project with version 1.4.0
. The version format is the same supported by the .tool-versions
file.
ASDF_ELIXIR_VERSION=1.4.0 mix test
To use the system version of tool <name>
instead of an asdf managed version you can set the version for the tool to system
.
Set system with either global
, local
or shell
as outlined in Set Current Version section above.
asdf local <name> system
+# asdf local python system
asdf current
+# asdf current
+# erlang 17.3 /Users/kim/.tool-versions
+# nodejs 6.11.5 /Users/kim/cool-node-project/.tool-versions
+
+asdf current <name>
+# asdf current erlang
+# erlang 17.3 /Users/kim/.tool-versions
asdf uninstall <name> <version>
+# asdf uninstall erlang 17.3
When asdf installs a package it creates shims for every executable program in that package in a $ASDF_DATA_DIR/shims
directory (default ~/.asdf/shims
). This directory being on the $PATH
(by means of asdf.sh
, asdf.fish
, etc) is how the installed programs are made available in the environment.
The shims themselves are really simple wrappers that exec
a helper program asdf exec
passing it the name of the plugin and path to the executable in the installed package that the shim is wrapping.
The asdf exec
helper determines the version of the package to use (as specified in .tool-versions
file, selected by asdf local ...
or asdf global ...
), the final path to the executable in the package installation directory (this can be manipulated by the exec-path
callback in the plugin) and the environment to execute in (also provided by the plugin - exec-env
script), and finally it executes it.
Note
Because this system uses exec
calls, any scripts in the package that are meant to be sourced by the shell instead of executed need to be accessed directly instead of via the shim wrapper. The two asdf
commands: which
and where
can help with this by returning the path to the installed package:
# returns path to main executable in current version
+source $(asdf which \${PLUGIN})/../script.sh
+
+# returns path to the package installation directory
+source $(asdf where \${PLUGIN})/bin/script.sh
If for some reason you want to by-pass asdf shims or want your environment variables automatically set upon entering your project's directory, the asdf-direnv plugin can be helpful. Be sure to check its README for more details.
`,45)]))}const c=i(n,[["render",l]]);export{g as __pageData,c as default}; diff --git a/assets/manage_versions.md.C6EGWNcY.lean.js b/assets/manage_versions.md.C6EGWNcY.lean.js new file mode 100644 index 00000000..97b02464 --- /dev/null +++ b/assets/manage_versions.md.C6EGWNcY.lean.js @@ -0,0 +1,30 @@ +import{_ as i,c as a,a2 as e,o as t}from"./chunks/framework.BQmytedh.js";const g=JSON.parse('{"title":"Versions","description":"","frontmatter":{},"headers":[],"relativePath":"manage/versions.md","filePath":"manage/versions.md","lastUpdated":1734464980000}'),n={name:"manage/versions.md"};function l(h,s,p,k,r,d){return t(),a("div",null,s[0]||(s[0]=[e(`asdf install <name> <version>
+# asdf install erlang 17.3
If a plugin supports downloading & compiling from source, you can specify ref:foo
where foo
is a specific branch, tag, or commit. You'll need to use the same name and reference when uninstalling too.
asdf install <name> latest
+# asdf install erlang latest
Install latest stable version that begins with a given string.
asdf install <name> latest:<version>
+# asdf install erlang latest:17
asdf list <name>
+# asdf list erlang
Filter versions to those that begin with a given string.
asdf list <name> <version>
+# asdf list erlang 17
asdf list all <name>
+# asdf list all erlang
Filter versions to those that begin with a given string.
asdf list all <name> <version>
+# asdf list all erlang 17
asdf latest <name>
+# asdf latest erlang
Show latest stable version that begins with a given string.
asdf latest <name> <version>
+# asdf latest erlang 17
asdf global <name> <version> [<version>...]
+asdf shell <name> <version> [<version>...]
+asdf local <name> <version> [<version>...]
+# asdf global elixir 1.2.4
+
+asdf global <name> latest[:<version>]
+asdf local <name> latest[:<version>]
+# asdf global elixir latest
global
writes the version to $HOME/.tool-versions
.
shell
sets the version to an environment variable named ASDF_\${TOOL}_VERSION
, for the current shell session only.
local
writes the version to $PWD/.tool-versions
, creating it if needed.
See the .tool-versions
file in the Configuration section for details.
Alternatively
If you want to set a version only for the current shell session or for executing just a command under a particular tool version, you can set an environment variable like ASDF_\${TOOL}_VERSION
.
The following example runs tests on an Elixir project with version 1.4.0
. The version format is the same supported by the .tool-versions
file.
ASDF_ELIXIR_VERSION=1.4.0 mix test
To use the system version of tool <name>
instead of an asdf managed version you can set the version for the tool to system
.
Set system with either global
, local
or shell
as outlined in Set Current Version section above.
asdf local <name> system
+# asdf local python system
asdf current
+# asdf current
+# erlang 17.3 /Users/kim/.tool-versions
+# nodejs 6.11.5 /Users/kim/cool-node-project/.tool-versions
+
+asdf current <name>
+# asdf current erlang
+# erlang 17.3 /Users/kim/.tool-versions
asdf uninstall <name> <version>
+# asdf uninstall erlang 17.3
When asdf installs a package it creates shims for every executable program in that package in a $ASDF_DATA_DIR/shims
directory (default ~/.asdf/shims
). This directory being on the $PATH
(by means of asdf.sh
, asdf.fish
, etc) is how the installed programs are made available in the environment.
The shims themselves are really simple wrappers that exec
a helper program asdf exec
passing it the name of the plugin and path to the executable in the installed package that the shim is wrapping.
The asdf exec
helper determines the version of the package to use (as specified in .tool-versions
file, selected by asdf local ...
or asdf global ...
), the final path to the executable in the package installation directory (this can be manipulated by the exec-path
callback in the plugin) and the environment to execute in (also provided by the plugin - exec-env
script), and finally it executes it.
Note
Because this system uses exec
calls, any scripts in the package that are meant to be sourced by the shell instead of executed need to be accessed directly instead of via the shim wrapper. The two asdf
commands: which
and where
can help with this by returning the path to the installed package:
# returns path to main executable in current version
+source $(asdf which \${PLUGIN})/../script.sh
+
+# returns path to the package installation directory
+source $(asdf where \${PLUGIN})/bin/script.sh
If for some reason you want to by-pass asdf shims or want your environment variables automatically set upon entering your project's directory, the asdf-direnv plugin can be helpful. Be sure to check its README for more details.
`,45)]))}const c=i(n,[["render",l]]);export{g as __pageData,c as default}; diff --git a/assets/more_community-projects.md.yoPbi1N_.js b/assets/more_community-projects.md.yoPbi1N_.js new file mode 100644 index 00000000..28ba5aec --- /dev/null +++ b/assets/more_community-projects.md.yoPbi1N_.js @@ -0,0 +1 @@ +import{_ as t,c as o,a2 as r,o as a}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"Community Projects","description":"","frontmatter":{},"headers":[],"relativePath":"more/community-projects.md","filePath":"more/community-projects.md","lastUpdated":1687069487000}'),s={name:"more/community-projects.md"};function c(n,e,i,m,d,l){return a(),o("div",null,e[0]||(e[0]=[r('Here are some community projects related to asdf
:
Note
asdf core team do not own these projects or their code. asdf core are not responsible for the quality or security as they relate to those listed here.
Here are some community projects related to asdf
:
Note
asdf core team do not own these projects or their code. asdf core are not responsible for the quality or security as they relate to those listed here.
Here are some common questions regarding asdf
.
WSL1 (Windows Subsystem for Linux 1) is not officially supported. Some aspects of asdf
may not work properly. We do not intend to add official support for WSL1.
WSL2 (Windows Subsystem for Linux 2) should work using the setup & dependency instructions for you chosen WSL distro.
Importantly, WSL2 is only expected to work properly when the current working directory is a Unix drive and not a bound Windows drive.
We intend to run out test suite on WSL2 when host runner support is available on GitHub Actions, currently this does not appear to be the case.
I just
npm install -g yarn
, but cannot executeyarn
. What gives?
asdf
uses shims to manage executables. Those installed by plugins have shims automatically created, whereas installing executables via an asdf
managed tool will require you to notify asdf
of the need to create shims. In this instance, to create a shim for Yarn. See the asdf reshim
command docs.
If asdf reshim
is not resolving your issue, then it is most-likely due to the sourcing of asdf.sh
or asdf.fish
not being at the BOTTOM of your Shell config file (.bash_profile
, .zshrc
, config.fish
etc). It needs to be sourced AFTER you have set your $PATH
and AFTER you have sourced your framework (oh-my-zsh etc) if any.
Here are some common questions regarding asdf
.
WSL1 (Windows Subsystem for Linux 1) is not officially supported. Some aspects of asdf
may not work properly. We do not intend to add official support for WSL1.
WSL2 (Windows Subsystem for Linux 2) should work using the setup & dependency instructions for you chosen WSL distro.
Importantly, WSL2 is only expected to work properly when the current working directory is a Unix drive and not a bound Windows drive.
We intend to run out test suite on WSL2 when host runner support is available on GitHub Actions, currently this does not appear to be the case.
I just
npm install -g yarn
, but cannot executeyarn
. What gives?
asdf
uses shims to manage executables. Those installed by plugins have shims automatically created, whereas installing executables via an asdf
managed tool will require you to notify asdf
of the need to create shims. In this instance, to create a shim for Yarn. See the asdf reshim
command docs.
If asdf reshim
is not resolving your issue, then it is most-likely due to the sourcing of asdf.sh
or asdf.fish
not being at the BOTTOM of your Shell config file (.bash_profile
, .zshrc
, config.fish
etc). It needs to be sourced AFTER you have set your $PATH
and AFTER you have sourced your framework (oh-my-zsh etc) if any.
Thank you page to the asdf authors & contributors!
Me (@HashNuke), High-fever, cold, cough.
Copyright 2014 to the end of time (MIT License)
See the list of contributors 🙏 on GitHub
',9)]))}const b=a(s,[["render",n]]);export{f as __pageData,b as default}; diff --git a/assets/more_thanks.md.Bx4bXB2q.lean.js b/assets/more_thanks.md.Bx4bXB2q.lean.js new file mode 100644 index 00000000..f5674960 --- /dev/null +++ b/assets/more_thanks.md.Bx4bXB2q.lean.js @@ -0,0 +1 @@ +import{_ as a,c as t,a2 as r,o}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"Thanks","description":"","frontmatter":{},"headers":[],"relativePath":"more/thanks.md","filePath":"more/thanks.md","lastUpdated":1671778129000}'),s={name:"more/thanks.md"};function n(h,e,i,l,u,c){return o(),t("div",null,e[0]||(e[0]=[r('Thank you page to the asdf authors & contributors!
Me (@HashNuke), High-fever, cold, cough.
Copyright 2014 to the end of time (MIT License)
See the list of contributors 🙏 on GitHub
',9)]))}const b=a(s,[["render",n]]);export{f as __pageData,b as default}; diff --git a/assets/plugins_create.md.DOuyNDOe.js b/assets/plugins_create.md.DOuyNDOe.js new file mode 100644 index 00000000..3fa581b7 --- /dev/null +++ b/assets/plugins_create.md.DOuyNDOe.js @@ -0,0 +1,35 @@ +import{_ as n,c as o,a2 as l,j as s,a as e,G as a,B as p,o as d}from"./chunks/framework.BQmytedh.js";const T=JSON.parse('{"title":"Create a Plugin","description":"","frontmatter":{},"headers":[],"relativePath":"plugins/create.md","filePath":"plugins/create.md","lastUpdated":1704804447000}'),r={name:"plugins/create.md"},h={tabindex:"0"},c={style:{"text-align":"left"}},g={style:{"text-align":"left"}},u={style:{"text-align":"left"}},k={style:{"text-align":"left"}},b={id:"bin-list-all",tabindex:"-1"},m={id:"bin-download",tabindex:"-1"},f={id:"bin-install",tabindex:"-1"},y={id:"bin-latest-stable",tabindex:"-1"},F={id:"extension-commands-for-asdf-cli",tabindex:"-1"},v={id:"custom-shim-templates",tabindex:"-1"};function E(A,i,C,x,_,S){const t=p("Badge");return d(),o("div",null,[i[48]||(i[48]=l('A plugin is a Git repo with some executable scripts to support versioning a language / tool. These scripts are run by asdf using specific commands to support features such as asdf list-all <name>
, asdf install <name> <version>
etc.
There are two options to get started with creating your own plugin:
asdf-<tool_name>
) with default scripts implemented. Once generated, clone the repo and run the setup.bash
script to interactively update the template.asdf-<tool_name>
and implement the required scripts as listed in the documentation below.asdf
commandssort -V
. See our asdf core list of banned commandsThe full list of scripts callable from asdf.
',9)),s("table",h,[i[25]||(i[25]=s("thead",null,[s("tr",null,[s("th",{style:{"text-align":"left"}},"Script"),s("th",{style:{"text-align":"left"}},"Description")])],-1)),s("tbody",null,[s("tr",null,[s("td",c,[i[0]||(i[0]=s("a",{href:"#bin-list-all"},"bin/list-all",-1)),i[1]||(i[1]=e()),a(t,{type:"tip",text:"required",vertical:"middle"})]),i[2]||(i[2]=s("td",{style:{"text-align":"left"}},"List all installable versions",-1))]),s("tr",null,[s("td",g,[i[3]||(i[3]=s("a",{href:"#bin-download"},"bin/download",-1)),i[4]||(i[4]=e()),a(t,{type:"tip",text:"required",vertical:"middle"})]),i[5]||(i[5]=s("td",{style:{"text-align":"left"}},"Download source code or binary for the specified version",-1))]),s("tr",null,[s("td",u,[i[6]||(i[6]=s("a",{href:"#bin-install"},"bin/install",-1)),i[7]||(i[7]=e()),a(t,{type:"tip",text:"required",vertical:"middle"})]),i[8]||(i[8]=s("td",{style:{"text-align":"left"}},"Installs the specified version",-1))]),s("tr",null,[s("td",k,[i[9]||(i[9]=s("a",{href:"#bin-latest-stable"},"bin/latest-stable",-1)),i[10]||(i[10]=e()),a(t,{type:"warning",text:"recommended",vertical:"middle"})]),i[11]||(i[11]=s("td",{style:{"text-align":"left"}},"List the latest stable version of the specified tool",-1))]),i[12]||(i[12]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-help.overview"},"bin/help.overview")]),s("td",{style:{"text-align":"left"}},"Output a general description about the plugin & tool")],-1)),i[13]||(i[13]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-help.deps"},"bin/help.deps")]),s("td",{style:{"text-align":"left"}},"Output a list of dependencies per Operating System")],-1)),i[14]||(i[14]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-help.config"},"bin/help.config")]),s("td",{style:{"text-align":"left"}},"Output plugin or tool configuration information")],-1)),i[15]||(i[15]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-help.links"},"bin/help.links")]),s("td",{style:{"text-align":"left"}},"Output a list of links for the plugin or tool")],-1)),i[16]||(i[16]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-list-bin-paths"},"bin/list-bin-paths")]),s("td",{style:{"text-align":"left"}},"List relative paths to directories with binaries to create shims")],-1)),i[17]||(i[17]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-exec-env"},"bin/exec-env")]),s("td",{style:{"text-align":"left"}},"Prepare the environment for running the binaries")],-1)),i[18]||(i[18]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-exec-path"},"bin/exec-path")]),s("td",{style:{"text-align":"left"}},"Output the executable path for a version of a tool")],-1)),i[19]||(i[19]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-uninstall"},"bin/uninstall")]),s("td",{style:{"text-align":"left"}},"Uninstall a specific version of a tool")],-1)),i[20]||(i[20]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-list-legacy-filenames"},"bin/list-legacy-filenames")]),s("td",{style:{"text-align":"left"}},[e("Output filenames of legacy version files: "),s("code",null,".ruby-version")])],-1)),i[21]||(i[21]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-parse-legacy-file"},"bin/parse-legacy-file")]),s("td",{style:{"text-align":"left"}},"Custom parser for legacy version files")],-1)),i[22]||(i[22]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-post-plugin-add"},"bin/post-plugin-add")]),s("td",{style:{"text-align":"left"}},"Hook to execute after a plugin has been added")],-1)),i[23]||(i[23]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-post-plugin-update"},"bin/post-plugin-update")]),s("td",{style:{"text-align":"left"}},"Hook to execute after a plugin has been updated")],-1)),i[24]||(i[24]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-pre-plugin-remove"},"bin/pre-plugin-remove")]),s("td",{style:{"text-align":"left"}},"Hook to execute before a plugin is removed")],-1))])]),i[49]||(i[49]=l('To see which commands invoke which scripts, see the detailed documentation for each script.
The full list of Environment Variables used throughout all scripts.
Environment Variables | Description |
---|---|
ASDF_INSTALL_TYPE | version or ref |
ASDF_INSTALL_VERSION | full version number or Git Ref depending on ASDF_INSTALL_TYPE |
ASDF_INSTALL_PATH | the path to where the tool should, or has been installed |
ASDF_CONCURRENCY | the number of cores to use when compiling the source code. Useful for setting make -j |
ASDF_DOWNLOAD_PATH | the path to where the source code or binary was downloaded to by bin/download |
ASDF_PLUGIN_PATH | the path the plugin was installed |
ASDF_PLUGIN_SOURCE_URL | the source URL of the plugin |
ASDF_PLUGIN_PREV_REF | prevous git-ref of the plugin repo |
ASDF_PLUGIN_POST_REF | updated git-ref of the plugin repo |
ASDF_CMD_FILE | resolves to the full path of the file being sourced |
NOTE
Not all environment variables are available in all scripts. Check the documentation for each script below to see which env vars are available to it.
Description
List all installable versions.
Output Format
Must print a string with a space-separated list of versions. For example:
1.0.1 1.0.2 1.3.0 1.4
Newest version should be last.
asdf core will print each version on its own line, potentially pushing some versions offscreen.
Sorting
If versions are being pulled from releases page on a website it's recommended to leave the versions in the provided order as they are often already in the correct order. If they are in reverse order piping them through tac
should suffice.
If sorting is unavoidable, sort -V
is not portable, so we suggest either:
v2.18.0
)sed
, sort
& awk
)Environment Variables available to script
No environment variables are provided to this script.
Commands that invoke this script
asdf list all <name> [version]
asdf list all nodejs
: lists all versions as returned by this script, one on each line.asdf list all nodejs 18
: lists all versions as returned by this script, one on each line, with a filter matching any version beginning with 18
applied.Call signature from asdf core
No parameters provided.
"${plugin_path}/bin/list-all"
Description
Download the source code or binary for a specific version of a tool to a specified location.
Implementation Details
ASDF_DOWNLOAD_PATH
.ASDF_DOWNLOAD_PATH
directory.ASDF_DOWNLOAD_PATH
.0
.Legacy Plugins
Though this script is marked as required for all plugins, it is optional for "legacy" plugins which predate its introduction.
If this script is absent, asdf will assume that the bin/install
script is present and will download and install the version.
All plugins must include this script as support for legacy plugins will eventually be removed.
Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.ASDF_DOWNLOAD_PATH
: The path to where the source code or binary was downloaded to.Commands that invoke this script
asdf install <tool> [version]
asdf install <tool> latest[:version]
asdf install nodejs 18.0.0
: downloads the source code or binary for Node.js version 18.0.0
and places it in the ASDF_DOWNLOAD_PATH
directory. Then runs the bin/install
script.Call signature from asdf core
No parameters provided.
"${plugin_path}"/bin/download
Description
Install a specific version of a tool to a specified location.
Implementation Details
ASDF_INSTALL_PATH
.$ASDF_INSTALL_PATH/bin
. This behaviour can be customised with the optional bin/list-bin-paths script.0
.ASDF_INSTALL_PATH
once the build and installation of the tool is deemed a success.Legacy Plugins
If the bin/download
script is absent, this script should download and install the specified version.
For compatibility with versions of the asdf core earlier than 0.7._
and newer than 0.8._
, check for the presence of the ASDF_DOWNLOAD_PATH
environment variable. If set, assume the bin/download
script already downloaded the version, else download the source code in the bin/install
script.
Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.ASDF_CONCURRENCY
: The number of cores to use when compiling source code. Useful for setting flags like make -j
.ASDF_DOWNLOAD_PATH
: The path where the source code or binary was downloaded to.Commands that invoke this script
asdf install
asdf install <tool>
asdf install <tool> [version]
asdf install <tool> latest[:version]
asdf install nodejs 18.0.0
: installs Node.js version 18.0.0
in the ASDF_INSTALL_PATH
directory.Call signature from asdf core
No parameters provided.
"${plugin_path}"/bin/install
Description
Determine the latest stable version of a tool. If absent, the asdf core will tail
the bin/list-all
output which may be undesirable.
Implementation Details
asdf list all ruby
from the ruby plugin lists versions of Ruby from many providers: jruby
, rbx
& truffleruby
amongst others. The user provided filter could be used by the plugin to filter the semver versions and/or provider.> asdf latest ruby\n3.2.2\n> asdf latest ruby 2\n2.7.8\n> asdf latest ruby truffleruby\ntruffleruby+graalvm-22.3.1
0
.Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf global <tool> latest
: set the global version of a tool to the latest stable version for that tool.asdf local <name> latest
: set the local version of a tool to the latest stable version for that tool.asdf install <tool> latest
: installs the latest version of a tool.asdf latest <tool> [<version>]
: outputs the latest version of a tool based on the optional filter.asdf latest --all
: outputs the latest version of all tools managed by asdf and whether they are installed.Call signature from asdf core
The script should accept a single argument, the filter query.
"${plugin_path}"/bin/latest-stable "$query"
bin/help.overview
Description
Output a general description about the plugin and the tool being managed.
Implementation Details
ASDF_INSTALL_VERSION
and ASDF_INSTALL_TYPE
).0
.Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf help <name> [<version>]
: Output documentation for plugin and toolCall signature from asdf core
"${plugin_path}"/bin/help.overview
bin/help.deps
Description
Output the list of dependencies tailored to the operating system. One dependency per line.
git\ncurl\nsed
Implementation Details
bin/help.overview
for its output to be considered.ASDF_INSTALL_VERSION
and ASDF_INSTALL_TYPE
).0
.Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf help <name> [<version>]
: Output documentation for plugin and toolCall signature from asdf core
"${plugin_path}"/bin/help.deps
bin/help.config
Description
Output any required or optional configuration for the plugin and tool. For example, describe any environment variables or other flags needed to install or compile the tool.
Implementation Details
bin/help.overview
for its output to be considered.ASDF_INSTALL_VERSION
and ASDF_INSTALL_TYPE
).0
.Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf help <name> [<version>]
: Output documentation for plugin and toolCall signature from asdf core
"${plugin_path}"/bin/help.config
bin/help.links
Description
Output a list of links relevant to the plugin and tool. One link per line.
Git Repository: https://github.com/vlang/v\nDocumentation: https://vlang.io
Implementation Details
bin/help.overview
for its output to be considered.<title>: <link>
<link>
ASDF_INSTALL_VERSION
and ASDF_INSTALL_TYPE
).0
.Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf help <name> [<version>]
: Output documentation for plugin and toolCall signature from asdf core
"${plugin_path}"/bin/help.links
bin/list-bin-paths
Description
List directories containing executables for the specified version of the tool.
Implementation Details
"${ASDF_INSTALL_PATH}"/bin
directory & create shims for those.ASDF_INSTALL_PATH
. Example output would be:bin tools veggies
This will instruct asdf to create shims for the files in:
"${ASDF_INSTALL_PATH}"/bin
"${ASDF_INSTALL_PATH}"/tools
"${ASDF_INSTALL_PATH}"/veggies
Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf install <tool> [version]
: initially create shims for binaries.asdf reshim <tool> <version>
: recreate shims for binaries.Call signature from asdf core
"${plugin_path}/bin/list-bin-paths"
bin/exec-env
Description
Prepare the environment before executing the shims for the binaries for the tool.
Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf which <command>
: Display the path to an executableasdf exec <command> [args...]
: Executes the command shim for current versionasdf env <command> [util]
: Runs util (default: env
) inside the environment used for command shim execution.Call signature from asdf core
"${plugin_path}/bin/exec-env"
bin/exec-path
Get the executable path for the specified version of the tool. Must print a string with the relative executable path. This allows the plugin to conditionally override the shim's specified executable path, otherwise return the default path specified by the shim.
Description
Get the executable path for the specified version of the tool.
Implementation Details
Usage:\n plugin/bin/exec-path <install-path> <command> <executable-path>\n\nExample Call:\n ~/.asdf/plugins/foo/bin/exec-path "~/.asdf/installs/foo/1.0" "foo" "bin/foo"\n\nOutput:\n bin/foox
Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf which <command>
: Display the path to an executableasdf exec <command> [args...]
: Executes the command shim for current versionasdf env <command> [util]
: Runs util (default: env
) inside the environment used for command shim execution.Call signature from asdf core
"${plugin_path}/bin/exec-path" "$install_path" "$cmd" "$relative_path"
bin/uninstall
Description
Uninstall the provided version of a tool.
Output Format
Output should be sent to stdout
or stderr
as appropriate for the user. No output is read by subsequent execution in the core.
Environment Variables available to script
No environment variables are provided to this script.
Commands that invoke this script
asdf list all <name> <version>
asdf uninstall nodejs 18.15.0
: Uninstalls the version 18.15.0
of nodejs, removing all shims including those installed global with npm i -g
Call signature from asdf core
No parameters provided.
"${plugin_path}/bin/uninstall"
bin/list-legacy-filenames
Description
List legacy configuration filenames for determining the specified version of the tool.
Implementation Details
.ruby-version .rvmrc
legacy_version_file
option in their "${HOME}"/.asdfrc
.Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
Any command which reads a tool version.
Call signature from asdf core
No parameters provided.
"${plugin_path}/bin/list-legacy-filenames"
bin/parse-legacy-file
Description
Parse the legacy file found by asdf to determine the version of the tool. Useful to extract version numbers from files like JavaScript's package.json
or Golangs go.mod
.
Implementation Details
cat
the legacy file to determine the version.1.2.3
Environment Variables available to script
No environment variables specifically set before this script is called.
Commands that invoke this script
Any command which reads a tool version.
Call signature from asdf core
The script should accept a single argument, the path to the legacy file for reading its contents.
"${plugin_path}/bin/parse-legacy-file" "$file_path"
bin/post-plugin-add
Description
Execute this callback script after the plugin has been added to asdf with asdf plugin add <tool>
.
See also the related command hooks:
pre_asdf_plugin_add
pre_asdf_plugin_add_${plugin_name}
post_asdf_plugin_add
post_asdf_plugin_add_${plugin_name}
Environment Variables available to script
ASDF_PLUGIN_PATH
: path where the plugin was installed.ASDF_PLUGIN_SOURCE_URL
: URL of the plugin source. Can be a local directory path.Call signature from asdf core
No parameters provided.
"${plugin_path}/bin/post-plugin-add"
bin/post-plugin-update
Description
Execute this callback script after asdf has downloaded the update plugin with asdf plugin update <tool> [<git-ref>]
.
See also the related command hooks:
pre_asdf_plugin_update
pre_asdf_plugin_update_${plugin_name}
post_asdf_plugin_update
post_asdf_plugin_update_${plugin_name}
Environment Variables available to script
ASDF_PLUGIN_PATH
: path where the plugin was installed.ASDF_PLUGIN_PREV_REF
: the plugin's previous git-refASDF_PLUGIN_POST_REF
: the plugin's updated git-refCall signature from asdf core
No parameters provided.
"${plugin_path}/bin/post-plugin-update"
bin/pre-plugin-remove
Description
Execute this callback script before asdf has removed the plugin with asdf plugin remove <tool>
.
See also the related command hooks:
pre_asdf_plugin_remove
pre_asdf_plugin_remove_${plugin_name}
post_asdf_plugin_remove
post_asdf_plugin_remove_${plugin_name}
Environment Variables available to script
ASDF_PLUGIN_PATH
: path where the plugin was installed.Call signature from asdf core
No parameters provided.
"${plugin_path}/bin/pre-plugin-remove"
It's possible for plugins to define new asdf commands by providing lib/commands/command*.bash
scripts or executables that will be callable using the asdf command line interface by using the plugin name as a subcommand.
For example, suppose a foo
plugin has:
foo/\n lib/commands/\n command.bash\n command-bat.bash\n command-bat-man.bash\n command-help.bash
Users can now execute:
$ asdf foo # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash`\n$ asdf foo bar # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash bar`\n$ asdf foo help # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-help.bash`\n$ asdf foo bat man # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat-man.bash`\n$ asdf foo bat baz # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat.bash baz`
Plugin authors can use this feature to provide utilities related to their tools, or even create plugins that are just new command extensions of asdf itself.
If the executable bit is set, the script is executed, replacing the asdf execution.
If the executable bit is not set, asdf will source the scripts as Bash scripts.
$ASDF_CMD_FILE
resolves to the full path of the file being sourced.
haxe
is a great example of a plugin which uses this feature. It provides the asdf haxe neko-dylibs-link
to fix an issue where Haxe executables expect to find dynamic libraries relative to the executable directory.
Be sure to list your asdf Extension Commands in your plugins README.
',11)),s("h2",v,[i[45]||(i[45]=e("Custom Shim Templates ")),a(t,{type:"danger",text:"advanced",vertical:"middle"}),i[46]||(i[46]=e()),i[47]||(i[47]=s("a",{class:"header-anchor",href:"#custom-shim-templates","aria-label":'Permalink to "Custom Shim TemplatesWARNING
Please only use if absolutely required
asdf allows custom shim templates. For an executable called foo
, if there's a shims/foo
file in the plugin, then asdf will copy that file instead of using its standard shim template.
This must be used wisely.
As far as the asdf core team is aware, this feature is only in use in the first-party Elixir plugin. This is because an executable is also read as an Elixir file in addition to being an executable. This makes it not possible to use the standard Bash shim.
asdf
contains the plugin-test
command to test your plugin:
asdf plugin test <plugin_name> <plugin_url> [--asdf-tool-version <version>] [--asdf-plugin-gitref <git_ref>] [test_command...]
<plugin_name>
& <plugin_url>
are required[--asdf-tool-version <version>]
is specified, the tool will be installed with that specific version. Defaults to asdf latest <plugin-name>
[--asdf-plugin-gitref <git_ref>]
is specified, the plugin itself is checked out at that commit/branch/tag. This is useful for testing a pull-request on your plugin's CI. Defaults to the default branch of the plugin's repository.[test_command...]
is the command to execute to validate the installed tool works correctly. Typically <tool> --version
or <tool> --help
. For example, to test the NodeJS plugin, we could run# asdf plugin test <plugin_name> <plugin_url> [test_command]
+ asdf plugin test nodejs https://github.com/asdf-vm/asdf-nodejs.git node --version
Note
We recommend testing in both Linux & macOS CI environments
The asdf-vm/actions repo provides a GitHub Action for testing your plugins hosted on GitHub. A sample .github/workflows/test.yaml
Actions Workflow:
name: Test
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+
+jobs:
+ plugin_test:
+ name: asdf plugin test
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - macos-latest
+ runs-on: \${{ matrix.os }}
+ steps:
+ - name: asdf_plugin_test
+ uses: asdf-vm/actions/plugin-test@v2
+ with:
+ command: "<MY_TOOL> --version"
A sample .travis.yml
file, customize it to your needs
language: c
+script: asdf plugin test <MY_TOOL> $TRAVIS_BUILD_DIR '<MY_TOOL> --version'
+before_script:
+ - git clone https://github.com/asdf-vm/asdf.git asdf
+ - . asdf/asdf.sh
+os:
+ - linux
+ - osx
NOTE
When using another CI you may need to pass a relative path to the plugin location:
asdf plugin test <tool_name> <path> '<tool_command> --version'
If a command depends on accessing an external API, like bin/list-all
or bin/latest-stable
, it may experience rate limiting during automated testing. To mitigate this, ensure there is a code-path which provides an authentication token via an environment variable. For example:
cmd="curl --silent"
+if [ -n "$GITHUB_API_TOKEN" ]; then
+ cmd="$cmd -H 'Authorization: token $GITHUB_API_TOKEN'"
+fi
+
+cmd="$cmd $releases_path"
GITHUB_API_TOKEN
To utilise the GITHUB_API_TOKEN
, create a new personal token with only public_repo
access.
Then add this to your CI pipeline environment variables.
WARNING
NEVER publish your authentication tokens in your code repository
TIP
The recommended installation method for a plugin is via direct URL installation:
# asdf plugin add <name> <git_url>
+ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
If the git_url
is not provided, asdf will use the Shortname Index repository to determine the exact git_url
to use.
You can add your plugin to the Shortname Index by following the instructions in that repo.
`,27))])}const L=n(r,[["render",E]]);export{T as __pageData,L as default}; diff --git a/assets/plugins_create.md.DOuyNDOe.lean.js b/assets/plugins_create.md.DOuyNDOe.lean.js new file mode 100644 index 00000000..3fa581b7 --- /dev/null +++ b/assets/plugins_create.md.DOuyNDOe.lean.js @@ -0,0 +1,35 @@ +import{_ as n,c as o,a2 as l,j as s,a as e,G as a,B as p,o as d}from"./chunks/framework.BQmytedh.js";const T=JSON.parse('{"title":"Create a Plugin","description":"","frontmatter":{},"headers":[],"relativePath":"plugins/create.md","filePath":"plugins/create.md","lastUpdated":1704804447000}'),r={name:"plugins/create.md"},h={tabindex:"0"},c={style:{"text-align":"left"}},g={style:{"text-align":"left"}},u={style:{"text-align":"left"}},k={style:{"text-align":"left"}},b={id:"bin-list-all",tabindex:"-1"},m={id:"bin-download",tabindex:"-1"},f={id:"bin-install",tabindex:"-1"},y={id:"bin-latest-stable",tabindex:"-1"},F={id:"extension-commands-for-asdf-cli",tabindex:"-1"},v={id:"custom-shim-templates",tabindex:"-1"};function E(A,i,C,x,_,S){const t=p("Badge");return d(),o("div",null,[i[48]||(i[48]=l('A plugin is a Git repo with some executable scripts to support versioning a language / tool. These scripts are run by asdf using specific commands to support features such as asdf list-all <name>
, asdf install <name> <version>
etc.
There are two options to get started with creating your own plugin:
asdf-<tool_name>
) with default scripts implemented. Once generated, clone the repo and run the setup.bash
script to interactively update the template.asdf-<tool_name>
and implement the required scripts as listed in the documentation below.asdf
commandssort -V
. See our asdf core list of banned commandsThe full list of scripts callable from asdf.
',9)),s("table",h,[i[25]||(i[25]=s("thead",null,[s("tr",null,[s("th",{style:{"text-align":"left"}},"Script"),s("th",{style:{"text-align":"left"}},"Description")])],-1)),s("tbody",null,[s("tr",null,[s("td",c,[i[0]||(i[0]=s("a",{href:"#bin-list-all"},"bin/list-all",-1)),i[1]||(i[1]=e()),a(t,{type:"tip",text:"required",vertical:"middle"})]),i[2]||(i[2]=s("td",{style:{"text-align":"left"}},"List all installable versions",-1))]),s("tr",null,[s("td",g,[i[3]||(i[3]=s("a",{href:"#bin-download"},"bin/download",-1)),i[4]||(i[4]=e()),a(t,{type:"tip",text:"required",vertical:"middle"})]),i[5]||(i[5]=s("td",{style:{"text-align":"left"}},"Download source code or binary for the specified version",-1))]),s("tr",null,[s("td",u,[i[6]||(i[6]=s("a",{href:"#bin-install"},"bin/install",-1)),i[7]||(i[7]=e()),a(t,{type:"tip",text:"required",vertical:"middle"})]),i[8]||(i[8]=s("td",{style:{"text-align":"left"}},"Installs the specified version",-1))]),s("tr",null,[s("td",k,[i[9]||(i[9]=s("a",{href:"#bin-latest-stable"},"bin/latest-stable",-1)),i[10]||(i[10]=e()),a(t,{type:"warning",text:"recommended",vertical:"middle"})]),i[11]||(i[11]=s("td",{style:{"text-align":"left"}},"List the latest stable version of the specified tool",-1))]),i[12]||(i[12]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-help.overview"},"bin/help.overview")]),s("td",{style:{"text-align":"left"}},"Output a general description about the plugin & tool")],-1)),i[13]||(i[13]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-help.deps"},"bin/help.deps")]),s("td",{style:{"text-align":"left"}},"Output a list of dependencies per Operating System")],-1)),i[14]||(i[14]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-help.config"},"bin/help.config")]),s("td",{style:{"text-align":"left"}},"Output plugin or tool configuration information")],-1)),i[15]||(i[15]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-help.links"},"bin/help.links")]),s("td",{style:{"text-align":"left"}},"Output a list of links for the plugin or tool")],-1)),i[16]||(i[16]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-list-bin-paths"},"bin/list-bin-paths")]),s("td",{style:{"text-align":"left"}},"List relative paths to directories with binaries to create shims")],-1)),i[17]||(i[17]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-exec-env"},"bin/exec-env")]),s("td",{style:{"text-align":"left"}},"Prepare the environment for running the binaries")],-1)),i[18]||(i[18]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-exec-path"},"bin/exec-path")]),s("td",{style:{"text-align":"left"}},"Output the executable path for a version of a tool")],-1)),i[19]||(i[19]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-uninstall"},"bin/uninstall")]),s("td",{style:{"text-align":"left"}},"Uninstall a specific version of a tool")],-1)),i[20]||(i[20]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-list-legacy-filenames"},"bin/list-legacy-filenames")]),s("td",{style:{"text-align":"left"}},[e("Output filenames of legacy version files: "),s("code",null,".ruby-version")])],-1)),i[21]||(i[21]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-parse-legacy-file"},"bin/parse-legacy-file")]),s("td",{style:{"text-align":"left"}},"Custom parser for legacy version files")],-1)),i[22]||(i[22]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-post-plugin-add"},"bin/post-plugin-add")]),s("td",{style:{"text-align":"left"}},"Hook to execute after a plugin has been added")],-1)),i[23]||(i[23]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-post-plugin-update"},"bin/post-plugin-update")]),s("td",{style:{"text-align":"left"}},"Hook to execute after a plugin has been updated")],-1)),i[24]||(i[24]=s("tr",null,[s("td",{style:{"text-align":"left"}},[s("a",{href:"#bin-pre-plugin-remove"},"bin/pre-plugin-remove")]),s("td",{style:{"text-align":"left"}},"Hook to execute before a plugin is removed")],-1))])]),i[49]||(i[49]=l('To see which commands invoke which scripts, see the detailed documentation for each script.
The full list of Environment Variables used throughout all scripts.
Environment Variables | Description |
---|---|
ASDF_INSTALL_TYPE | version or ref |
ASDF_INSTALL_VERSION | full version number or Git Ref depending on ASDF_INSTALL_TYPE |
ASDF_INSTALL_PATH | the path to where the tool should, or has been installed |
ASDF_CONCURRENCY | the number of cores to use when compiling the source code. Useful for setting make -j |
ASDF_DOWNLOAD_PATH | the path to where the source code or binary was downloaded to by bin/download |
ASDF_PLUGIN_PATH | the path the plugin was installed |
ASDF_PLUGIN_SOURCE_URL | the source URL of the plugin |
ASDF_PLUGIN_PREV_REF | prevous git-ref of the plugin repo |
ASDF_PLUGIN_POST_REF | updated git-ref of the plugin repo |
ASDF_CMD_FILE | resolves to the full path of the file being sourced |
NOTE
Not all environment variables are available in all scripts. Check the documentation for each script below to see which env vars are available to it.
Description
List all installable versions.
Output Format
Must print a string with a space-separated list of versions. For example:
1.0.1 1.0.2 1.3.0 1.4
Newest version should be last.
asdf core will print each version on its own line, potentially pushing some versions offscreen.
Sorting
If versions are being pulled from releases page on a website it's recommended to leave the versions in the provided order as they are often already in the correct order. If they are in reverse order piping them through tac
should suffice.
If sorting is unavoidable, sort -V
is not portable, so we suggest either:
v2.18.0
)sed
, sort
& awk
)Environment Variables available to script
No environment variables are provided to this script.
Commands that invoke this script
asdf list all <name> [version]
asdf list all nodejs
: lists all versions as returned by this script, one on each line.asdf list all nodejs 18
: lists all versions as returned by this script, one on each line, with a filter matching any version beginning with 18
applied.Call signature from asdf core
No parameters provided.
"${plugin_path}/bin/list-all"
Description
Download the source code or binary for a specific version of a tool to a specified location.
Implementation Details
ASDF_DOWNLOAD_PATH
.ASDF_DOWNLOAD_PATH
directory.ASDF_DOWNLOAD_PATH
.0
.Legacy Plugins
Though this script is marked as required for all plugins, it is optional for "legacy" plugins which predate its introduction.
If this script is absent, asdf will assume that the bin/install
script is present and will download and install the version.
All plugins must include this script as support for legacy plugins will eventually be removed.
Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.ASDF_DOWNLOAD_PATH
: The path to where the source code or binary was downloaded to.Commands that invoke this script
asdf install <tool> [version]
asdf install <tool> latest[:version]
asdf install nodejs 18.0.0
: downloads the source code or binary for Node.js version 18.0.0
and places it in the ASDF_DOWNLOAD_PATH
directory. Then runs the bin/install
script.Call signature from asdf core
No parameters provided.
"${plugin_path}"/bin/download
Description
Install a specific version of a tool to a specified location.
Implementation Details
ASDF_INSTALL_PATH
.$ASDF_INSTALL_PATH/bin
. This behaviour can be customised with the optional bin/list-bin-paths script.0
.ASDF_INSTALL_PATH
once the build and installation of the tool is deemed a success.Legacy Plugins
If the bin/download
script is absent, this script should download and install the specified version.
For compatibility with versions of the asdf core earlier than 0.7._
and newer than 0.8._
, check for the presence of the ASDF_DOWNLOAD_PATH
environment variable. If set, assume the bin/download
script already downloaded the version, else download the source code in the bin/install
script.
Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.ASDF_CONCURRENCY
: The number of cores to use when compiling source code. Useful for setting flags like make -j
.ASDF_DOWNLOAD_PATH
: The path where the source code or binary was downloaded to.Commands that invoke this script
asdf install
asdf install <tool>
asdf install <tool> [version]
asdf install <tool> latest[:version]
asdf install nodejs 18.0.0
: installs Node.js version 18.0.0
in the ASDF_INSTALL_PATH
directory.Call signature from asdf core
No parameters provided.
"${plugin_path}"/bin/install
Description
Determine the latest stable version of a tool. If absent, the asdf core will tail
the bin/list-all
output which may be undesirable.
Implementation Details
asdf list all ruby
from the ruby plugin lists versions of Ruby from many providers: jruby
, rbx
& truffleruby
amongst others. The user provided filter could be used by the plugin to filter the semver versions and/or provider.> asdf latest ruby\n3.2.2\n> asdf latest ruby 2\n2.7.8\n> asdf latest ruby truffleruby\ntruffleruby+graalvm-22.3.1
0
.Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf global <tool> latest
: set the global version of a tool to the latest stable version for that tool.asdf local <name> latest
: set the local version of a tool to the latest stable version for that tool.asdf install <tool> latest
: installs the latest version of a tool.asdf latest <tool> [<version>]
: outputs the latest version of a tool based on the optional filter.asdf latest --all
: outputs the latest version of all tools managed by asdf and whether they are installed.Call signature from asdf core
The script should accept a single argument, the filter query.
"${plugin_path}"/bin/latest-stable "$query"
bin/help.overview
Description
Output a general description about the plugin and the tool being managed.
Implementation Details
ASDF_INSTALL_VERSION
and ASDF_INSTALL_TYPE
).0
.Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf help <name> [<version>]
: Output documentation for plugin and toolCall signature from asdf core
"${plugin_path}"/bin/help.overview
bin/help.deps
Description
Output the list of dependencies tailored to the operating system. One dependency per line.
git\ncurl\nsed
Implementation Details
bin/help.overview
for its output to be considered.ASDF_INSTALL_VERSION
and ASDF_INSTALL_TYPE
).0
.Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf help <name> [<version>]
: Output documentation for plugin and toolCall signature from asdf core
"${plugin_path}"/bin/help.deps
bin/help.config
Description
Output any required or optional configuration for the plugin and tool. For example, describe any environment variables or other flags needed to install or compile the tool.
Implementation Details
bin/help.overview
for its output to be considered.ASDF_INSTALL_VERSION
and ASDF_INSTALL_TYPE
).0
.Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf help <name> [<version>]
: Output documentation for plugin and toolCall signature from asdf core
"${plugin_path}"/bin/help.config
bin/help.links
Description
Output a list of links relevant to the plugin and tool. One link per line.
Git Repository: https://github.com/vlang/v\nDocumentation: https://vlang.io
Implementation Details
bin/help.overview
for its output to be considered.<title>: <link>
<link>
ASDF_INSTALL_VERSION
and ASDF_INSTALL_TYPE
).0
.Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf help <name> [<version>]
: Output documentation for plugin and toolCall signature from asdf core
"${plugin_path}"/bin/help.links
bin/list-bin-paths
Description
List directories containing executables for the specified version of the tool.
Implementation Details
"${ASDF_INSTALL_PATH}"/bin
directory & create shims for those.ASDF_INSTALL_PATH
. Example output would be:bin tools veggies
This will instruct asdf to create shims for the files in:
"${ASDF_INSTALL_PATH}"/bin
"${ASDF_INSTALL_PATH}"/tools
"${ASDF_INSTALL_PATH}"/veggies
Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf install <tool> [version]
: initially create shims for binaries.asdf reshim <tool> <version>
: recreate shims for binaries.Call signature from asdf core
"${plugin_path}/bin/list-bin-paths"
bin/exec-env
Description
Prepare the environment before executing the shims for the binaries for the tool.
Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf which <command>
: Display the path to an executableasdf exec <command> [args...]
: Executes the command shim for current versionasdf env <command> [util]
: Runs util (default: env
) inside the environment used for command shim execution.Call signature from asdf core
"${plugin_path}/bin/exec-env"
bin/exec-path
Get the executable path for the specified version of the tool. Must print a string with the relative executable path. This allows the plugin to conditionally override the shim's specified executable path, otherwise return the default path specified by the shim.
Description
Get the executable path for the specified version of the tool.
Implementation Details
Usage:\n plugin/bin/exec-path <install-path> <command> <executable-path>\n\nExample Call:\n ~/.asdf/plugins/foo/bin/exec-path "~/.asdf/installs/foo/1.0" "foo" "bin/foo"\n\nOutput:\n bin/foox
Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
asdf which <command>
: Display the path to an executableasdf exec <command> [args...]
: Executes the command shim for current versionasdf env <command> [util]
: Runs util (default: env
) inside the environment used for command shim execution.Call signature from asdf core
"${plugin_path}/bin/exec-path" "$install_path" "$cmd" "$relative_path"
bin/uninstall
Description
Uninstall the provided version of a tool.
Output Format
Output should be sent to stdout
or stderr
as appropriate for the user. No output is read by subsequent execution in the core.
Environment Variables available to script
No environment variables are provided to this script.
Commands that invoke this script
asdf list all <name> <version>
asdf uninstall nodejs 18.15.0
: Uninstalls the version 18.15.0
of nodejs, removing all shims including those installed global with npm i -g
Call signature from asdf core
No parameters provided.
"${plugin_path}/bin/uninstall"
bin/list-legacy-filenames
Description
List legacy configuration filenames for determining the specified version of the tool.
Implementation Details
.ruby-version .rvmrc
legacy_version_file
option in their "${HOME}"/.asdfrc
.Environment Variables available to script
ASDF_INSTALL_TYPE
: version
or ref
ASDF_INSTALL_VERSION
: ASDF_INSTALL_TYPE=version
.ASDF_INSTALL_TYPE=ref
.ASDF_INSTALL_PATH
: The path to where the tool has been, or should be installed.Commands that invoke this script
Any command which reads a tool version.
Call signature from asdf core
No parameters provided.
"${plugin_path}/bin/list-legacy-filenames"
bin/parse-legacy-file
Description
Parse the legacy file found by asdf to determine the version of the tool. Useful to extract version numbers from files like JavaScript's package.json
or Golangs go.mod
.
Implementation Details
cat
the legacy file to determine the version.1.2.3
Environment Variables available to script
No environment variables specifically set before this script is called.
Commands that invoke this script
Any command which reads a tool version.
Call signature from asdf core
The script should accept a single argument, the path to the legacy file for reading its contents.
"${plugin_path}/bin/parse-legacy-file" "$file_path"
bin/post-plugin-add
Description
Execute this callback script after the plugin has been added to asdf with asdf plugin add <tool>
.
See also the related command hooks:
pre_asdf_plugin_add
pre_asdf_plugin_add_${plugin_name}
post_asdf_plugin_add
post_asdf_plugin_add_${plugin_name}
Environment Variables available to script
ASDF_PLUGIN_PATH
: path where the plugin was installed.ASDF_PLUGIN_SOURCE_URL
: URL of the plugin source. Can be a local directory path.Call signature from asdf core
No parameters provided.
"${plugin_path}/bin/post-plugin-add"
bin/post-plugin-update
Description
Execute this callback script after asdf has downloaded the update plugin with asdf plugin update <tool> [<git-ref>]
.
See also the related command hooks:
pre_asdf_plugin_update
pre_asdf_plugin_update_${plugin_name}
post_asdf_plugin_update
post_asdf_plugin_update_${plugin_name}
Environment Variables available to script
ASDF_PLUGIN_PATH
: path where the plugin was installed.ASDF_PLUGIN_PREV_REF
: the plugin's previous git-refASDF_PLUGIN_POST_REF
: the plugin's updated git-refCall signature from asdf core
No parameters provided.
"${plugin_path}/bin/post-plugin-update"
bin/pre-plugin-remove
Description
Execute this callback script before asdf has removed the plugin with asdf plugin remove <tool>
.
See also the related command hooks:
pre_asdf_plugin_remove
pre_asdf_plugin_remove_${plugin_name}
post_asdf_plugin_remove
post_asdf_plugin_remove_${plugin_name}
Environment Variables available to script
ASDF_PLUGIN_PATH
: path where the plugin was installed.Call signature from asdf core
No parameters provided.
"${plugin_path}/bin/pre-plugin-remove"
It's possible for plugins to define new asdf commands by providing lib/commands/command*.bash
scripts or executables that will be callable using the asdf command line interface by using the plugin name as a subcommand.
For example, suppose a foo
plugin has:
foo/\n lib/commands/\n command.bash\n command-bat.bash\n command-bat-man.bash\n command-help.bash
Users can now execute:
$ asdf foo # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash`\n$ asdf foo bar # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash bar`\n$ asdf foo help # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-help.bash`\n$ asdf foo bat man # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat-man.bash`\n$ asdf foo bat baz # same as running `$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat.bash baz`
Plugin authors can use this feature to provide utilities related to their tools, or even create plugins that are just new command extensions of asdf itself.
If the executable bit is set, the script is executed, replacing the asdf execution.
If the executable bit is not set, asdf will source the scripts as Bash scripts.
$ASDF_CMD_FILE
resolves to the full path of the file being sourced.
haxe
is a great example of a plugin which uses this feature. It provides the asdf haxe neko-dylibs-link
to fix an issue where Haxe executables expect to find dynamic libraries relative to the executable directory.
Be sure to list your asdf Extension Commands in your plugins README.
',11)),s("h2",v,[i[45]||(i[45]=e("Custom Shim Templates ")),a(t,{type:"danger",text:"advanced",vertical:"middle"}),i[46]||(i[46]=e()),i[47]||(i[47]=s("a",{class:"header-anchor",href:"#custom-shim-templates","aria-label":'Permalink to "Custom Shim TemplatesWARNING
Please only use if absolutely required
asdf allows custom shim templates. For an executable called foo
, if there's a shims/foo
file in the plugin, then asdf will copy that file instead of using its standard shim template.
This must be used wisely.
As far as the asdf core team is aware, this feature is only in use in the first-party Elixir plugin. This is because an executable is also read as an Elixir file in addition to being an executable. This makes it not possible to use the standard Bash shim.
asdf
contains the plugin-test
command to test your plugin:
asdf plugin test <plugin_name> <plugin_url> [--asdf-tool-version <version>] [--asdf-plugin-gitref <git_ref>] [test_command...]
<plugin_name>
& <plugin_url>
are required[--asdf-tool-version <version>]
is specified, the tool will be installed with that specific version. Defaults to asdf latest <plugin-name>
[--asdf-plugin-gitref <git_ref>]
is specified, the plugin itself is checked out at that commit/branch/tag. This is useful for testing a pull-request on your plugin's CI. Defaults to the default branch of the plugin's repository.[test_command...]
is the command to execute to validate the installed tool works correctly. Typically <tool> --version
or <tool> --help
. For example, to test the NodeJS plugin, we could run# asdf plugin test <plugin_name> <plugin_url> [test_command]
+ asdf plugin test nodejs https://github.com/asdf-vm/asdf-nodejs.git node --version
Note
We recommend testing in both Linux & macOS CI environments
The asdf-vm/actions repo provides a GitHub Action for testing your plugins hosted on GitHub. A sample .github/workflows/test.yaml
Actions Workflow:
name: Test
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+
+jobs:
+ plugin_test:
+ name: asdf plugin test
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - macos-latest
+ runs-on: \${{ matrix.os }}
+ steps:
+ - name: asdf_plugin_test
+ uses: asdf-vm/actions/plugin-test@v2
+ with:
+ command: "<MY_TOOL> --version"
A sample .travis.yml
file, customize it to your needs
language: c
+script: asdf plugin test <MY_TOOL> $TRAVIS_BUILD_DIR '<MY_TOOL> --version'
+before_script:
+ - git clone https://github.com/asdf-vm/asdf.git asdf
+ - . asdf/asdf.sh
+os:
+ - linux
+ - osx
NOTE
When using another CI you may need to pass a relative path to the plugin location:
asdf plugin test <tool_name> <path> '<tool_command> --version'
If a command depends on accessing an external API, like bin/list-all
or bin/latest-stable
, it may experience rate limiting during automated testing. To mitigate this, ensure there is a code-path which provides an authentication token via an environment variable. For example:
cmd="curl --silent"
+if [ -n "$GITHUB_API_TOKEN" ]; then
+ cmd="$cmd -H 'Authorization: token $GITHUB_API_TOKEN'"
+fi
+
+cmd="$cmd $releases_path"
GITHUB_API_TOKEN
To utilise the GITHUB_API_TOKEN
, create a new personal token with only public_repo
access.
Then add this to your CI pipeline environment variables.
WARNING
NEVER publish your authentication tokens in your code repository
TIP
The recommended installation method for a plugin is via direct URL installation:
# asdf plugin add <name> <git_url>
+ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
If the git_url
is not provided, asdf will use the Shortname Index repository to determine the exact git_url
to use.
You can add your plugin to the Shortname Index by following the instructions in that repo.
`,27))])}const L=n(r,[["render",E]]);export{T as __pageData,L as default}; diff --git a/assets/pt-br_contribute_core.md.BYmf6nEE.js b/assets/pt-br_contribute_core.md.BYmf6nEE.js new file mode 100644 index 00000000..aa470509 --- /dev/null +++ b/assets/pt-br_contribute_core.md.BYmf6nEE.js @@ -0,0 +1,25 @@ +import{_ as s,c as a,a2 as i,o as t}from"./chunks/framework.BQmytedh.js";const k=JSON.parse('{"title":"asdf","description":"","frontmatter":{},"headers":[],"relativePath":"pt-br/contribute/core.md","filePath":"pt-br/contribute/core.md","lastUpdated":1687069487000}'),n={name:"pt-br/contribute/core.md"};function o(l,e,r,p,d,c){return t(),a("div",null,e[0]||(e[0]=[i(`Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
guia de contribuição principal asdf
.
Fork asdf
no GitHub e/ou Git clone o branch padrão:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
As ferramentas para o desenvolvimento do núcleo estão em .tool-versions
deste repositório. Se você deseja gerenciar com o próprio asdf
, adicione os plugins:
asdf plugin add bats https://github.com/timgluz/asdf-bats.git
+asdf plugin add shellcheck https://github.com/luizm/asdf-shellcheck.git
+asdf plugin add shfmt https://github.com/luizm/asdf-shfmt.git
Instale as versões para desenvolver asdf
com:
asdf install
pode ser útil não usar asdf
para gerenciar as ferramentas durante o desenvolvimento em sua máquina local, pois você pode precisar quebrar funcionalidades que, então, quebrariam suas ferramentas de desenvolvimento. Aqui está a lista bruta de ferramentas:
Se você quiser testar suas alterações sem fazer alterações em seu asdf
instalado, você pode definir a variável $ASDF_DIR
para o caminho onde você clonou o repositório e anexar temporariamente o diretório bin
e shims
do diretório para o seu caminho.
É melhor formatar, lint e testar seu código localmente antes de confirmar ou enviar para o controle remoto. Use os seguintes scripts/comandos:
# Shellcheck
+./scripts/shellcheck.bash
+
+# Format
+./scripts/shfmt.bash
+
+# Test: all tests
+bats test/
+# Test: for specific command
+bats test/list_commands.bash
TIP
Adicione testes! - Os testes são necessários para novos recursos e aceleram a revisão de correções de bugs. Por favor, cubra novos caminhos de código antes de criar um Pull Request. Consulte documentação do bats-core
É fortemente recomendado examinar o conjunto de testes existente e a documentação do bats-core antes de escrever os testes.
A depuração de BATs pode ser difícil às vezes. Usar a saída TAP com o sinalizador -t
permitirá que você imprima saídas com o descritor de arquivo especial >&3
durante a execução do teste, simplificando a depuração. Como um exemplo:
# test/some_tests.bats
+
+printf "%s\\n" "Will not be printed during bats test/some_tests.bats"
+printf "%s\\n" "Will be printed during bats -t test/some_tests.bats" >&3
Isso está documentado em bats-core Imprimindo no Terminal.
O asdf
está usando uma ferramenta de lançamento automatizada chamada Release Please para aumentar automaticamente a versão SemVer e gerar a Changelog. Essas informações são determinadas lendo o histórico de confirmação desde a última versão.
Mensagens de confirmação convencionais definem o formato do título da solicitação pull que se torna o formato da mensagem de confirmação na ramificação padrão. Isso é aplicado com GitHub Action amannn/action-semantic-pull-request
.
O Commit Convencional segue este formato:
<type>[optional scope][optional !]: <description>
+
+<!-- examples -->
+fix: some fix
+feat: a new feature
+docs: some documentation update
+docs(website): some change for the website
+feat!: feature with breaking change
A lista completa de <types>
é: feat
, fix
, docs
, style
, refactor
, perf
, test
, build
, ci
, chore
, revert
.
O !
indica uma mudança de ruptura.
fix
: will create a new SemVer patch
feat
: will create a new SemVer minor
<type>!
: will create a new SemVer major
O título da solicitação pull deve seguir este formato.
TIP
Use o formato de mensagem de confirmação convencional para seu título de solicitação de pull.
Os projetos asdf-alpine e asdf-ubuntu são um esforço contínuo para fornecer imagens de algumas ferramentas asdf. Você pode usar essas imagens docker como base para seus servidores de desenvolvimento ou para executar seus aplicativos de produção.
`,34)]))}const m=s(n,[["render",o]]);export{k as __pageData,m as default}; diff --git a/assets/pt-br_contribute_core.md.BYmf6nEE.lean.js b/assets/pt-br_contribute_core.md.BYmf6nEE.lean.js new file mode 100644 index 00000000..aa470509 --- /dev/null +++ b/assets/pt-br_contribute_core.md.BYmf6nEE.lean.js @@ -0,0 +1,25 @@ +import{_ as s,c as a,a2 as i,o as t}from"./chunks/framework.BQmytedh.js";const k=JSON.parse('{"title":"asdf","description":"","frontmatter":{},"headers":[],"relativePath":"pt-br/contribute/core.md","filePath":"pt-br/contribute/core.md","lastUpdated":1687069487000}'),n={name:"pt-br/contribute/core.md"};function o(l,e,r,p,d,c){return t(),a("div",null,e[0]||(e[0]=[i(`Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
guia de contribuição principal asdf
.
Fork asdf
no GitHub e/ou Git clone o branch padrão:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
As ferramentas para o desenvolvimento do núcleo estão em .tool-versions
deste repositório. Se você deseja gerenciar com o próprio asdf
, adicione os plugins:
asdf plugin add bats https://github.com/timgluz/asdf-bats.git
+asdf plugin add shellcheck https://github.com/luizm/asdf-shellcheck.git
+asdf plugin add shfmt https://github.com/luizm/asdf-shfmt.git
Instale as versões para desenvolver asdf
com:
asdf install
pode ser útil não usar asdf
para gerenciar as ferramentas durante o desenvolvimento em sua máquina local, pois você pode precisar quebrar funcionalidades que, então, quebrariam suas ferramentas de desenvolvimento. Aqui está a lista bruta de ferramentas:
Se você quiser testar suas alterações sem fazer alterações em seu asdf
instalado, você pode definir a variável $ASDF_DIR
para o caminho onde você clonou o repositório e anexar temporariamente o diretório bin
e shims
do diretório para o seu caminho.
É melhor formatar, lint e testar seu código localmente antes de confirmar ou enviar para o controle remoto. Use os seguintes scripts/comandos:
# Shellcheck
+./scripts/shellcheck.bash
+
+# Format
+./scripts/shfmt.bash
+
+# Test: all tests
+bats test/
+# Test: for specific command
+bats test/list_commands.bash
TIP
Adicione testes! - Os testes são necessários para novos recursos e aceleram a revisão de correções de bugs. Por favor, cubra novos caminhos de código antes de criar um Pull Request. Consulte documentação do bats-core
É fortemente recomendado examinar o conjunto de testes existente e a documentação do bats-core antes de escrever os testes.
A depuração de BATs pode ser difícil às vezes. Usar a saída TAP com o sinalizador -t
permitirá que você imprima saídas com o descritor de arquivo especial >&3
durante a execução do teste, simplificando a depuração. Como um exemplo:
# test/some_tests.bats
+
+printf "%s\\n" "Will not be printed during bats test/some_tests.bats"
+printf "%s\\n" "Will be printed during bats -t test/some_tests.bats" >&3
Isso está documentado em bats-core Imprimindo no Terminal.
O asdf
está usando uma ferramenta de lançamento automatizada chamada Release Please para aumentar automaticamente a versão SemVer e gerar a Changelog. Essas informações são determinadas lendo o histórico de confirmação desde a última versão.
Mensagens de confirmação convencionais definem o formato do título da solicitação pull que se torna o formato da mensagem de confirmação na ramificação padrão. Isso é aplicado com GitHub Action amannn/action-semantic-pull-request
.
O Commit Convencional segue este formato:
<type>[optional scope][optional !]: <description>
+
+<!-- examples -->
+fix: some fix
+feat: a new feature
+docs: some documentation update
+docs(website): some change for the website
+feat!: feature with breaking change
A lista completa de <types>
é: feat
, fix
, docs
, style
, refactor
, perf
, test
, build
, ci
, chore
, revert
.
O !
indica uma mudança de ruptura.
fix
: will create a new SemVer patch
feat
: will create a new SemVer minor
<type>!
: will create a new SemVer major
O título da solicitação pull deve seguir este formato.
TIP
Use o formato de mensagem de confirmação convencional para seu título de solicitação de pull.
Os projetos asdf-alpine e asdf-ubuntu são um esforço contínuo para fornecer imagens de algumas ferramentas asdf. Você pode usar essas imagens docker como base para seus servidores de desenvolvimento ou para executar seus aplicativos de produção.
`,34)]))}const m=s(n,[["render",o]]);export{k as __pageData,m as default}; diff --git a/assets/pt-br_contribute_documentation.md.DIVmFQtc.js b/assets/pt-br_contribute_documentation.md.DIVmFQtc.js new file mode 100644 index 00000000..3c5e0085 --- /dev/null +++ b/assets/pt-br_contribute_documentation.md.DIVmFQtc.js @@ -0,0 +1,29 @@ +import{_ as a,c as i,a2 as e,o as n}from"./chunks/framework.BQmytedh.js";const k=JSON.parse('{"title":"Docs & Site","description":"","frontmatter":{},"headers":[],"relativePath":"pt-br/contribute/documentation.md","filePath":"pt-br/contribute/documentation.md","lastUpdated":1687069487000}'),t={name:"pt-br/contribute/documentation.md"};function o(l,s,p,r,d,h){return n(),i("div",null,s[0]||(s[0]=[e(`Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
Documentação e guia de contribuição do site.
Fork asdf
no GitHub e/ou Git clone o branch padrão:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
As ferramentas para desenvolvimento de sites Docs são gerenciadas com asdf
em docs/.tool-versions
. Adicione os plugins com:
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
Instale a(s) versão(ões) da ferramenta com:
asdf install
Instale as dependências do Node.js do docs/package.json
:
npm install
Vuepress (v2) é o Static Site Generator (SSG) que usamos para construir o site de documentação do asdf. Foi escolhido para substituir Docsify.js, pois gostaríamos de oferecer suporte a um substituto somente HTML quando os usuários não tiverem JavaScript disponível ou ativado. Isso não era possível com o Docsify. Fora isso, o conjunto de recursos é basicamente o mesmo, com foco em escrever arquivos Markdown com configuração mínima.
package.json
contém os scripts necessários para o desenvolvimento:
Para iniciar o servidor de desenvolvimento local:
npm run dev
Formate o código antes de confirmar:
npm run format
asdf
está usando um pipeline de lançamento automatizado que depende de Commits Convencionais em títulos de PR. Documentação detalhada encontrada no guia de contribuição principal.
Ao criar um PR para alterações na documentação, por favor, faça o título do PR com o tipo de Commit Convencional docs
no formato docs: <description>
.
A configuração do site está contida em alguns arquivos JavaScript com objetos JS usados para representar a configuração. Eles estão:
docs/.vuepress/config.js
: o arquivo de configuração raiz do site. Leia a documentação do Vuepress para obter as especificações.Para simplificar a configuração raiz, os objetos JS maiores que representam a configuração navbar e sidebar foram extraídos e separados por sua localidade. Veja os dois em:
docs/.vuepress/navbar.js
docs/.vuepress/sidebar.js
Com a documentação oficial para essas configurações vivendo na Referência de tema padrão.
Vuepress tem suporte de primeira classe para internacionalização. O root config docs/.vuepress/config.js
define os locais suportados com sua URL, título no menu suspenso de seleção e referências de configurações navbar/sidebar.
As configurações da barra de navegação/barra lateral são capturadas nos arquivos de configuração mencionados acima, separadas por localidade e exportadas individualmente.
O conteúdo de markdown para cada localidade deve estar em uma pasta com o mesmo nome das chaves para locales
na configuração raiz. Isso é:
{
+ ...
+ themeConfig: {
+ locales: {
+ "/": {
+ selectLanguageName: "English (US)",
+ sidebar: sidebar.en,
+ navbar: navbar.en
+ },
+ "/pt-BR/": {
+ selectLanguageName: "Brazilian Portuguese",
+ sidebar: sidebar.pt_br,
+ navbar: navbar.pt_br
+ }
+ }
+ }
+}
/pt-BR/
exigirá o mesmo conjunto de arquivos markdown localizados em docs/pt-BR/
, assim:
docs
+├─ README.md
+├─ foo.md
+├─ nested
+│ └─ README.md
+└─ pt-BR
+ ├─ README.md
+ ├─ foo.md
+ └─ nested
+ └─ README.md
A documentação oficial do Vuepress i18n entra em mais detalhes.
`,38)]))}const u=a(t,[["render",o]]);export{k as __pageData,u as default}; diff --git a/assets/pt-br_contribute_documentation.md.DIVmFQtc.lean.js b/assets/pt-br_contribute_documentation.md.DIVmFQtc.lean.js new file mode 100644 index 00000000..3c5e0085 --- /dev/null +++ b/assets/pt-br_contribute_documentation.md.DIVmFQtc.lean.js @@ -0,0 +1,29 @@ +import{_ as a,c as i,a2 as e,o as n}from"./chunks/framework.BQmytedh.js";const k=JSON.parse('{"title":"Docs & Site","description":"","frontmatter":{},"headers":[],"relativePath":"pt-br/contribute/documentation.md","filePath":"pt-br/contribute/documentation.md","lastUpdated":1687069487000}'),t={name:"pt-br/contribute/documentation.md"};function o(l,s,p,r,d,h){return n(),i("div",null,s[0]||(s[0]=[e(`Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
Documentação e guia de contribuição do site.
Fork asdf
no GitHub e/ou Git clone o branch padrão:
# clone your fork
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# or clone asdf
+git clone https://github.com/asdf-vm/asdf.git
As ferramentas para desenvolvimento de sites Docs são gerenciadas com asdf
em docs/.tool-versions
. Adicione os plugins com:
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
Instale a(s) versão(ões) da ferramenta com:
asdf install
Instale as dependências do Node.js do docs/package.json
:
npm install
Vuepress (v2) é o Static Site Generator (SSG) que usamos para construir o site de documentação do asdf. Foi escolhido para substituir Docsify.js, pois gostaríamos de oferecer suporte a um substituto somente HTML quando os usuários não tiverem JavaScript disponível ou ativado. Isso não era possível com o Docsify. Fora isso, o conjunto de recursos é basicamente o mesmo, com foco em escrever arquivos Markdown com configuração mínima.
package.json
contém os scripts necessários para o desenvolvimento:
Para iniciar o servidor de desenvolvimento local:
npm run dev
Formate o código antes de confirmar:
npm run format
asdf
está usando um pipeline de lançamento automatizado que depende de Commits Convencionais em títulos de PR. Documentação detalhada encontrada no guia de contribuição principal.
Ao criar um PR para alterações na documentação, por favor, faça o título do PR com o tipo de Commit Convencional docs
no formato docs: <description>
.
A configuração do site está contida em alguns arquivos JavaScript com objetos JS usados para representar a configuração. Eles estão:
docs/.vuepress/config.js
: o arquivo de configuração raiz do site. Leia a documentação do Vuepress para obter as especificações.Para simplificar a configuração raiz, os objetos JS maiores que representam a configuração navbar e sidebar foram extraídos e separados por sua localidade. Veja os dois em:
docs/.vuepress/navbar.js
docs/.vuepress/sidebar.js
Com a documentação oficial para essas configurações vivendo na Referência de tema padrão.
Vuepress tem suporte de primeira classe para internacionalização. O root config docs/.vuepress/config.js
define os locais suportados com sua URL, título no menu suspenso de seleção e referências de configurações navbar/sidebar.
As configurações da barra de navegação/barra lateral são capturadas nos arquivos de configuração mencionados acima, separadas por localidade e exportadas individualmente.
O conteúdo de markdown para cada localidade deve estar em uma pasta com o mesmo nome das chaves para locales
na configuração raiz. Isso é:
{
+ ...
+ themeConfig: {
+ locales: {
+ "/": {
+ selectLanguageName: "English (US)",
+ sidebar: sidebar.en,
+ navbar: navbar.en
+ },
+ "/pt-BR/": {
+ selectLanguageName: "Brazilian Portuguese",
+ sidebar: sidebar.pt_br,
+ navbar: navbar.pt_br
+ }
+ }
+ }
+}
/pt-BR/
exigirá o mesmo conjunto de arquivos markdown localizados em docs/pt-BR/
, assim:
docs
+├─ README.md
+├─ foo.md
+├─ nested
+│ └─ README.md
+└─ pt-BR
+ ├─ README.md
+ ├─ foo.md
+ └─ nested
+ └─ README.md
A documentação oficial do Vuepress i18n entra em mais detalhes.
`,38)]))}const u=a(t,[["render",o]]);export{k as __pageData,u as default}; diff --git a/assets/pt-br_contribute_first-party-plugins.md.BJkV62VO.js b/assets/pt-br_contribute_first-party-plugins.md.BJkV62VO.js new file mode 100644 index 00000000..590ef9bf --- /dev/null +++ b/assets/pt-br_contribute_first-party-plugins.md.BJkV62VO.js @@ -0,0 +1 @@ +import{_ as a,c as t,a2 as r,o as i}from"./chunks/framework.BQmytedh.js";const f=JSON.parse('{"title":"First-Party Plugins","description":"","frontmatter":{},"headers":[],"relativePath":"pt-br/contribute/first-party-plugins.md","filePath":"pt-br/contribute/first-party-plugins.md","lastUpdated":1650978118000}'),o={name:"pt-br/contribute/first-party-plugins.md"};function s(l,e,n,d,p,u){return i(),t("div",null,e[0]||(e[0]=[r('Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
A equipe principal do asdf criou alguns plugins relevantes para sua vida profissional diária. A ajuda é sempre bem-vinda na manutenção e melhoria desses plugins. Veja o repositório associado para cada link abaixo:
Para plugins da comunidade, consulte:
asdf-community
organisation: A collaborative, community-driven project for long-term maintenance of asdf
plugins.asdf-plugins
shortname repo: Short-name list used by asdf
core to lookup popular asdf
plugins.asdf-plugin
topic searchHi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
A equipe principal do asdf criou alguns plugins relevantes para sua vida profissional diária. A ajuda é sempre bem-vinda na manutenção e melhoria desses plugins. Veja o repositório associado para cada link abaixo:
Para plugins da comunidade, consulte:
asdf-community
organisation: A collaborative, community-driven project for long-term maintenance of asdf
plugins.asdf-plugins
shortname repo: Short-name list used by asdf
core to lookup popular asdf
plugins.asdf-plugin
topic searchHi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
A instalação do asdf
envolve:
asdf
asdf
ao seu shell.tool-versions
Você pode também acompanhar o passo a passo da instalação através deste vídeo.
asdf primarily requires git
& curl
. Here is a non-exhaustive list of commands to run for your package manager (some might automatically install these tools in later steps).
OS | Package Manager | Command |
---|---|---|
linux | Aptitude | apt install curl git |
linux | DNF | dnf install curl git |
linux | Pacman | pacman -S curl git |
linux | Zypper | zypper install curl git |
macOS | Homebrew | brew install coreutils curl git |
macOS | Spack | spack install coreutils curl git |
Note
sudo
may be required depending on your system configuration.
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.15.0
We highly recommend using the official git
method.
Method | Command |
---|---|
Homebrew | brew install asdf |
Pacman | git clone https://aur.archlinux.org/asdf-vm.git && cd asdf-vm && makepkg -si or use your preferred AUR helper |
Existem diversas combinações de shells, sistemas operacionais e métodos de instalação que podem impactar a configuração. Abaixo, expanda a seção que se adeque mais com o seu sistema:
Adicione esta linha ao seu ~/.bashrc
:
. "$HOME/.asdf/asdf.sh"
O auto completar deve ser configurado manualmente a partir da adição da seguinte linha ao .bashrc
:
. "$HOME/.asdf/completions/asdf.bash"
Se você estiver usando o macOS Catalina ou mais recente, o shell padrão mudou para o ZSH. A não ser que você tenha voltado para o bash, siga as instruções de instalação para o ZSH.
Adicione esta linha ao seu ~/.bash_profile
:
. "$HOME/.asdf/asdf.sh"
O auto completar deve ser configurado manualmente a partir da adição da seguinte linha ao .bash_profile
:
. "$HOME/.asdf/completions/asdf.bash"
Adicione asdf.sh
ao ~/.bashrc
através do comando:
echo -e "\\n. $(brew --prefix asdf)/asdf.sh" >> ~/.bashrc
O auto completar deve ser configurado seguindo as instruções da Homebrew, ou as seguintes:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bashrc
Se você estiver usando o macOS Catalina ou mais recente, o shell padrão mudou para o ZSH. A não ser que você tenha voltado para o bash, siga as instruções de instalação para o ZSH.
Adicione asdf.sh
ao ~/.bash_profile
através do comando:
echo -e "\\n. $(brew --prefix asdf)/asdf.sh" >> ~/.bash_profile
O auto completar deve ser configurado seguindo as instruções da Homebrew, ou as seguintes:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bash_profile
Adicione a seguinte linha ao seu ~/.bashrc
:
. /opt/asdf-vm/asdf.sh
O pacote bash-completion
precisa ser instalado para o auto completar funcionar.
Adicione a seguinte linha ao seu ~/.config/fish/config.fish
:
source ~/.asdf/asdf.fish
O auto completar deve ser configurado manualmente através do seguinte comando:
mkdir -p ~/.config/fish/completions; and ln -s ~/.asdf/completions/asdf.fish ~/.config/fish/completions
Adicione asdf.fish
ao seu ~/.config/fish/config.fish
através do comando:
echo -e "\\nsource "(brew --prefix asdf)"/asdf.fish" >> ~/.config/fish/config.fish
O auto completar é configurado pela Homebrew para o fish shell.
Adicione a seguinte linha ao seu ~/.config/fish/config.fish
:
source /opt/asdf-vm/asdf.fish
O auto completar é configurado automaticamente durante a instalação do pacote AUR.
Adicione asdf.elv
ao ~/.config/elvish/rc.elv
através do comando:
mkdir -p ~/.config/elvish/lib; ln -s ~/.asdf/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
Ao concluir atualizará automaticamente
Adicione asdf.elv
ao ~/.config/elvish/rc.elv
através do comando:
mkdir -p ~/.config/elvish/lib; ln -s (brew --prefix asdf)/libexec/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
Ao concluir atualizará automaticamente
Adicione asdf.elv
ao ~/.config/elvish/rc.elv
através do comando:
mkdir -p ~/.config/elvish/lib; ln -s /opt/asdf-vm/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
Ao concluir atualizará automaticamente
Adicione a seguinte linha ao seu ~/.zshrc
:
. "$HOME/.asdf/asdf.sh"
OU utilize um framework para ZSH, como asdf para oh-my-zsh que irá adicionar o script e o auto completar.
O auto completar pode ser configurado ou pelo plugin do asdf para framework para ZSH, ou através da adição das seguintes linhas ao seu .zshrc
:
# append completions to fpath
+fpath=(\${ASDF_DIR}/completions $fpath)
+# initialise completions with ZSH's compinit
+autoload -Uz compinit && compinit
compinit
customizada, garanta que compinit
esteja abaixo chamada asdf.sh
compinit
customizada com um framework para ZSH, garanta que compinit
esteja abaixo da chamada do framework.Aviso
Se você está utilizando um framework para ZSH, o plugin do asdf pode precisar ser atualizado para utilização adequada do novo auto completar do ZSH através do fpath
. O plugin do asdf para o oh-my-zsh ainda não foi atualizado, veja: ohmyzsh/ohmyzsh#8837.
Adicione asdf.sh
ao seu ~/.zshrc
através do comando:
echo -e "\\n. $(brew --prefix asdf)/asdf.sh" >> \${ZDOTDIR:-~}/.zshrc
OU utilize um framework para ZSH, como asdf para oh-my-zsh que irá adicionar o script e o auto completar.
O auto completar pode ser configurado ou pelo framework para ZSH, ou de acordo com as instruções da Homebrew. Se você está usando um framework para ZSH, pode ser que seja necessário atualizar o plugin do asdf para que o novo auto completar funcione adequadamente através do fpath
. O plugin do asdf para o Oh-My-ZSH ainda será atualizado, veja: ohmyzsh/ohmyzsh#8837.
Adicione a seguinte linha ao seu ~/.zshrc
:
. /opt/asdf-vm/asdf.sh
Adicione a seguinte linha ao seu ~/.config/powershell/profile.ps1
:
. "$HOME/.asdf/asdf.ps1"
Adicione asdf.ps1
ao seu ~/.config/powershell/profile.ps1
através do comando:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.ps1\\"" >> ~/.config/powershell/profile.ps1
Adicione a seguinte linha ao seu ~/.config/powershell/profile.ps1
:
. /opt/asdf-vm/asdf.ps1
Adicione asdf.nu
ao seu ~/.config/nushell/config.nu
através do comando:
"\\n$env.ASDF_DIR = ($env.HOME | path join '.asdf')\\n source " + ($env.HOME | path join '.asdf/asdf.nu') | save --append $nu.config-path
Ao concluir atualizará automaticamente
Adicione asdf.nu
ao seu ~/.config/nushell/config.nu
através do comando:
"\\n$env.ASDF_DIR = (brew --prefix asdf | str trim | into string | path join 'libexec')\\n source " + (brew --prefix asdf | str trim | into string | path join 'libexec/asdf.nu') | save --append $nu.config-path
Ao concluir atualizará automaticamente
Adicione asdf.nu
ao seu ~/.config/nushell/config.nu
através do comando:
"\\n$env.ASDF_DIR = '/opt/asdf-vm/'\\n source /opt/asdf-vm/asdf.nu" | save --append $nu.config-path
Ao concluir atualizará automaticamente
Adicione a seguinte linha ao seu ~/.profile
:
export ASDF_DIR="$HOME/.asdf"
+. "$HOME/.asdf/asdf.sh"
Adicione asdf.sh
ao ~/.profile
através do comando:
echo -e "\\nexport ASDF_DIR=\\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
+echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
Adicione a seguinte linha ao seu ~/.profile
:
export ASDF_DIR="/opt/asdf-vm"
+. /opt/asdf-vm/asdf.sh
O auto completar é colocado em um local familiar para o ZSH, mas o ZSH deve ser configurado para conseguir utilizá-lo. :::
Os scripts do asdf
precisam ser chamados depois de ter configurado a sua variável $PATH
e depois de ter chamado o seu framework para ZSH (oh-my-zsh etc).
Reinicie seu shell para que as mudanças na variável PATH
tenham efeito. Abrir uma nova janela/sessão de terminal o fará.
Para demonstração, vamos instalar e configurar o Node.js através do plugin asdf-nodejs
.
Cada plugin possui algumas dependências, por isso precisamos checar no repositório onde elas estão listadas. Por exemplo, para o asdf-nodejs
são:
SO | Instalação de dependencia |
---|---|
Linux (Debian) | apt-get install dirmngr gpg curl gawk |
macOS | brew install gpg gawk |
Devemos instalar instalar as dependências primeiro, pois alguns plugins exigem algumas ações após a instalação.
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
Agora temos o plugin para o Node.js, nós podemos instalar uma versão desta ferramenta.
Podemos ver quais versões tão disponíveis através do comando asdf list all nodejs
, ou uma lista específica de versões com asdf list all nodejs 14
Vamos instalar somente a última versão disponível, utilizando a tag latest
:
asdf install nodejs latest
Nota
asdf
exige versões exatas. A palavra latest
resulta na instalação da versão atual na data da execução.
asdf
executa uma verificação das versões das ferramentas a serem utilizadas através do arquivo .tool-versions
presente desde diretório atual, até o diretório $HOME
. A varredura ocorre no momento em que você executa uma ferramenta que o asdf gerencia.
WARNING
Se uma versão não for especificada para uma ferramenta, ao executá-la resultará em erro. asdf current
mostrará a ferramenta e sua versão, ou então a falta dela no seu diretório atual para que você possa observar quais ferramentas falharão ao serem executadas.
Os padrões globais são gerenciados em $HOME/.tool-versions
. Defina uma versão global através do comando:
asdf global nodejs latest
$HOME/.tool-versions
ficará assim:
nodejs 16.5.0
Alguns sistemas operacionais vêm por padrão com ferramentas que são gerenciadas pelo próprio sistema e não pelo asdf
, python
é um exemplo. Você precisa indicar para o asdf
para devolver o gerenciamento para o sistema. A seção de referência de versões irá guiá-lo.
Versões locais são definidas no arquivo $PWD/.tool-versions
(seu diretório atual). Geralmente, será um repositório Git para um projeto. Quando estiver no diretório desejado, execute:
asdf local nodejs latest
$PWD/.tool-versions
ficará assim:
nodejs 16.5.0
asdf
suporta a migração de arquivos de versão provenientes de outros gerenciadores de versão. Por exemplo: .ruby-version
para o rbenv
. Essa funcionalidade é baseada no plugin de cada ferramenta.
O asdf-nodejs
suporta tanto arquivos .nvmrc
quanto .node-version
. Para ativar essa funcionalidade, adicione a seguinte linha ao seu arquivo de configuração do asdf
- $HOME/.asdfrc
:
legacy_version_file = yes
Veja a página de refencia da configuração para mais opções de configuração.
A configuração inicial do asdf
foi finalizada 🎉. Agora, você pode gerenciar versões do nodejs
para o seus projetos. Siga passos semelhantes para cada ferramenta do seu projeto.
O asdf
possui diversos outros comandos para se acustomar ainda, você pode ver todos eles através do comando asdf --help
ou simplesmente asdf
. Eles estão divididos em três categorias:
Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
A instalação do asdf
envolve:
asdf
asdf
ao seu shell.tool-versions
Você pode também acompanhar o passo a passo da instalação através deste vídeo.
asdf primarily requires git
& curl
. Here is a non-exhaustive list of commands to run for your package manager (some might automatically install these tools in later steps).
OS | Package Manager | Command |
---|---|---|
linux | Aptitude | apt install curl git |
linux | DNF | dnf install curl git |
linux | Pacman | pacman -S curl git |
linux | Zypper | zypper install curl git |
macOS | Homebrew | brew install coreutils curl git |
macOS | Spack | spack install coreutils curl git |
Note
sudo
may be required depending on your system configuration.
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.15.0
We highly recommend using the official git
method.
Method | Command |
---|---|
Homebrew | brew install asdf |
Pacman | git clone https://aur.archlinux.org/asdf-vm.git && cd asdf-vm && makepkg -si or use your preferred AUR helper |
Existem diversas combinações de shells, sistemas operacionais e métodos de instalação que podem impactar a configuração. Abaixo, expanda a seção que se adeque mais com o seu sistema:
Adicione esta linha ao seu ~/.bashrc
:
. "$HOME/.asdf/asdf.sh"
O auto completar deve ser configurado manualmente a partir da adição da seguinte linha ao .bashrc
:
. "$HOME/.asdf/completions/asdf.bash"
Se você estiver usando o macOS Catalina ou mais recente, o shell padrão mudou para o ZSH. A não ser que você tenha voltado para o bash, siga as instruções de instalação para o ZSH.
Adicione esta linha ao seu ~/.bash_profile
:
. "$HOME/.asdf/asdf.sh"
O auto completar deve ser configurado manualmente a partir da adição da seguinte linha ao .bash_profile
:
. "$HOME/.asdf/completions/asdf.bash"
Adicione asdf.sh
ao ~/.bashrc
através do comando:
echo -e "\\n. $(brew --prefix asdf)/asdf.sh" >> ~/.bashrc
O auto completar deve ser configurado seguindo as instruções da Homebrew, ou as seguintes:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bashrc
Se você estiver usando o macOS Catalina ou mais recente, o shell padrão mudou para o ZSH. A não ser que você tenha voltado para o bash, siga as instruções de instalação para o ZSH.
Adicione asdf.sh
ao ~/.bash_profile
através do comando:
echo -e "\\n. $(brew --prefix asdf)/asdf.sh" >> ~/.bash_profile
O auto completar deve ser configurado seguindo as instruções da Homebrew, ou as seguintes:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bash_profile
Adicione a seguinte linha ao seu ~/.bashrc
:
. /opt/asdf-vm/asdf.sh
O pacote bash-completion
precisa ser instalado para o auto completar funcionar.
Adicione a seguinte linha ao seu ~/.config/fish/config.fish
:
source ~/.asdf/asdf.fish
O auto completar deve ser configurado manualmente através do seguinte comando:
mkdir -p ~/.config/fish/completions; and ln -s ~/.asdf/completions/asdf.fish ~/.config/fish/completions
Adicione asdf.fish
ao seu ~/.config/fish/config.fish
através do comando:
echo -e "\\nsource "(brew --prefix asdf)"/asdf.fish" >> ~/.config/fish/config.fish
O auto completar é configurado pela Homebrew para o fish shell.
Adicione a seguinte linha ao seu ~/.config/fish/config.fish
:
source /opt/asdf-vm/asdf.fish
O auto completar é configurado automaticamente durante a instalação do pacote AUR.
Adicione asdf.elv
ao ~/.config/elvish/rc.elv
através do comando:
mkdir -p ~/.config/elvish/lib; ln -s ~/.asdf/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
Ao concluir atualizará automaticamente
Adicione asdf.elv
ao ~/.config/elvish/rc.elv
através do comando:
mkdir -p ~/.config/elvish/lib; ln -s (brew --prefix asdf)/libexec/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
Ao concluir atualizará automaticamente
Adicione asdf.elv
ao ~/.config/elvish/rc.elv
através do comando:
mkdir -p ~/.config/elvish/lib; ln -s /opt/asdf-vm/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
Ao concluir atualizará automaticamente
Adicione a seguinte linha ao seu ~/.zshrc
:
. "$HOME/.asdf/asdf.sh"
OU utilize um framework para ZSH, como asdf para oh-my-zsh que irá adicionar o script e o auto completar.
O auto completar pode ser configurado ou pelo plugin do asdf para framework para ZSH, ou através da adição das seguintes linhas ao seu .zshrc
:
# append completions to fpath
+fpath=(\${ASDF_DIR}/completions $fpath)
+# initialise completions with ZSH's compinit
+autoload -Uz compinit && compinit
compinit
customizada, garanta que compinit
esteja abaixo chamada asdf.sh
compinit
customizada com um framework para ZSH, garanta que compinit
esteja abaixo da chamada do framework.Aviso
Se você está utilizando um framework para ZSH, o plugin do asdf pode precisar ser atualizado para utilização adequada do novo auto completar do ZSH através do fpath
. O plugin do asdf para o oh-my-zsh ainda não foi atualizado, veja: ohmyzsh/ohmyzsh#8837.
Adicione asdf.sh
ao seu ~/.zshrc
através do comando:
echo -e "\\n. $(brew --prefix asdf)/asdf.sh" >> \${ZDOTDIR:-~}/.zshrc
OU utilize um framework para ZSH, como asdf para oh-my-zsh que irá adicionar o script e o auto completar.
O auto completar pode ser configurado ou pelo framework para ZSH, ou de acordo com as instruções da Homebrew. Se você está usando um framework para ZSH, pode ser que seja necessário atualizar o plugin do asdf para que o novo auto completar funcione adequadamente através do fpath
. O plugin do asdf para o Oh-My-ZSH ainda será atualizado, veja: ohmyzsh/ohmyzsh#8837.
Adicione a seguinte linha ao seu ~/.zshrc
:
. /opt/asdf-vm/asdf.sh
Adicione a seguinte linha ao seu ~/.config/powershell/profile.ps1
:
. "$HOME/.asdf/asdf.ps1"
Adicione asdf.ps1
ao seu ~/.config/powershell/profile.ps1
através do comando:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.ps1\\"" >> ~/.config/powershell/profile.ps1
Adicione a seguinte linha ao seu ~/.config/powershell/profile.ps1
:
. /opt/asdf-vm/asdf.ps1
Adicione asdf.nu
ao seu ~/.config/nushell/config.nu
através do comando:
"\\n$env.ASDF_DIR = ($env.HOME | path join '.asdf')\\n source " + ($env.HOME | path join '.asdf/asdf.nu') | save --append $nu.config-path
Ao concluir atualizará automaticamente
Adicione asdf.nu
ao seu ~/.config/nushell/config.nu
através do comando:
"\\n$env.ASDF_DIR = (brew --prefix asdf | str trim | into string | path join 'libexec')\\n source " + (brew --prefix asdf | str trim | into string | path join 'libexec/asdf.nu') | save --append $nu.config-path
Ao concluir atualizará automaticamente
Adicione asdf.nu
ao seu ~/.config/nushell/config.nu
através do comando:
"\\n$env.ASDF_DIR = '/opt/asdf-vm/'\\n source /opt/asdf-vm/asdf.nu" | save --append $nu.config-path
Ao concluir atualizará automaticamente
Adicione a seguinte linha ao seu ~/.profile
:
export ASDF_DIR="$HOME/.asdf"
+. "$HOME/.asdf/asdf.sh"
Adicione asdf.sh
ao ~/.profile
através do comando:
echo -e "\\nexport ASDF_DIR=\\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
+echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
Adicione a seguinte linha ao seu ~/.profile
:
export ASDF_DIR="/opt/asdf-vm"
+. /opt/asdf-vm/asdf.sh
O auto completar é colocado em um local familiar para o ZSH, mas o ZSH deve ser configurado para conseguir utilizá-lo. :::
Os scripts do asdf
precisam ser chamados depois de ter configurado a sua variável $PATH
e depois de ter chamado o seu framework para ZSH (oh-my-zsh etc).
Reinicie seu shell para que as mudanças na variável PATH
tenham efeito. Abrir uma nova janela/sessão de terminal o fará.
Para demonstração, vamos instalar e configurar o Node.js através do plugin asdf-nodejs
.
Cada plugin possui algumas dependências, por isso precisamos checar no repositório onde elas estão listadas. Por exemplo, para o asdf-nodejs
são:
SO | Instalação de dependencia |
---|---|
Linux (Debian) | apt-get install dirmngr gpg curl gawk |
macOS | brew install gpg gawk |
Devemos instalar instalar as dependências primeiro, pois alguns plugins exigem algumas ações após a instalação.
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
Agora temos o plugin para o Node.js, nós podemos instalar uma versão desta ferramenta.
Podemos ver quais versões tão disponíveis através do comando asdf list all nodejs
, ou uma lista específica de versões com asdf list all nodejs 14
Vamos instalar somente a última versão disponível, utilizando a tag latest
:
asdf install nodejs latest
Nota
asdf
exige versões exatas. A palavra latest
resulta na instalação da versão atual na data da execução.
asdf
executa uma verificação das versões das ferramentas a serem utilizadas através do arquivo .tool-versions
presente desde diretório atual, até o diretório $HOME
. A varredura ocorre no momento em que você executa uma ferramenta que o asdf gerencia.
WARNING
Se uma versão não for especificada para uma ferramenta, ao executá-la resultará em erro. asdf current
mostrará a ferramenta e sua versão, ou então a falta dela no seu diretório atual para que você possa observar quais ferramentas falharão ao serem executadas.
Os padrões globais são gerenciados em $HOME/.tool-versions
. Defina uma versão global através do comando:
asdf global nodejs latest
$HOME/.tool-versions
ficará assim:
nodejs 16.5.0
Alguns sistemas operacionais vêm por padrão com ferramentas que são gerenciadas pelo próprio sistema e não pelo asdf
, python
é um exemplo. Você precisa indicar para o asdf
para devolver o gerenciamento para o sistema. A seção de referência de versões irá guiá-lo.
Versões locais são definidas no arquivo $PWD/.tool-versions
(seu diretório atual). Geralmente, será um repositório Git para um projeto. Quando estiver no diretório desejado, execute:
asdf local nodejs latest
$PWD/.tool-versions
ficará assim:
nodejs 16.5.0
asdf
suporta a migração de arquivos de versão provenientes de outros gerenciadores de versão. Por exemplo: .ruby-version
para o rbenv
. Essa funcionalidade é baseada no plugin de cada ferramenta.
O asdf-nodejs
suporta tanto arquivos .nvmrc
quanto .node-version
. Para ativar essa funcionalidade, adicione a seguinte linha ao seu arquivo de configuração do asdf
- $HOME/.asdfrc
:
legacy_version_file = yes
Veja a página de refencia da configuração para mais opções de configuração.
A configuração inicial do asdf
foi finalizada 🎉. Agora, você pode gerenciar versões do nodejs
para o seus projetos. Siga passos semelhantes para cada ferramenta do seu projeto.
O asdf
possui diversos outros comandos para se acustomar ainda, você pode ver todos eles através do comando asdf --help
ou simplesmente asdf
. Eles estão divididos em três categorias:
Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
O asdf
é um gerenciador de versões. Todas as definições de versão das ferramentas estão contidas no arquivo (.tool-versions
), o qual você pode compartilhar com o seu time no repositório Git de um projeto e garantir que todos estejam usando exatamente a mesma versão das ferramentas.
A maneira antiga de trabalhar necessitava diversos gerenciadores de versão, cada um deles com uma documentação, arquivos de configuração diferentes (manipulação do $PATH
, shims e variáveis de ambiente, por exemplo). O asdf
provê um único arquivo de configuração e uma única interface para simplificar o fluxo de desenvolvimento, podendo ser ampliado para todas as ferramentas através de um simples plugin.
Após instalar e configurar o asdf
no seu shell, plugins podem ser instalados para gerenciar determinadas ferramentas. Quando uma ferramenta é instalada por um plugin, os executáveis que foram instalados possuem shims criados para cada um deles. Quando você roda algum destes executáveis, o shim é executado, permitindo que o asdf
identifique qual versão da ferramenta está configurada no arquivo .tool-versions
e execute esta versão.
Ferramentas como o nvm, n e rbenv são escritas em shell scripts que criam shims para os executáveis instalados para essas ferramentas.
O asdf
é bem similar e foi criado para competir neste meio de ferramentas de gerenciamento de versão. O grande diferencial do asdf
é que seu sistema de plugins elimina a necessidade de um gerenciador de versões para cada ferramenta, esta com diferentes comandos e arquivos de configuração.
Aumenta os shells existentes com a possibilidade de utilizar diferentes variáveis de ambiente com base no diretório atual.
O asdf
não gerencia variáveis de ambiente, entretanto existe o plugin asdf-direnv
para integrar o comportamento do direnv ao asdf.
Veja a documentação do direnv para mais detalhes.
O gerenciador de pacotes faltante para o macOS (ou Linux)
O Homebrew gerencia seus pacotes e dependências destes pacotes. O asdf
não gerencia dependencias, não é um gerenciador de pacotes, a escolha do gerenciador de pacotes é reservada ao usuário.
Veja a documentação do Homebrew para mais detalhes.
O Nix é uma ferramenta que relaciona o gerenciamento de pacotes e as configurações de sistema.
O NixOS visa construir ambientes verdadeiramente replicáveis através da gerência das versões exatas dos pacotes e dependências de cada ferramenta, algo que o asdf
não faz. O NixOS faz isso através da sua própria linguagem de programação, muitas ferramentas da linha de comando e uma coleção de pacotes contendo mais de 60,000 destes.
Novamente, o asdf
não gerencia dependências/pacotes e não é um gerenciador de pacotes.
Veja a documentação do NixOS para mais detalhes.
O asdf
garante que equipes utilizem exatamente a mesma versão de alguma ferramenta, com suporte para diversas delas através do sistema de plugins e a simplicidade e familiaridade de ser um único shell script que você inclui na configuração do seu shell
Nota
O asdf
não foi feito para ser o gerenciador de pacotes do seu sistema, mas sim uma ferramenta para gerenciar versões de outras ferramentas. Não é por que é possível criar um plugin para qualquer ferramenta/linguagem com o asdf
que esta sempre será a solução mais adequada.
Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
O asdf
é um gerenciador de versões. Todas as definições de versão das ferramentas estão contidas no arquivo (.tool-versions
), o qual você pode compartilhar com o seu time no repositório Git de um projeto e garantir que todos estejam usando exatamente a mesma versão das ferramentas.
A maneira antiga de trabalhar necessitava diversos gerenciadores de versão, cada um deles com uma documentação, arquivos de configuração diferentes (manipulação do $PATH
, shims e variáveis de ambiente, por exemplo). O asdf
provê um único arquivo de configuração e uma única interface para simplificar o fluxo de desenvolvimento, podendo ser ampliado para todas as ferramentas através de um simples plugin.
Após instalar e configurar o asdf
no seu shell, plugins podem ser instalados para gerenciar determinadas ferramentas. Quando uma ferramenta é instalada por um plugin, os executáveis que foram instalados possuem shims criados para cada um deles. Quando você roda algum destes executáveis, o shim é executado, permitindo que o asdf
identifique qual versão da ferramenta está configurada no arquivo .tool-versions
e execute esta versão.
Ferramentas como o nvm, n e rbenv são escritas em shell scripts que criam shims para os executáveis instalados para essas ferramentas.
O asdf
é bem similar e foi criado para competir neste meio de ferramentas de gerenciamento de versão. O grande diferencial do asdf
é que seu sistema de plugins elimina a necessidade de um gerenciador de versões para cada ferramenta, esta com diferentes comandos e arquivos de configuração.
Aumenta os shells existentes com a possibilidade de utilizar diferentes variáveis de ambiente com base no diretório atual.
O asdf
não gerencia variáveis de ambiente, entretanto existe o plugin asdf-direnv
para integrar o comportamento do direnv ao asdf.
Veja a documentação do direnv para mais detalhes.
O gerenciador de pacotes faltante para o macOS (ou Linux)
O Homebrew gerencia seus pacotes e dependências destes pacotes. O asdf
não gerencia dependencias, não é um gerenciador de pacotes, a escolha do gerenciador de pacotes é reservada ao usuário.
Veja a documentação do Homebrew para mais detalhes.
O Nix é uma ferramenta que relaciona o gerenciamento de pacotes e as configurações de sistema.
O NixOS visa construir ambientes verdadeiramente replicáveis através da gerência das versões exatas dos pacotes e dependências de cada ferramenta, algo que o asdf
não faz. O NixOS faz isso através da sua própria linguagem de programação, muitas ferramentas da linha de comando e uma coleção de pacotes contendo mais de 60,000 destes.
Novamente, o asdf
não gerencia dependências/pacotes e não é um gerenciador de pacotes.
Veja a documentação do NixOS para mais detalhes.
O asdf
garante que equipes utilizem exatamente a mesma versão de alguma ferramenta, com suporte para diversas delas através do sistema de plugins e a simplicidade e familiaridade de ser um único shell script que você inclui na configuração do seu shell
Nota
O asdf
não foi feito para ser o gerenciador de pacotes do seu sistema, mas sim uma ferramenta para gerenciar versões de outras ferramentas. Não é por que é possível criar um plugin para qualquer ferramenta/linguagem com o asdf
que esta sempre será a solução mais adequada.
Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
A lista de todos os comandos disponíveis em asdf
. Esta lista é o texto do comando asdf help
.
MANAGE PLUGINS
+asdf plugin add <name> [<git-url>] Add a plugin from the plugin repo OR,
+ add a Git repo as a plugin by
+ specifying the name and repo url
+asdf plugin list [--urls] [--refs] List installed plugins. Optionally show
+ git urls and git-ref
+asdf plugin list all List plugins registered on asdf-plugins
+ repository with URLs
+asdf plugin remove <name> Remove plugin and package versions
+asdf plugin update <name> [<git-ref>] Update a plugin to latest commit on
+ default branch or a particular git-ref
+asdf plugin update --all Update all plugins to latest commit on
+ default branch
+
+
+MANAGE PACKAGES
+asdf current Display current version set or being
+ used for all packages
+asdf current <name> Display current version set or being
+ used for package
+asdf global <name> <version> Set the package global version
+asdf global <name> latest[:<version>] Set the package global version to the
+ latest provided version
+asdf help <name> [<version>] Output documentation for plugin and tool
+asdf install Install all the package versions listed
+ in the .tool-versions file
+asdf install <name> Install one tool at the version
+ specified in the .tool-versions file
+asdf install <name> <version> Install a specific version of a package
+asdf install <name> latest[:<version>] Install the latest stable version of a
+ package, or with optional version,
+ install the latest stable version that
+ begins with the given string
+asdf latest <name> [<version>] Show latest stable version of a package
+asdf latest --all Show latest stable version of all the
+ packages and if they are installed
+asdf list <name> [version] List installed versions of a package and
+ optionally filter the versions
+asdf list all <name> [<version>] List all versions of a package and
+ optionally filter the returned versions
+asdf local <name> <version> Set the package local version
+asdf local <name> latest[:<version>] Set the package local version to the
+ latest provided version
+asdf shell <name> <version> Set the package version to
+ \`ASDF_\${LANG}_VERSION\` in the current shell
+asdf uninstall <name> <version> Remove a specific version of a package
+asdf where <name> [<version>] Display install path for an installed
+ or current version
+asdf which <command> Display the path to an executable
+
+
+UTILS
+asdf exec <command> [args...] Executes the command shim for current version
+asdf env <command> [util] Runs util (default: \`env\`) inside the
+ environment used for command shim execution.
+asdf info Print OS, Shell and ASDF debug information.
+asdf version Print the currently installed version of ASDF
+asdf reshim <name> <version> Recreate shims for version of a package
+asdf shim-versions <command> List the plugins and versions that
+ provide a command
+asdf update Update asdf to the latest stable release
+asdf update --head Update asdf to the latest on the master branch
+
+RESOURCES
+GitHub: https://github.com/asdf-vm/asdf
+Docs: https://asdf-vm.com
Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
A lista de todos os comandos disponíveis em asdf
. Esta lista é o texto do comando asdf help
.
MANAGE PLUGINS
+asdf plugin add <name> [<git-url>] Add a plugin from the plugin repo OR,
+ add a Git repo as a plugin by
+ specifying the name and repo url
+asdf plugin list [--urls] [--refs] List installed plugins. Optionally show
+ git urls and git-ref
+asdf plugin list all List plugins registered on asdf-plugins
+ repository with URLs
+asdf plugin remove <name> Remove plugin and package versions
+asdf plugin update <name> [<git-ref>] Update a plugin to latest commit on
+ default branch or a particular git-ref
+asdf plugin update --all Update all plugins to latest commit on
+ default branch
+
+
+MANAGE PACKAGES
+asdf current Display current version set or being
+ used for all packages
+asdf current <name> Display current version set or being
+ used for package
+asdf global <name> <version> Set the package global version
+asdf global <name> latest[:<version>] Set the package global version to the
+ latest provided version
+asdf help <name> [<version>] Output documentation for plugin and tool
+asdf install Install all the package versions listed
+ in the .tool-versions file
+asdf install <name> Install one tool at the version
+ specified in the .tool-versions file
+asdf install <name> <version> Install a specific version of a package
+asdf install <name> latest[:<version>] Install the latest stable version of a
+ package, or with optional version,
+ install the latest stable version that
+ begins with the given string
+asdf latest <name> [<version>] Show latest stable version of a package
+asdf latest --all Show latest stable version of all the
+ packages and if they are installed
+asdf list <name> [version] List installed versions of a package and
+ optionally filter the versions
+asdf list all <name> [<version>] List all versions of a package and
+ optionally filter the returned versions
+asdf local <name> <version> Set the package local version
+asdf local <name> latest[:<version>] Set the package local version to the
+ latest provided version
+asdf shell <name> <version> Set the package version to
+ \`ASDF_\${LANG}_VERSION\` in the current shell
+asdf uninstall <name> <version> Remove a specific version of a package
+asdf where <name> [<version>] Display install path for an installed
+ or current version
+asdf which <command> Display the path to an executable
+
+
+UTILS
+asdf exec <command> [args...] Executes the command shim for current version
+asdf env <command> [util] Runs util (default: \`env\`) inside the
+ environment used for command shim execution.
+asdf info Print OS, Shell and ASDF debug information.
+asdf version Print the currently installed version of ASDF
+asdf reshim <name> <version> Recreate shims for version of a package
+asdf shim-versions <command> List the plugins and versions that
+ provide a command
+asdf update Update asdf to the latest stable release
+asdf update --head Update asdf to the latest on the master branch
+
+RESOURCES
+GitHub: https://github.com/asdf-vm/asdf
+Docs: https://asdf-vm.com
Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
A configuração do asdf
abrange tanto os arquivos .tool-versions
compartilháveis quanto as personalizações específicas do usuário com .asdfrc
e variáveis de ambiente.
Sempre que o arquivo .tool-versions
estiver presente em um diretório, as versões da ferramenta que ele declara serão usadas nesse diretório e em seus subdiretórios.
Configurações globais podem ser modificadas no arquivo $HOME/.tool-versions
O arquivo .tool-versions
se parece assim:
ruby 2.5.3\nnodejs 10.15.0
As versões podem estar no seguinte formato:
10.15.0
- uma versão real. Os plugins que suportam o download de binários farão o download de binários.ref:v1.0.2-a
ou ref:39cb398vb39
- tag/commit/branch para download pelo github e compilação um path costumizado e compipath:~/src/elixir
- um path para uma versão compilada e personalizada de uma ferramenta pronta para usar. Para uso por linguagens de desenvolvimento e outros.system
- faz com que asdf passe para a versão da ferramenta no sistema que não é gerenciada por asdf .Várias versões podem ser definidas, separando-as com um espaço. Por exemplo, para usar Python 3.7.2, e também Python 2.7.15, use a linha abaixo em seu arquivo .tool-versions
.
python 3.7.2 2.7.15 system
Para instalar todas as ferramentas definidas em .tool-versions
, execute o camando asdf install
sem argumentos no mesmo diretório de .tool-versions
.
Para isntalar somente uma ferramenta definida em .tool-versions
, execute o camando asdf install
sem argumentos no mesmo diretório de .tool-versions
. A ferramenta será instalada na versão especificada no arquivo .tool-versions
.
Edite o arquivo diretamente no diretório ou use asdf local
(ou asdf global
) para atualiza-lo.
$HOME/.asdfrc
Adicione um arquivo .asdfrc
ao seu diretório home e asdf usará as configurações especificadas no arquivo. O arquivo deve ser formatado assim:
legacy_version_file = yes
Configurações
legacy_version_file
- por padrão é no
. Se definido como yes
, fará com que os plug-ins que suportam esse recurso leiam os arquivos de versão usados por outros gerenciadores de versão (por exemplo, .ruby-version
no caso do rbenv
do Ruby).
use_release_candidates
- por padrão é no
. Se definido como yes
, fará com que o comando asdf update
atualize para o mais recente em vez da versão semântica mais recente.
always_keep_download
- por padrão é no
. Se definido como yes
, fará com que o asdf install
sempre mantenha o código-fonte ou binário baixado. Se definido como no
, o código fonte ou binário baixado por asdf install
será excluído após a instalação bem sucedida.
plugin_repository_last_check_duration
- por padrão é 60
min (1 hrs). Ele define a duração da última verificação do repositório de plugins asdf. Quando o comando asdf plugin add <nome>
, asdf plugin list all
for executado, ele verificará a duração da última atualização para atualizar o repositório. Se definido como 0
, ele atualizará o repositório de plugins asdf todas as vezes.
ASDF_CONFIG_FILE
- O padrão é ~ /.asdfrc
conforme descrito acima. Pode ser definido para qualquer local.ASDF_DEFAULT_TOOL_VERSIONS_FILENAME
- O nome do arquivo que armazena os nomes e versões das ferramentas. O padrão é .tool-versions
. Pode ser qualquer nome de arquivo válido. Normalmente você não deve substituir o valor padrão, a menos que deseja que o asdf ignore os arquivos .tool-versions
.ASDF_DIR
- O padrão é ~/.asdf
- Localização dos arquivos asdf
. Se você instalar asdf
em algum outro diretório, defina-o para esse diretório. Por exemplo, se você estiver instalando através do AUR, você deve definir isso para /opt/asdf-vm
.ASDF_DATA_DIR
- O padrão é ~/.asdf
- Local onde asdf
instala plugins, correções e instalações. Pode ser definido para qualquer local antes de fornecer asdf.sh
ou asdf.fish
mencionado na seção acima. Para Elvish, isso pode ser definido acima de use asdf
.Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
A configuração do asdf
abrange tanto os arquivos .tool-versions
compartilháveis quanto as personalizações específicas do usuário com .asdfrc
e variáveis de ambiente.
Sempre que o arquivo .tool-versions
estiver presente em um diretório, as versões da ferramenta que ele declara serão usadas nesse diretório e em seus subdiretórios.
Configurações globais podem ser modificadas no arquivo $HOME/.tool-versions
O arquivo .tool-versions
se parece assim:
ruby 2.5.3\nnodejs 10.15.0
As versões podem estar no seguinte formato:
10.15.0
- uma versão real. Os plugins que suportam o download de binários farão o download de binários.ref:v1.0.2-a
ou ref:39cb398vb39
- tag/commit/branch para download pelo github e compilação um path costumizado e compipath:~/src/elixir
- um path para uma versão compilada e personalizada de uma ferramenta pronta para usar. Para uso por linguagens de desenvolvimento e outros.system
- faz com que asdf passe para a versão da ferramenta no sistema que não é gerenciada por asdf .Várias versões podem ser definidas, separando-as com um espaço. Por exemplo, para usar Python 3.7.2, e também Python 2.7.15, use a linha abaixo em seu arquivo .tool-versions
.
python 3.7.2 2.7.15 system
Para instalar todas as ferramentas definidas em .tool-versions
, execute o camando asdf install
sem argumentos no mesmo diretório de .tool-versions
.
Para isntalar somente uma ferramenta definida em .tool-versions
, execute o camando asdf install
sem argumentos no mesmo diretório de .tool-versions
. A ferramenta será instalada na versão especificada no arquivo .tool-versions
.
Edite o arquivo diretamente no diretório ou use asdf local
(ou asdf global
) para atualiza-lo.
$HOME/.asdfrc
Adicione um arquivo .asdfrc
ao seu diretório home e asdf usará as configurações especificadas no arquivo. O arquivo deve ser formatado assim:
legacy_version_file = yes
Configurações
legacy_version_file
- por padrão é no
. Se definido como yes
, fará com que os plug-ins que suportam esse recurso leiam os arquivos de versão usados por outros gerenciadores de versão (por exemplo, .ruby-version
no caso do rbenv
do Ruby).
use_release_candidates
- por padrão é no
. Se definido como yes
, fará com que o comando asdf update
atualize para o mais recente em vez da versão semântica mais recente.
always_keep_download
- por padrão é no
. Se definido como yes
, fará com que o asdf install
sempre mantenha o código-fonte ou binário baixado. Se definido como no
, o código fonte ou binário baixado por asdf install
será excluído após a instalação bem sucedida.
plugin_repository_last_check_duration
- por padrão é 60
min (1 hrs). Ele define a duração da última verificação do repositório de plugins asdf. Quando o comando asdf plugin add <nome>
, asdf plugin list all
for executado, ele verificará a duração da última atualização para atualizar o repositório. Se definido como 0
, ele atualizará o repositório de plugins asdf todas as vezes.
ASDF_CONFIG_FILE
- O padrão é ~ /.asdfrc
conforme descrito acima. Pode ser definido para qualquer local.ASDF_DEFAULT_TOOL_VERSIONS_FILENAME
- O nome do arquivo que armazena os nomes e versões das ferramentas. O padrão é .tool-versions
. Pode ser qualquer nome de arquivo válido. Normalmente você não deve substituir o valor padrão, a menos que deseja que o asdf ignore os arquivos .tool-versions
.ASDF_DIR
- O padrão é ~/.asdf
- Localização dos arquivos asdf
. Se você instalar asdf
em algum outro diretório, defina-o para esse diretório. Por exemplo, se você estiver instalando através do AUR, você deve definir isso para /opt/asdf-vm
.ASDF_DATA_DIR
- O padrão é ~/.asdf
- Local onde asdf
instala plugins, correções e instalações. Pode ser definido para qualquer local antes de fornecer asdf.sh
ou asdf.fish
mencionado na seção acima. Para Elvish, isso pode ser definido acima de use asdf
.Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
A lista de comandos do núcleo asdf
é bastante pequena, mas pode facilitar muitos fluxos de trabalho.
Baseado no Guia de Introdução.
asdf exec <command> [args...]
Executa o comando shim para a versão atual
asdf env <command> [util]
asdf info
Um comando auxiliar para imprimir as informações de depuração do SO, Shell e asdf
. Compartilhe isso ao fazer um relatório de bug.
asdf reshim <name> <version>
Isso recria os shims para a versão atual de um pacote. Por padrão, os calços são criados por plugins durante a instalação de uma ferramenta. Algumas ferramentas como a npm CLI permitem a instalação global de executáveis, por exemplo, instalando Yarn via npm install -g fio
. Como este executável não foi instalado por meio do ciclo de vida do plug-in, ainda não existe shim para ele. asdf reshim nodejs <version>
forçará o recálculo de shims para quaisquer novos executáveis, como yarn
, para <version>
de nodejs
.
asdf shim-versions <command>
Lista os plugins e versões que fornecem shims para um comando.
Como exemplo, o Node.js vem com dois executáveis, node
e npm
. Quando muitas versões das ferramentas são instaladas com asdf-nodejs
shim-versions
pode retornar:
➜ asdf shim-versions node
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
➜ asdf shim-versions npm
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
asdf
tem um comando embutido para atualização que depende do Git (nosso método de instalação recomendado). Se você instalou usando um método diferente, siga as etapas para esse método:
Method | Latest Stable Release | Latest commit on master |
---|---|---|
asdf (via Git) | asdf update | asdf update --head |
Homebrew | brew upgrade asdf | brew upgrade asdf --fetch-HEAD |
Pacman | Obter manualmente um novo PKGBUILD e reconstruir ou usar suas preferências de AUR. |
Para desinstalar asdf
siga os passos:
~/.bashrc
remova as linhas do asdf.sh
e seus complementos:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bash_profile
remova as linhas do asdf.sh
e remova seus complementos:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
remova as linhas do asdf.sh
e remova seus complementos:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
?> Os complementos precisam instruções de configuração do Homebrew e siga o guia de remoção.
brew uninstall asdf --force
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
Caso esteja usando macOs Catalina ou mais recente, por padrão o shell é ZSH. Se não achar alguma configuração em seu ~/.bash_profile
talvez esteja em ~/.zshrc
em cada caso siga as intruções do ZSH.
~/.bash_profile
remova as linhas do asdf.sh
e remova seus complementos:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
?> Os complementos precisam instruções de configuração do Homebrew e siga o guia de remoção.
brew uninstall asdf --force
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
remova as linhas do asdf.sh
e seus complementos:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
remova as linhas do asdf.sh
:source ~/.asdf/asdf.fish
e remova os complementos de com esse comando:
rm -rf ~/.config/fish/completions/asdf.fish
$HOME/.asdf
:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
remova as linhas do asdf.fish
:source "(brew --prefix asdf)"/libexec/asdf.fish
brew uninstall asdf --force
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
remova as linhas do asdf.fish
:source /opt/asdf-vm/asdf.fish
pacman -Rs asdf-vm
$HOME/.asdf
:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
remova as linhas que importa o módulo asdf
:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
e desinstale o módulo asdf
com este comando:
rm -f ~/.config/elvish/lib/asdf.elv
$HOME/.asdf
:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
remova as linhas que importa o módulo asdf
:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
e desinstale o módulo asdf
com este comando:
rm -f ~/.config/elvish/lib/asdf.elv
brew uninstall asdf --force
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
remova as linhas que importa o módulo asdf
:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
e desinstale o módulo asdf
com este comando:
rm -f ~/.config/elvish/lib/asdf.elv
pacman -Rs asdf-vm
$ HOME/.asdf
:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
remova as linhas do asdf.sh
e seus complementos:. "$HOME/.asdf/asdf.sh"
+# ...
+fpath=(\${ASDF_DIR}/completions $fpath)
+autoload -Uz compinit
+compinit
Ou use ZSH Framework plugin.
$HOME/.asdf
:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
remova as linhas do asdf.sh
:. $(brew --prefix asdf)/libexec/asdf.sh
brew uninstall asdf --force
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
remova as linhas do asdf.sh
:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
Tudo pronto! 🎉
`,42)]))}const g=i(l,[["render",h]]);export{c as __pageData,g as default}; diff --git a/assets/pt-br_manage_core.md.Zj8lFw0P.lean.js b/assets/pt-br_manage_core.md.Zj8lFw0P.lean.js new file mode 100644 index 00000000..0dfdecea --- /dev/null +++ b/assets/pt-br_manage_core.md.Zj8lFw0P.lean.js @@ -0,0 +1,18 @@ +import{_ as i,c as a,a2 as e,o as t}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"Core","description":"","frontmatter":{},"headers":[],"relativePath":"pt-br/manage/core.md","filePath":"pt-br/manage/core.md","lastUpdated":1687069487000}'),l={name:"pt-br/manage/core.md"};function h(n,s,p,d,k,o){return t(),a("div",null,s[0]||(s[0]=[e(`Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
A lista de comandos do núcleo asdf
é bastante pequena, mas pode facilitar muitos fluxos de trabalho.
Baseado no Guia de Introdução.
asdf exec <command> [args...]
Executa o comando shim para a versão atual
asdf env <command> [util]
asdf info
Um comando auxiliar para imprimir as informações de depuração do SO, Shell e asdf
. Compartilhe isso ao fazer um relatório de bug.
asdf reshim <name> <version>
Isso recria os shims para a versão atual de um pacote. Por padrão, os calços são criados por plugins durante a instalação de uma ferramenta. Algumas ferramentas como a npm CLI permitem a instalação global de executáveis, por exemplo, instalando Yarn via npm install -g fio
. Como este executável não foi instalado por meio do ciclo de vida do plug-in, ainda não existe shim para ele. asdf reshim nodejs <version>
forçará o recálculo de shims para quaisquer novos executáveis, como yarn
, para <version>
de nodejs
.
asdf shim-versions <command>
Lista os plugins e versões que fornecem shims para um comando.
Como exemplo, o Node.js vem com dois executáveis, node
e npm
. Quando muitas versões das ferramentas são instaladas com asdf-nodejs
shim-versions
pode retornar:
➜ asdf shim-versions node
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
➜ asdf shim-versions npm
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
asdf
tem um comando embutido para atualização que depende do Git (nosso método de instalação recomendado). Se você instalou usando um método diferente, siga as etapas para esse método:
Method | Latest Stable Release | Latest commit on master |
---|---|---|
asdf (via Git) | asdf update | asdf update --head |
Homebrew | brew upgrade asdf | brew upgrade asdf --fetch-HEAD |
Pacman | Obter manualmente um novo PKGBUILD e reconstruir ou usar suas preferências de AUR. |
Para desinstalar asdf
siga os passos:
~/.bashrc
remova as linhas do asdf.sh
e seus complementos:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bash_profile
remova as linhas do asdf.sh
e remova seus complementos:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
remova as linhas do asdf.sh
e remova seus complementos:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
?> Os complementos precisam instruções de configuração do Homebrew e siga o guia de remoção.
brew uninstall asdf --force
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
Caso esteja usando macOs Catalina ou mais recente, por padrão o shell é ZSH. Se não achar alguma configuração em seu ~/.bash_profile
talvez esteja em ~/.zshrc
em cada caso siga as intruções do ZSH.
~/.bash_profile
remova as linhas do asdf.sh
e remova seus complementos:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
?> Os complementos precisam instruções de configuração do Homebrew e siga o guia de remoção.
brew uninstall asdf --force
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
remova as linhas do asdf.sh
e seus complementos:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
remova as linhas do asdf.sh
:source ~/.asdf/asdf.fish
e remova os complementos de com esse comando:
rm -rf ~/.config/fish/completions/asdf.fish
$HOME/.asdf
:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
remova as linhas do asdf.fish
:source "(brew --prefix asdf)"/libexec/asdf.fish
brew uninstall asdf --force
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
remova as linhas do asdf.fish
:source /opt/asdf-vm/asdf.fish
pacman -Rs asdf-vm
$HOME/.asdf
:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
remova as linhas que importa o módulo asdf
:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
e desinstale o módulo asdf
com este comando:
rm -f ~/.config/elvish/lib/asdf.elv
$HOME/.asdf
:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
remova as linhas que importa o módulo asdf
:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
e desinstale o módulo asdf
com este comando:
rm -f ~/.config/elvish/lib/asdf.elv
brew uninstall asdf --force
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
remova as linhas que importa o módulo asdf
:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
e desinstale o módulo asdf
com este comando:
rm -f ~/.config/elvish/lib/asdf.elv
pacman -Rs asdf-vm
$ HOME/.asdf
:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
remova as linhas do asdf.sh
e seus complementos:. "$HOME/.asdf/asdf.sh"
+# ...
+fpath=(\${ASDF_DIR}/completions $fpath)
+autoload -Uz compinit
+compinit
Ou use ZSH Framework plugin.
$HOME/.asdf
:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
remova as linhas do asdf.sh
:. $(brew --prefix asdf)/libexec/asdf.sh
brew uninstall asdf --force
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
remova as linhas do asdf.sh
:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
Tudo pronto! 🎉
`,42)]))}const g=i(l,[["render",h]]);export{c as __pageData,g as default}; diff --git a/assets/pt-br_manage_plugins.md.2hxhV7Yu.js b/assets/pt-br_manage_plugins.md.2hxhV7Yu.js new file mode 100644 index 00000000..46adfdaf --- /dev/null +++ b/assets/pt-br_manage_plugins.md.2hxhV7Yu.js @@ -0,0 +1,11 @@ +import{_ as a,c as i,a2 as e,o as t}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"Plugins","description":"","frontmatter":{},"headers":[],"relativePath":"pt-br/manage/plugins.md","filePath":"pt-br/manage/plugins.md","lastUpdated":1687069487000}'),n={name:"pt-br/manage/plugins.md"};function l(p,s,o,d,h,r){return t(),i("div",null,s[0]||(s[0]=[e(`Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
Plugins são como asdf
sabe lidar com diferentes ferramentas, tais quais Node.js, Ruby, Elixir etc.
Veja Criando Plugins para a API do plugin usada para suportar mais ferramentas.
Adicione os plugins via sua Url Git:
asdf plugin add <name> <git-url>
+# asdf plugin add elm https://github.com/vic/asdf-elm
ou pelo nome abreviado dentro do repositório de plugins:
asdf plugin add <name>
+# asdf plugin add erlang
Recommendation
Prefira o método mais longo git-url
, pois ele é independente do repositório de nome abreviado.
asdf plugin list
+# asdf plugin list
+# java
+# nodejs
asdf plugin list --urls
+# asdf plugin list
+# java https://github.com/halcyon/asdf-java.git
+# nodejs https://github.com/asdf-vm/asdf-nodejs.git
asdf plugin list all
Veja Plugins Shortname Index para toda a lista de nomes curtos de plugins.
asdf plugin update --all
Se você quiser atualizar um pacote específico, apenas use.
asdf plugin update <name>
+# asdf plugin update erlang
Esta atualização irá buscar o último commit na branch padrão no origin de seu respositório. Plugins e atualizações das versões estão sendo desenvolvidas (#916)
asdf plugin remove <name>
+# asdf plugin remove erlang
Removendo o plugin irá remover todas as instalações feitas com o plugin. Isso pode ser usado como um atalho para apagar/remover sujeiras de versões não utilizadas de uma ferramenta.
O nome abreviado do repositório é sincronizado em seu máquina local e periodicamente atualizado. Esse período pode ser determinado com o seguinte método:
asdf plugin add <name>
ou asdf plugin list all
disparam a sincronizaçãoX
minutosX
por padrão é 60
, mas pode ser mudado em .asdfrc
via as opções do plugin_repository_last_check_duration
. Seja mais em asdf documentação de configuração.Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
Plugins são como asdf
sabe lidar com diferentes ferramentas, tais quais Node.js, Ruby, Elixir etc.
Veja Criando Plugins para a API do plugin usada para suportar mais ferramentas.
Adicione os plugins via sua Url Git:
asdf plugin add <name> <git-url>
+# asdf plugin add elm https://github.com/vic/asdf-elm
ou pelo nome abreviado dentro do repositório de plugins:
asdf plugin add <name>
+# asdf plugin add erlang
Recommendation
Prefira o método mais longo git-url
, pois ele é independente do repositório de nome abreviado.
asdf plugin list
+# asdf plugin list
+# java
+# nodejs
asdf plugin list --urls
+# asdf plugin list
+# java https://github.com/halcyon/asdf-java.git
+# nodejs https://github.com/asdf-vm/asdf-nodejs.git
asdf plugin list all
Veja Plugins Shortname Index para toda a lista de nomes curtos de plugins.
asdf plugin update --all
Se você quiser atualizar um pacote específico, apenas use.
asdf plugin update <name>
+# asdf plugin update erlang
Esta atualização irá buscar o último commit na branch padrão no origin de seu respositório. Plugins e atualizações das versões estão sendo desenvolvidas (#916)
asdf plugin remove <name>
+# asdf plugin remove erlang
Removendo o plugin irá remover todas as instalações feitas com o plugin. Isso pode ser usado como um atalho para apagar/remover sujeiras de versões não utilizadas de uma ferramenta.
O nome abreviado do repositório é sincronizado em seu máquina local e periodicamente atualizado. Esse período pode ser determinado com o seguinte método:
asdf plugin add <name>
ou asdf plugin list all
disparam a sincronizaçãoX
minutosX
por padrão é 60
, mas pode ser mudado em .asdfrc
via as opções do plugin_repository_last_check_duration
. Seja mais em asdf documentação de configuração.Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
asdf install <name> <version>
+# asdf install erlang 17.3
Se um plugin suporta o download e compilação do código-fonte, você pode especificar ref:foo
no qual foo
é uma 'branch' especifica, 'tag', ou 'commit'. Você também precisará usar o mesmo nome e referência ao desinstalar.
asdf install <name> latest
+# asdf install erlang latest
Instale a última versão estável que inicia com um texto.
asdf install <name> latest:<version>
+# asdf install erlang latest:17
asdf list <name>
+# asdf list erlang
Limite as versões que inicie com um determinado texto.
asdf list <name> <version>
+# asdf list erlang 17
asdf list all <name>
+# asdf list all erlang
Limite as versões que inicie com um determinado texto.
asdf list all <name> <version>
+# asdf list all erlang 17
asdf latest <name>
+# asdf latest erlang
Mostrar última versão estável que inicie com um determinado texto.
asdf latest <name> <version>
+# asdf latest erlang 17
asdf global <name> <version> [<version>...]
+asdf shell <name> <version> [<version>...]
+asdf local <name> <version> [<version>...]
+# asdf global elixir 1.2.4
+
+asdf global <name> latest[:<version>]
+asdf local <name> latest[:<version>]
+# asdf global elixir latest
global
escreve a versão para $HOME/.tool-versions
.
shell
selecione a versão na variável de ambiente ASDF_\${LANG}_VERSION
, para a atual seção do shell.
local
escreve a versão para $PWD/.tool-versions
, crie se necessário .
Veja em .tool-versions
arquivo de seleção de configuração para mais detalhes.
Alternativa
Se você quiser selecionar a versão atual do seu shell ou para executar um comando em uma versão específica de sua ferramenta, você pode selecionar a versão na variável de ambiente ASDF_\${TOOL}_VERSION
.
O seguinte exemplo executa os testes em um projeto Elixir na versão 1.4.0
. O formato da versão é o mesmo suportado pelo arquivo .tool-versions
.
ASDF_ELIXIR_VERSION=1.4.0 mix test
Para usar o sistema de versão da ferramenta <name>
inicie um gerenciador de versões do asdf para selecionar a versão na ferramenta do system
.
Selecione o sistema com global
, local
ou shell
Set system with either global
, local
or shell
conforme descrito em Selecionar versão atual.
asdf local <name> system
+# asdf local python system
asdf current
+# asdf current
+# erlang 17.3 (set by /Users/kim/.tool-versions)
+# nodejs 6.11.5 (set by /Users/kim/cool-node-project/.tool-versions)
+
+asdf current <name>
+# asdf current erlang
+# 17.3 (set by /Users/kim/.tool-versions)
asdf uninstall <name> <version>
+# asdf uninstall erlang 17.3
Quando asdf instala um pacote é criado shims para cada programa executado no pacote do diretório $ASDF_DATA_DIR/shims
(padrão ~/.asdf/shims
). Esse diretório começa no $PATH
(pelos asdf.sh
, asdf.fish
, etc) é como o programa instalado é disponibilizado no ambiente do sistema.
Os shims em si são atalhos simples que executam um programa auxiliar asdf exec
passando o nome do plugin e o caminho para o executável no pacote instalado que o shim está contido.
O asdf exec
ajuda a determinar a versão do pacote usado (como especificado no arquivo .tool-versions
, pelo asdf local ...
ou asdf global ...
), o final do path do executavél no pacote instalado no diretório (pode ser manipulado pelo exec-path
no callback do plugin) e o ambiente executado em (também fornecido pelo plugin - exec-env
) e finalmente executado.
Observação
Observe que, como este sistema usa chamadas exec
, qualquer scripts no pacote devem ser fornecidos pelo shell, a instancia em execução precisa ser aessado diretamente ao invés do shim. Os dois comandos do asdf: which
e where
pode ajudar com o retorno do caminho para o pacote instalado:
# retorna o 'path' da versão atual em execução
+source $(asdf which \${PLUGIN})/../script.sh
+
+# retorna o 'path' do pacote instalado no diretório
+source $(asdf where \${PLUGIN} $(asdf current \${PLUGIN}))/bin/script.sh
Se por algum motivo você deseja ignorar shims do asdf ou deseja que suas variáveis de ambiente sejam definidas automaticamente ao entrar no diretório do seu projeto, pode ser útil o asdf-direnv. Verifique o README para mais detalhes.
`,46)]))}const g=a(l,[["render",n]]);export{c as __pageData,g as default}; diff --git a/assets/pt-br_manage_versions.md.CSTMJus-.lean.js b/assets/pt-br_manage_versions.md.CSTMJus-.lean.js new file mode 100644 index 00000000..514d0dd4 --- /dev/null +++ b/assets/pt-br_manage_versions.md.CSTMJus-.lean.js @@ -0,0 +1,30 @@ +import{_ as a,c as i,a2 as e,o as t}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"Versões","description":"","frontmatter":{},"headers":[],"relativePath":"pt-br/manage/versions.md","filePath":"pt-br/manage/versions.md","lastUpdated":1687069487000}'),l={name:"pt-br/manage/versions.md"};function n(h,s,p,k,d,o){return t(),i("div",null,s[0]||(s[0]=[e(`Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
asdf install <name> <version>
+# asdf install erlang 17.3
Se um plugin suporta o download e compilação do código-fonte, você pode especificar ref:foo
no qual foo
é uma 'branch' especifica, 'tag', ou 'commit'. Você também precisará usar o mesmo nome e referência ao desinstalar.
asdf install <name> latest
+# asdf install erlang latest
Instale a última versão estável que inicia com um texto.
asdf install <name> latest:<version>
+# asdf install erlang latest:17
asdf list <name>
+# asdf list erlang
Limite as versões que inicie com um determinado texto.
asdf list <name> <version>
+# asdf list erlang 17
asdf list all <name>
+# asdf list all erlang
Limite as versões que inicie com um determinado texto.
asdf list all <name> <version>
+# asdf list all erlang 17
asdf latest <name>
+# asdf latest erlang
Mostrar última versão estável que inicie com um determinado texto.
asdf latest <name> <version>
+# asdf latest erlang 17
asdf global <name> <version> [<version>...]
+asdf shell <name> <version> [<version>...]
+asdf local <name> <version> [<version>...]
+# asdf global elixir 1.2.4
+
+asdf global <name> latest[:<version>]
+asdf local <name> latest[:<version>]
+# asdf global elixir latest
global
escreve a versão para $HOME/.tool-versions
.
shell
selecione a versão na variável de ambiente ASDF_\${LANG}_VERSION
, para a atual seção do shell.
local
escreve a versão para $PWD/.tool-versions
, crie se necessário .
Veja em .tool-versions
arquivo de seleção de configuração para mais detalhes.
Alternativa
Se você quiser selecionar a versão atual do seu shell ou para executar um comando em uma versão específica de sua ferramenta, você pode selecionar a versão na variável de ambiente ASDF_\${TOOL}_VERSION
.
O seguinte exemplo executa os testes em um projeto Elixir na versão 1.4.0
. O formato da versão é o mesmo suportado pelo arquivo .tool-versions
.
ASDF_ELIXIR_VERSION=1.4.0 mix test
Para usar o sistema de versão da ferramenta <name>
inicie um gerenciador de versões do asdf para selecionar a versão na ferramenta do system
.
Selecione o sistema com global
, local
ou shell
Set system with either global
, local
or shell
conforme descrito em Selecionar versão atual.
asdf local <name> system
+# asdf local python system
asdf current
+# asdf current
+# erlang 17.3 (set by /Users/kim/.tool-versions)
+# nodejs 6.11.5 (set by /Users/kim/cool-node-project/.tool-versions)
+
+asdf current <name>
+# asdf current erlang
+# 17.3 (set by /Users/kim/.tool-versions)
asdf uninstall <name> <version>
+# asdf uninstall erlang 17.3
Quando asdf instala um pacote é criado shims para cada programa executado no pacote do diretório $ASDF_DATA_DIR/shims
(padrão ~/.asdf/shims
). Esse diretório começa no $PATH
(pelos asdf.sh
, asdf.fish
, etc) é como o programa instalado é disponibilizado no ambiente do sistema.
Os shims em si são atalhos simples que executam um programa auxiliar asdf exec
passando o nome do plugin e o caminho para o executável no pacote instalado que o shim está contido.
O asdf exec
ajuda a determinar a versão do pacote usado (como especificado no arquivo .tool-versions
, pelo asdf local ...
ou asdf global ...
), o final do path do executavél no pacote instalado no diretório (pode ser manipulado pelo exec-path
no callback do plugin) e o ambiente executado em (também fornecido pelo plugin - exec-env
) e finalmente executado.
Observação
Observe que, como este sistema usa chamadas exec
, qualquer scripts no pacote devem ser fornecidos pelo shell, a instancia em execução precisa ser aessado diretamente ao invés do shim. Os dois comandos do asdf: which
e where
pode ajudar com o retorno do caminho para o pacote instalado:
# retorna o 'path' da versão atual em execução
+source $(asdf which \${PLUGIN})/../script.sh
+
+# retorna o 'path' do pacote instalado no diretório
+source $(asdf where \${PLUGIN} $(asdf current \${PLUGIN}))/bin/script.sh
Se por algum motivo você deseja ignorar shims do asdf ou deseja que suas variáveis de ambiente sejam definidas automaticamente ao entrar no diretório do seu projeto, pode ser útil o asdf-direnv. Verifique o README para mais detalhes.
`,46)]))}const g=a(l,[["render",n]]);export{c as __pageData,g as default}; diff --git a/assets/pt-br_more_community-projects.md.CHEVJOJv.js b/assets/pt-br_more_community-projects.md.CHEVJOJv.js new file mode 100644 index 00000000..feb14830 --- /dev/null +++ b/assets/pt-br_more_community-projects.md.CHEVJOJv.js @@ -0,0 +1 @@ +import{_ as t,c as o,a2 as r,o as a}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"Community Projects","description":"","frontmatter":{},"headers":[],"relativePath":"pt-br/more/community-projects.md","filePath":"pt-br/more/community-projects.md","lastUpdated":1687069487000}'),s={name:"pt-br/more/community-projects.md"};function c(n,e,i,m,d,l){return a(),o("div",null,e[0]||(e[0]=[r('Here are some community projects related to asdf
:
Note
asdf core do not own these projects or their code. asdf core are not responsible for the quality or security as they relate to those listed here.
Here are some community projects related to asdf
:
Note
asdf core do not own these projects or their code. asdf core are not responsible for the quality or security as they relate to those listed here.
Aqui estão algumas perguntas comuns sobre asdf
.
WSL1 (Windows Subsystem for Linux 1) não é oficialmente suportado. Alguns aspectos do asdf
podem não funcionar corretamente. Não temos a intenção de adicionar suporte oficial para WSL1.
WSL2 (Subsistema Windows para Linux 2) deve funcionar usando as instruções de configuração e dependência para a distribuição WSL escolhida.
É importante ressaltar que o WSL2 apenas deve funcionar corretamente quando o diretório de trabalho atual é uma unidade Unix e não uma unidade Windows vinculada.
Pretendemos executar o conjunto de testes no WSL2 quando o suporte ao host runner estiver disponível nas Ações do GitHub; atualmente, esse não parece ser o caso.
Acabei de instalar o
npm -g yarn
, mas não consigo executar oyarn
. O que da?
asdf
usa shims para gerenciar executáveis. Aqueles instalados por plug-ins têm shims criados automaticamente, enquanto a instalação de executáveis por meio de uma ferramenta gerenciada asdf
exigirá que você notifique oasdf
sobre a necessidade de criar shims. Neste caso, para criar um shim para Yarn. Veja a documentação do comando [asdf reshim
](/ manage / core.md # reshim).
Se asdf reshim
não está resolvendo seu problema, então é mais provável devido ao sourcing deasdf.sh
ou asdf.fish
não estar no ** BOTTOM ** de seu arquivo de configuração Shell (.bash_profile
, .zshrc
, config.fish
, etc). Ele precisa ser fornecido DEPOIS de você definir seu $PATH
e DEPOIS de ter fornecido seu framework (oh-meu-zsh etc), se houver.
Aqui estão algumas perguntas comuns sobre asdf
.
WSL1 (Windows Subsystem for Linux 1) não é oficialmente suportado. Alguns aspectos do asdf
podem não funcionar corretamente. Não temos a intenção de adicionar suporte oficial para WSL1.
WSL2 (Subsistema Windows para Linux 2) deve funcionar usando as instruções de configuração e dependência para a distribuição WSL escolhida.
É importante ressaltar que o WSL2 apenas deve funcionar corretamente quando o diretório de trabalho atual é uma unidade Unix e não uma unidade Windows vinculada.
Pretendemos executar o conjunto de testes no WSL2 quando o suporte ao host runner estiver disponível nas Ações do GitHub; atualmente, esse não parece ser o caso.
Acabei de instalar o
npm -g yarn
, mas não consigo executar oyarn
. O que da?
asdf
usa shims para gerenciar executáveis. Aqueles instalados por plug-ins têm shims criados automaticamente, enquanto a instalação de executáveis por meio de uma ferramenta gerenciada asdf
exigirá que você notifique oasdf
sobre a necessidade de criar shims. Neste caso, para criar um shim para Yarn. Veja a documentação do comando [asdf reshim
](/ manage / core.md # reshim).
Se asdf reshim
não está resolvendo seu problema, então é mais provável devido ao sourcing deasdf.sh
ou asdf.fish
não estar no ** BOTTOM ** de seu arquivo de configuração Shell (.bash_profile
, .zshrc
, config.fish
, etc). Ele precisa ser fornecido DEPOIS de você definir seu $PATH
e DEPOIS de ter fornecido seu framework (oh-meu-zsh etc), se houver.
Eu (@HashNuke), febre alta, resfriado e tosse.
Copyright 2014 até o final dos tempos (MIT License)
Veja em lista de contribuidores 🙏 no GitHub
',7)]))}const f=r(s,[["render",i]]);export{b as __pageData,f as default}; diff --git a/assets/pt-br_more_thanks.md.Bvo3xrmB.lean.js b/assets/pt-br_more_thanks.md.Bvo3xrmB.lean.js new file mode 100644 index 00000000..05a461ef --- /dev/null +++ b/assets/pt-br_more_thanks.md.Bvo3xrmB.lean.js @@ -0,0 +1 @@ +import{_ as r,c as t,a2 as a,o}from"./chunks/framework.BQmytedh.js";const b=JSON.parse('{"title":"Créditos","description":"","frontmatter":{},"headers":[],"relativePath":"pt-br/more/thanks.md","filePath":"pt-br/more/thanks.md","lastUpdated":1671778129000}'),s={name:"pt-br/more/thanks.md"};function i(n,e,h,l,d,u){return o(),t("div",null,e[0]||(e[0]=[a('Eu (@HashNuke), febre alta, resfriado e tosse.
Copyright 2014 até o final dos tempos (MIT License)
Veja em lista de contribuidores 🙏 no GitHub
',7)]))}const f=r(s,[["render",i]]);export{b as __pageData,f as default}; diff --git a/assets/pt-br_plugins_create.md.C5Tg4ylk.js b/assets/pt-br_plugins_create.md.C5Tg4ylk.js new file mode 100644 index 00000000..fa7868c4 --- /dev/null +++ b/assets/pt-br_plugins_create.md.C5Tg4ylk.js @@ -0,0 +1,35 @@ +import{_ as s,c as e,a2 as i,o}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"Criar um plug-in","description":"","frontmatter":{},"headers":[],"relativePath":"pt-br/plugins/create.md","filePath":"pt-br/plugins/create.md","lastUpdated":1704804447000}'),n={name:"pt-br/plugins/create.md"};function t(l,a,p,d,r,h){return o(),e("div",null,a[0]||(a[0]=[i(`Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
Um plugin é um repositório git, com alguns scripts executáveis, para dar suporte ao versionamento de outra linguagem ou ferramenta. Esses scripts são executados quando os comandos list-all
, install
ou uninstall
são executados. Você pode definir ou desmarcar env vars e fazer qualquer coisa necessária para configurar o ambiente para a ferramenta.
bin/list-all
- lista todas as versões instaláveisbin/download
- baixe o código fonte ou binário para a versão especificadabin/install
- instala a versão especificadaTodos os scripts, exceto bin/list-all
, terão acesso aos seguintes env vars para agir:
ASDF_INSTALL_TYPE
- version
ou ref
ASDF_INSTALL_VERSION
- se ASDF_INSTALL_TYPE
é version
então este será o número da versão. Caso contrário, será o git ref que será passado. Pode apontar para uma tag/commit/branch no repositório.ASDF_INSTALL_PATH
- o diretório onde foi instalado (ou deve ser instalado no caso do script bin/install
)Essas variáveis de ambiente adicionais estarão disponíveis para o script bin/install
:
ASDF_CONCURRENCY
- o número de núcleos a serem usados ao compilar o código-fonte. Útil para definir make -j
.ASDF_DOWNLOAD_PATH
- o caminho para onde o código fonte ou binário foi baixado pelo script bin/download
.Essas variáveis de ambiente adicionais estarão disponíveis para o script bin/download
:
ASDF_DOWNLOAD_PATH
- o caminho para onde o código-fonte ou binário deve ser baixado.Deve imprimir uma string com uma lista de versões separadas por espaço. A saída de exemplo seria a seguinte:
1.0.1 1.0.2 1.3.0 1.4
Observe que a versão mais recente deve ser listada por último para que apareça mais próxima do prompt do usuário. Isso é útil já que o comando list-all
imprime cada versão em sua própria linha. Se houver muitas versões, é possível que as primeiras versões fiquem fora da tela.
Se as versões estiverem sendo extraídas da página de lançamentos em um site, é recomendável não classificar as versões, se possível. Muitas vezes as versões já estão na ordem correta ou, na ordem inversa, nesse caso algo como tac
deve ser suficiente. Se você precisar classificar as versões manualmente, não poderá confiar em sort -V
, pois não é suportado no OSX. Uma função de classificação alternativa como esta é uma escolha melhor.
Este script deve baixar o código fonte ou binário, no caminho contido na variável de ambiente ASDF_DOWNLOAD_PATH
. Se o código-fonte ou binário baixado estiver compactado, apenas o código-fonte ou binário descompactado poderá ser colocado no diretório ASDF_DOWNLOAD_PATH
.
O script deve sair com um status de 0
quando o download for bem-sucedido. Se o download falhar, o script deve sair com qualquer status de saída diferente de zero.
Se possível, o script deve apenas colocar arquivos no ASDF_DOWNLOAD_PATH
. Se o download falhar, nenhum arquivo deve ser colocado no diretório.
Se este script não estiver presente, o asdf assumirá que o script bin/install
está presente e fará o download e instalará a versão. asdf só funciona sem este script para suportar plugins legados. Todos os plugins devem incluir este script e, eventualmente, o suporte para plugins legados será removido.
Este script deve instalar a versão, no caminho mencionado em ASDF_INSTALL_PATH
. Por padrão, o asdf criará shims para qualquer arquivo em $ASDF_INSTALL_PATH/bin
(isso pode ser personalizado com o script opcional bin/list-bin-paths).
O script de instalação deve sair com um status de 0
quando a instalação for bem-sucedida. Se a instalação falhar, o script deve sair com qualquer status de saída diferente de zero.
Se possível, o script deve apenas colocar os arquivos no diretório ASDF_INSTALL_PATH
uma vez que a compilação e instalação da ferramenta são consideradas bem sucedidas pelo script de instalação. asdf verifica a existência do diretório ASDF_INSTALL_PATH
para determinar se essa versão da ferramenta está instalado. Se o diretório ASDF_INSTALL_PATH
for preenchido no início do processo de instalação, outros comandos asdf executados em outros terminais durante a instalação podem considerar essa versão da ferramenta instalada, mesmo quando não estiver totalmente instalada.
Se você quiser que seu plugin funcione com asdf versão 0.7._ e anterior e versão 0.8._ e mais recente, verifique a presença da variável de ambiente ASDF_DOWNLOAD_PATH
. Se não estiver definido, baixe o código-fonte no retorno de chamada bin/install. Se estiver definido, suponha que o script bin/download
já tenha baixado.
Este não é um script de retorno de chamada, mas sim um conjunto de scripts de retorno de chamada que imprimem documentação diferente para STDOUT. Os scripts de retorno de chamada possíveis estão listados abaixo. Observe que bin/help.overview
é um caso especial, pois deve estar presente para que qualquer saída de ajuda seja exibida para o script.
bin/help.overview
- Este script deve gerar uma descrição geral sobre o plugin e a ferramenta que está sendo gerenciada. Nenhum título deve ser impresso, pois o asdf imprimirá títulos. A saída pode ser um texto de formato livre, mas idealmente apenas um parágrafo curto. Este script deve estar presente se você quiser que o asdf forneça informações de ajuda para seu plugin. Todos os outros scripts de retorno de chamada de ajuda são opcionais.bin/help.deps
- Esse script deve gerar a lista de dependências adaptadas ao sistema operacional. Uma dependência por linha.bin/help.config
- Este script deve imprimir qualquer configuração obrigatória ou opcional que possa estar disponível para o plug-in e a ferramenta. Quaisquer variáveis de ambiente ou outros sinalizadores necessários para instalar ou compilar a ferramenta (para o sistema operacional dos usuários quando possível). A saída pode ser texto de formato livre.bin/help.links
- Esta deve ser uma lista de links relevantes para o plug-in e a ferramenta (mais uma vez, adaptados ao sistema operacional atual, quando possível). Um link por linha. As linhas podem estar no formato <title>: <link>
ou apenas <link>
.Cada um desses scripts deve adaptar sua saída ao sistema operacional atual. Por exemplo, quando no Ubuntu, o script deps pode gerar as dependências como pacotes apt-get que devem ser instalados. O script também deve adaptar sua saída ao valor de ASDF_INSTALL_VERSION
e ASDF_INSTALL_TYPE
quando as variáveis forem definidas. Eles são opcionais e nem sempre serão definidos.
O script de retorno de chamada de ajuda NÃO DEVE gerar nenhuma informação que já esteja coberta na documentação principal do asdf-vm. As informações gerais de uso do asdf não devem estar presentes.
Liste os executáveis para a versão especificada da ferramenta. Deve imprimir uma string com uma lista separada por espaços de caminhos de diretórios que contêm executáveis. Os caminhos devem ser relativos ao caminho de instalação passado. A saída de exemplo seria:
bin tools veggies
Isso instruirá o asdf a criar shims para os arquivos em <install-path>/bin
, <install-path>/tools
e <install-path>/veggies
Se este script não for especificado, o asdf procurará o diretório bin
em uma instalação e criará shims para eles.
Configure o env para executar os binários no pacote.
Obtenha o caminho executável para a versão especificada da ferramenta. Deve imprimir uma string com o caminho executável relativo. Isso permite que o plug-in substitua condicionalmente o caminho executável especificado do shim, caso contrário, retorne o caminho padrão especificado pelo shim.
Usage:
+ plugin/bin/exec-path <install-path> <command> <executable-path>
+
+Example Call:
+ ~/.asdf/plugins/foo/bin/exec-path "~/.asdf/installs/foo/1.0" "foo" "bin/foo"
+
+Output:
+ bin/foox
Desinstala uma versão específica de uma ferramenta.
Registre arquivos setter adicionais para este plugin. Deve imprimir uma string com uma lista de nomes de arquivos separados por espaços.
.ruby-version .rvmrc
Nota: Isso só se aplica a usuários que habilitaram a opção legacy_version_file
em seu ~/.asdfrc
.
Isso pode ser usado para analisar ainda mais o arquivo legado encontrado pelo asdf. Se o parse-legacy-file
não for implementado, o asdf simplesmente irá cat o arquivo para determinar a versão. O script receberá o caminho do arquivo como seu primeiro argumento.
Isso pode ser usado para executar qualquer ação pós-instalação depois que o plug-in for adicionado ao asdf.
O script tem acesso ao caminho em que o plugin foi instalado (\${ASDF_PLUGIN_PATH}
) e o URL de origem (\${ASDF_PLUGIN_SOURCE_URL}
), se algum foi usado.
Veja também os ganchos relacionados:
pre_asdf_plugin_add
pre_asdf_plugin_add_\${plugin_name}
post_asdf_plugin_add
post_asdf_plugin_add_\${plugin_name}
Isso pode ser usado para executar qualquer ação de pré-remoção antes que o plug-in seja removido do asdf.
O script tem acesso ao caminho em que o plugin foi instalado (\${ASDF_PLUGIN_PATH}
).
Veja também os ganchos relacionados:
pre_asdf_plugin_remove
pre_asdf_plugin_remove_\${plugin_name}
post_asdf_plugin_remove
post_asdf_plugin_remove_\${plugin_name}
É possível que plugins definam novos comandos asdf fornecendo scripts ou executáveis lib/commands/command*.bash
que será chamado usando a interface de linha de comando asdf usando o nome do plug-in como um subcomando.
Por exemplo, suponha que um plugin foo
tenha:
foo/
+ lib/commands/
+ command.bash
+ command-bat.bash
+ command-bat-man.bash
+ command-help.bash
Os usuários agora podem executar
$ asdf foo # same as running \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash\`
+$ asdf foo bar # same as running \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash bar\`
+$ asdf foo help # same as running \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command-help.bash\`
+$ asdf foo bat man # same as running \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat-man.bash\`
+$ asdf foo bat baz # same as running \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat.bash baz\`
Os autores de plugins podem usar esse recurso para fornecer utilitários relacionados às suas ferramentas, ou até mesmo criar plugins que são apenas novas extensões de comando para o próprio asdf.
Quando invocados, se os comandos de extensão não tiverem seus bits executáveis definidos, eles serão originado como scripts bash, tendo todas as funções de $ASDF_DIR/lib/utils.bash
disponíveis. Além disso, o $ASDF_CMD_FILE
resolve para o caminho completo do arquivo que está sendo originado. Se o bit executável estiver definido, eles são apenas executados e substituem a execução do asdf.
Um bom exemplo desse recurso é para plugins como haxe
que fornece o asdf haxe neko-dylibs-link
para corrigir um problema onde os executáveis haxe esperam encontrar bibliotecas dinâmicas relativas ao diretório executável.
Se o seu plug-in fornecer um comando de extensão asdf, certifique-se de mencioná-lo no README do seu plug-in.
POR FAVOR, use este recurso apenas se for absolutamente necessário
asdf permite modelos de calços personalizados. Para um executável chamado foo
, se houver um arquivo shims/foo
no plug-in, o asdf copiará esse arquivo em vez de usar seu modelo padrão de shim.
Isso deve ser usado com sabedoria. Por enquanto AFAIK, está sendo usado apenas no plugin Elixir, porque um executável também é lido como um arquivo Elixir, além de ser apenas um executável. O que torna impossível usar o calço bash padrão.
asdf
contém o comando plugin-test
para testar seu plugin. Você pode usá-lo da seguinte forma
asdf plugin test <plugin-name> <plugin-url> [--asdf-tool-version <version>] [--asdf-plugin-gitref <git-ref>] [test-command*]
Apenas os dois primeiros argumentos são necessários. Se _version for especificado, a ferramenta será instalada com essa versão específica. O padrão é o que retorna asdf latest <plugin-name>
. Se git-ref for especificado, o plug-in em si é verificado nesse commit/branch/tag, útil para testar um pull-request no CI do seu plug-in. O padrão é o branch default do repositório do plugin.
Os argumentos Rest são considerados o comando a ser executado para garantir que a ferramenta instalada funcione corretamente. Normalmente seria algo que leva --version
ou --help
. Por exemplo, para testar o plugin NodeJS, podemos executar
asdf plugin test nodejs https://github.com/asdf-vm/asdf-nodejs.git node --version
É altamente recomendável que você teste seu plug-in em um ambiente CI e verifique se ele funciona no Linux e no OSX.
O repositório asdf-vm/actions fornece uma ação do GitHub para testar seus plugins hospedados no github.
steps:
+ - name: asdf_plugin_test
+ uses: asdf-vm/actions/plugin-test@v1
+ with:
+ command: "my_tool --version"
+ env:
+ GITHUB_API_TOKEN: \${{ secrets.GITHUB_TOKEN }} # automatically provided
Aqui está um arquivo .travis.yml
de amostra, personalize-o de acordo com suas necessidades
language: c
+script: asdf plugin test nodejs $TRAVIS_BUILD_DIR 'node --version'
+before_script:
+ - git clone https://github.com/asdf-vm/asdf.git asdf
+ - . asdf/asdf.sh
+os:
+ - linux
+ - osx
Notas: Ao usar outro IC, você precisará verificar qual variável mapeia para o caminho do repositório.
Você também tem a opção de passar um caminho relativo para plugin-test
.
Por exemplo, se o script de teste for executado no diretório: asdf plugin test nodejs . 'node --version'
.
Se o list-all
do seu plug-in depender do acesso à API do GitHub, certifique-se de fornecer um token de autorização ao acessá-lo, caso contrário, seus testes podem falhar devido à limitação de taxa.
Para fazer isso, crie um novo token pessoal com apenas acesso public_repo
.
Em seguida, nas configurações de compilação do travis.ci, adicione uma variável de ambiente secure para ela chamada algo como GITHUB_API_TOKEN
. E NUNCA publique seu token em seu código.
Finalmente, adicione algo como o seguinte para bin/list-all
cmd="curl -s"
+if [ -n "$GITHUB_API_TOKEN" ]; then
+ cmd="$cmd -H 'Authorization: token $GITHUB_API_TOKEN'"
+fi
+
+cmd="$cmd $releases_path"
asdf
pode facilmente instalar plugins especificando o url do repositório de plugins, por exemplo. plugin add my-plugin https://github.com/user/asdf-my-plugin.git
.
Para facilitar para seus usuários, você pode adicionar seu plugin ao repositório oficial de plugins para ter seu plugin listado e facilmente instalável usando um comando mais curto, por exemplo asdf plugin add my-plugin
.
Siga as instruções no repositório de plugins: asdf-vm/asdf-plugins.
`,102)]))}const k=s(n,[["render",t]]);export{u as __pageData,k as default}; diff --git a/assets/pt-br_plugins_create.md.C5Tg4ylk.lean.js b/assets/pt-br_plugins_create.md.C5Tg4ylk.lean.js new file mode 100644 index 00000000..fa7868c4 --- /dev/null +++ b/assets/pt-br_plugins_create.md.C5Tg4ylk.lean.js @@ -0,0 +1,35 @@ +import{_ as s,c as e,a2 as i,o}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"Criar um plug-in","description":"","frontmatter":{},"headers":[],"relativePath":"pt-br/plugins/create.md","filePath":"pt-br/plugins/create.md","lastUpdated":1704804447000}'),n={name:"pt-br/plugins/create.md"};function t(l,a,p,d,r,h){return o(),e("div",null,a[0]||(a[0]=[i(`Hi, we've recently migrated our docs and added some new pages. If you would like to help translate this page, see the "Edit this page" link at the bottom of the page.
Um plugin é um repositório git, com alguns scripts executáveis, para dar suporte ao versionamento de outra linguagem ou ferramenta. Esses scripts são executados quando os comandos list-all
, install
ou uninstall
são executados. Você pode definir ou desmarcar env vars e fazer qualquer coisa necessária para configurar o ambiente para a ferramenta.
bin/list-all
- lista todas as versões instaláveisbin/download
- baixe o código fonte ou binário para a versão especificadabin/install
- instala a versão especificadaTodos os scripts, exceto bin/list-all
, terão acesso aos seguintes env vars para agir:
ASDF_INSTALL_TYPE
- version
ou ref
ASDF_INSTALL_VERSION
- se ASDF_INSTALL_TYPE
é version
então este será o número da versão. Caso contrário, será o git ref que será passado. Pode apontar para uma tag/commit/branch no repositório.ASDF_INSTALL_PATH
- o diretório onde foi instalado (ou deve ser instalado no caso do script bin/install
)Essas variáveis de ambiente adicionais estarão disponíveis para o script bin/install
:
ASDF_CONCURRENCY
- o número de núcleos a serem usados ao compilar o código-fonte. Útil para definir make -j
.ASDF_DOWNLOAD_PATH
- o caminho para onde o código fonte ou binário foi baixado pelo script bin/download
.Essas variáveis de ambiente adicionais estarão disponíveis para o script bin/download
:
ASDF_DOWNLOAD_PATH
- o caminho para onde o código-fonte ou binário deve ser baixado.Deve imprimir uma string com uma lista de versões separadas por espaço. A saída de exemplo seria a seguinte:
1.0.1 1.0.2 1.3.0 1.4
Observe que a versão mais recente deve ser listada por último para que apareça mais próxima do prompt do usuário. Isso é útil já que o comando list-all
imprime cada versão em sua própria linha. Se houver muitas versões, é possível que as primeiras versões fiquem fora da tela.
Se as versões estiverem sendo extraídas da página de lançamentos em um site, é recomendável não classificar as versões, se possível. Muitas vezes as versões já estão na ordem correta ou, na ordem inversa, nesse caso algo como tac
deve ser suficiente. Se você precisar classificar as versões manualmente, não poderá confiar em sort -V
, pois não é suportado no OSX. Uma função de classificação alternativa como esta é uma escolha melhor.
Este script deve baixar o código fonte ou binário, no caminho contido na variável de ambiente ASDF_DOWNLOAD_PATH
. Se o código-fonte ou binário baixado estiver compactado, apenas o código-fonte ou binário descompactado poderá ser colocado no diretório ASDF_DOWNLOAD_PATH
.
O script deve sair com um status de 0
quando o download for bem-sucedido. Se o download falhar, o script deve sair com qualquer status de saída diferente de zero.
Se possível, o script deve apenas colocar arquivos no ASDF_DOWNLOAD_PATH
. Se o download falhar, nenhum arquivo deve ser colocado no diretório.
Se este script não estiver presente, o asdf assumirá que o script bin/install
está presente e fará o download e instalará a versão. asdf só funciona sem este script para suportar plugins legados. Todos os plugins devem incluir este script e, eventualmente, o suporte para plugins legados será removido.
Este script deve instalar a versão, no caminho mencionado em ASDF_INSTALL_PATH
. Por padrão, o asdf criará shims para qualquer arquivo em $ASDF_INSTALL_PATH/bin
(isso pode ser personalizado com o script opcional bin/list-bin-paths).
O script de instalação deve sair com um status de 0
quando a instalação for bem-sucedida. Se a instalação falhar, o script deve sair com qualquer status de saída diferente de zero.
Se possível, o script deve apenas colocar os arquivos no diretório ASDF_INSTALL_PATH
uma vez que a compilação e instalação da ferramenta são consideradas bem sucedidas pelo script de instalação. asdf verifica a existência do diretório ASDF_INSTALL_PATH
para determinar se essa versão da ferramenta está instalado. Se o diretório ASDF_INSTALL_PATH
for preenchido no início do processo de instalação, outros comandos asdf executados em outros terminais durante a instalação podem considerar essa versão da ferramenta instalada, mesmo quando não estiver totalmente instalada.
Se você quiser que seu plugin funcione com asdf versão 0.7._ e anterior e versão 0.8._ e mais recente, verifique a presença da variável de ambiente ASDF_DOWNLOAD_PATH
. Se não estiver definido, baixe o código-fonte no retorno de chamada bin/install. Se estiver definido, suponha que o script bin/download
já tenha baixado.
Este não é um script de retorno de chamada, mas sim um conjunto de scripts de retorno de chamada que imprimem documentação diferente para STDOUT. Os scripts de retorno de chamada possíveis estão listados abaixo. Observe que bin/help.overview
é um caso especial, pois deve estar presente para que qualquer saída de ajuda seja exibida para o script.
bin/help.overview
- Este script deve gerar uma descrição geral sobre o plugin e a ferramenta que está sendo gerenciada. Nenhum título deve ser impresso, pois o asdf imprimirá títulos. A saída pode ser um texto de formato livre, mas idealmente apenas um parágrafo curto. Este script deve estar presente se você quiser que o asdf forneça informações de ajuda para seu plugin. Todos os outros scripts de retorno de chamada de ajuda são opcionais.bin/help.deps
- Esse script deve gerar a lista de dependências adaptadas ao sistema operacional. Uma dependência por linha.bin/help.config
- Este script deve imprimir qualquer configuração obrigatória ou opcional que possa estar disponível para o plug-in e a ferramenta. Quaisquer variáveis de ambiente ou outros sinalizadores necessários para instalar ou compilar a ferramenta (para o sistema operacional dos usuários quando possível). A saída pode ser texto de formato livre.bin/help.links
- Esta deve ser uma lista de links relevantes para o plug-in e a ferramenta (mais uma vez, adaptados ao sistema operacional atual, quando possível). Um link por linha. As linhas podem estar no formato <title>: <link>
ou apenas <link>
.Cada um desses scripts deve adaptar sua saída ao sistema operacional atual. Por exemplo, quando no Ubuntu, o script deps pode gerar as dependências como pacotes apt-get que devem ser instalados. O script também deve adaptar sua saída ao valor de ASDF_INSTALL_VERSION
e ASDF_INSTALL_TYPE
quando as variáveis forem definidas. Eles são opcionais e nem sempre serão definidos.
O script de retorno de chamada de ajuda NÃO DEVE gerar nenhuma informação que já esteja coberta na documentação principal do asdf-vm. As informações gerais de uso do asdf não devem estar presentes.
Liste os executáveis para a versão especificada da ferramenta. Deve imprimir uma string com uma lista separada por espaços de caminhos de diretórios que contêm executáveis. Os caminhos devem ser relativos ao caminho de instalação passado. A saída de exemplo seria:
bin tools veggies
Isso instruirá o asdf a criar shims para os arquivos em <install-path>/bin
, <install-path>/tools
e <install-path>/veggies
Se este script não for especificado, o asdf procurará o diretório bin
em uma instalação e criará shims para eles.
Configure o env para executar os binários no pacote.
Obtenha o caminho executável para a versão especificada da ferramenta. Deve imprimir uma string com o caminho executável relativo. Isso permite que o plug-in substitua condicionalmente o caminho executável especificado do shim, caso contrário, retorne o caminho padrão especificado pelo shim.
Usage:
+ plugin/bin/exec-path <install-path> <command> <executable-path>
+
+Example Call:
+ ~/.asdf/plugins/foo/bin/exec-path "~/.asdf/installs/foo/1.0" "foo" "bin/foo"
+
+Output:
+ bin/foox
Desinstala uma versão específica de uma ferramenta.
Registre arquivos setter adicionais para este plugin. Deve imprimir uma string com uma lista de nomes de arquivos separados por espaços.
.ruby-version .rvmrc
Nota: Isso só se aplica a usuários que habilitaram a opção legacy_version_file
em seu ~/.asdfrc
.
Isso pode ser usado para analisar ainda mais o arquivo legado encontrado pelo asdf. Se o parse-legacy-file
não for implementado, o asdf simplesmente irá cat o arquivo para determinar a versão. O script receberá o caminho do arquivo como seu primeiro argumento.
Isso pode ser usado para executar qualquer ação pós-instalação depois que o plug-in for adicionado ao asdf.
O script tem acesso ao caminho em que o plugin foi instalado (\${ASDF_PLUGIN_PATH}
) e o URL de origem (\${ASDF_PLUGIN_SOURCE_URL}
), se algum foi usado.
Veja também os ganchos relacionados:
pre_asdf_plugin_add
pre_asdf_plugin_add_\${plugin_name}
post_asdf_plugin_add
post_asdf_plugin_add_\${plugin_name}
Isso pode ser usado para executar qualquer ação de pré-remoção antes que o plug-in seja removido do asdf.
O script tem acesso ao caminho em que o plugin foi instalado (\${ASDF_PLUGIN_PATH}
).
Veja também os ganchos relacionados:
pre_asdf_plugin_remove
pre_asdf_plugin_remove_\${plugin_name}
post_asdf_plugin_remove
post_asdf_plugin_remove_\${plugin_name}
É possível que plugins definam novos comandos asdf fornecendo scripts ou executáveis lib/commands/command*.bash
que será chamado usando a interface de linha de comando asdf usando o nome do plug-in como um subcomando.
Por exemplo, suponha que um plugin foo
tenha:
foo/
+ lib/commands/
+ command.bash
+ command-bat.bash
+ command-bat-man.bash
+ command-help.bash
Os usuários agora podem executar
$ asdf foo # same as running \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash\`
+$ asdf foo bar # same as running \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash bar\`
+$ asdf foo help # same as running \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command-help.bash\`
+$ asdf foo bat man # same as running \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat-man.bash\`
+$ asdf foo bat baz # same as running \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat.bash baz\`
Os autores de plugins podem usar esse recurso para fornecer utilitários relacionados às suas ferramentas, ou até mesmo criar plugins que são apenas novas extensões de comando para o próprio asdf.
Quando invocados, se os comandos de extensão não tiverem seus bits executáveis definidos, eles serão originado como scripts bash, tendo todas as funções de $ASDF_DIR/lib/utils.bash
disponíveis. Além disso, o $ASDF_CMD_FILE
resolve para o caminho completo do arquivo que está sendo originado. Se o bit executável estiver definido, eles são apenas executados e substituem a execução do asdf.
Um bom exemplo desse recurso é para plugins como haxe
que fornece o asdf haxe neko-dylibs-link
para corrigir um problema onde os executáveis haxe esperam encontrar bibliotecas dinâmicas relativas ao diretório executável.
Se o seu plug-in fornecer um comando de extensão asdf, certifique-se de mencioná-lo no README do seu plug-in.
POR FAVOR, use este recurso apenas se for absolutamente necessário
asdf permite modelos de calços personalizados. Para um executável chamado foo
, se houver um arquivo shims/foo
no plug-in, o asdf copiará esse arquivo em vez de usar seu modelo padrão de shim.
Isso deve ser usado com sabedoria. Por enquanto AFAIK, está sendo usado apenas no plugin Elixir, porque um executável também é lido como um arquivo Elixir, além de ser apenas um executável. O que torna impossível usar o calço bash padrão.
asdf
contém o comando plugin-test
para testar seu plugin. Você pode usá-lo da seguinte forma
asdf plugin test <plugin-name> <plugin-url> [--asdf-tool-version <version>] [--asdf-plugin-gitref <git-ref>] [test-command*]
Apenas os dois primeiros argumentos são necessários. Se _version for especificado, a ferramenta será instalada com essa versão específica. O padrão é o que retorna asdf latest <plugin-name>
. Se git-ref for especificado, o plug-in em si é verificado nesse commit/branch/tag, útil para testar um pull-request no CI do seu plug-in. O padrão é o branch default do repositório do plugin.
Os argumentos Rest são considerados o comando a ser executado para garantir que a ferramenta instalada funcione corretamente. Normalmente seria algo que leva --version
ou --help
. Por exemplo, para testar o plugin NodeJS, podemos executar
asdf plugin test nodejs https://github.com/asdf-vm/asdf-nodejs.git node --version
É altamente recomendável que você teste seu plug-in em um ambiente CI e verifique se ele funciona no Linux e no OSX.
O repositório asdf-vm/actions fornece uma ação do GitHub para testar seus plugins hospedados no github.
steps:
+ - name: asdf_plugin_test
+ uses: asdf-vm/actions/plugin-test@v1
+ with:
+ command: "my_tool --version"
+ env:
+ GITHUB_API_TOKEN: \${{ secrets.GITHUB_TOKEN }} # automatically provided
Aqui está um arquivo .travis.yml
de amostra, personalize-o de acordo com suas necessidades
language: c
+script: asdf plugin test nodejs $TRAVIS_BUILD_DIR 'node --version'
+before_script:
+ - git clone https://github.com/asdf-vm/asdf.git asdf
+ - . asdf/asdf.sh
+os:
+ - linux
+ - osx
Notas: Ao usar outro IC, você precisará verificar qual variável mapeia para o caminho do repositório.
Você também tem a opção de passar um caminho relativo para plugin-test
.
Por exemplo, se o script de teste for executado no diretório: asdf plugin test nodejs . 'node --version'
.
Se o list-all
do seu plug-in depender do acesso à API do GitHub, certifique-se de fornecer um token de autorização ao acessá-lo, caso contrário, seus testes podem falhar devido à limitação de taxa.
Para fazer isso, crie um novo token pessoal com apenas acesso public_repo
.
Em seguida, nas configurações de compilação do travis.ci, adicione uma variável de ambiente secure para ela chamada algo como GITHUB_API_TOKEN
. E NUNCA publique seu token em seu código.
Finalmente, adicione algo como o seguinte para bin/list-all
cmd="curl -s"
+if [ -n "$GITHUB_API_TOKEN" ]; then
+ cmd="$cmd -H 'Authorization: token $GITHUB_API_TOKEN'"
+fi
+
+cmd="$cmd $releases_path"
asdf
pode facilmente instalar plugins especificando o url do repositório de plugins, por exemplo. plugin add my-plugin https://github.com/user/asdf-my-plugin.git
.
Para facilitar para seus usuários, você pode adicionar seu plugin ao repositório oficial de plugins para ter seu plugin listado e facilmente instalável usando um comando mais curto, por exemplo asdf plugin add my-plugin
.
Siga as instruções no repositório de plugins: asdf-vm/asdf-plugins.
`,102)]))}const k=s(n,[["render",t]]);export{u as __pageData,k as default}; diff --git a/assets/style.BjfE0TmN.css b/assets/style.BjfE0TmN.css new file mode 100644 index 00000000..3ae76a81 --- /dev/null +++ b/assets/style.BjfE0TmN.css @@ -0,0 +1 @@ +@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;-webkit-user-select:none;user-select:none;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-54a304ca]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-54a304ca],.VPBackdrop.fade-leave-to[data-v-54a304ca]{opacity:0}.VPBackdrop.fade-leave-active[data-v-54a304ca]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-54a304ca]{display:none}}.NotFound[data-v-6ff51ddd]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-6ff51ddd]{padding:96px 32px 168px}}.code[data-v-6ff51ddd]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-6ff51ddd]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-6ff51ddd]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-6ff51ddd]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-6ff51ddd]{padding-top:20px}.link[data-v-6ff51ddd]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-6ff51ddd]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-53c99d69]{position:relative;z-index:1}.nested[data-v-53c99d69]{padding-right:16px;padding-left:16px}.outline-link[data-v-53c99d69]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-53c99d69]:hover,.outline-link.active[data-v-53c99d69]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-53c99d69]{padding-left:13px}.VPDocAsideOutline[data-v-f610f197]{display:none}.VPDocAsideOutline.has-outline[data-v-f610f197]{display:block}.content[data-v-f610f197]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-f610f197]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-f610f197]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-cb998dce]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-cb998dce]{flex-grow:1}.VPDocAside[data-v-cb998dce] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-cb998dce] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-cb998dce] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-1bb0c8a8]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-1bb0c8a8]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-1bcd8184]{margin-top:64px}.edit-info[data-v-1bcd8184]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-1bcd8184]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-1bcd8184]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-1bcd8184]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-1bcd8184]{margin-right:8px}.prev-next[data-v-1bcd8184]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-1bcd8184]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-1bcd8184]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-1bcd8184]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-1bcd8184]{margin-left:auto;text-align:right}.desc[data-v-1bcd8184]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-1bcd8184]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-e6f2a212]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-e6f2a212]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-e6f2a212]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-e6f2a212]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-e6f2a212]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-e6f2a212]{display:flex;justify-content:center}.VPDoc .aside[data-v-e6f2a212]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-e6f2a212]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-e6f2a212]{max-width:1104px}}.container[data-v-e6f2a212]{margin:0 auto;width:100%}.aside[data-v-e6f2a212]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-e6f2a212]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-e6f2a212]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-e6f2a212]::-webkit-scrollbar{display:none}.aside-curtain[data-v-e6f2a212]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-e6f2a212]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-e6f2a212]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-e6f2a212]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-e6f2a212]{order:1;margin:0;min-width:640px}}.content-container[data-v-e6f2a212]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-e6f2a212]{max-width:688px}.VPButton[data-v-93dc4167]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-93dc4167]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-93dc4167]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-93dc4167]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-93dc4167]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-93dc4167]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-93dc4167]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-93dc4167]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-93dc4167]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-93dc4167]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-93dc4167]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-93dc4167]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-93dc4167]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-ab19afbb]{display:none}.dark .VPImage.light[data-v-ab19afbb]{display:none}.VPHero[data-v-b10c5094]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-b10c5094]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-b10c5094]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-b10c5094]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-b10c5094]{flex-direction:row}}.main[data-v-b10c5094]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-b10c5094]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-b10c5094]{text-align:left}}@media (min-width: 960px){.main[data-v-b10c5094]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-b10c5094]{max-width:592px}}.name[data-v-b10c5094],.text[data-v-b10c5094]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-b10c5094],.VPHero.has-image .text[data-v-b10c5094]{margin:0 auto}.name[data-v-b10c5094]{color:var(--vp-home-hero-name-color)}.clip[data-v-b10c5094]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-b10c5094],.text[data-v-b10c5094]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-b10c5094],.text[data-v-b10c5094]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-b10c5094],.VPHero.has-image .text[data-v-b10c5094]{margin:0}}.tagline[data-v-b10c5094]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-b10c5094]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-b10c5094]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-b10c5094]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-b10c5094]{margin:0}}.actions[data-v-b10c5094]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-b10c5094]{justify-content:center}@media (min-width: 640px){.actions[data-v-b10c5094]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-b10c5094]{justify-content:flex-start}}.action[data-v-b10c5094]{flex-shrink:0;padding:6px}.image[data-v-b10c5094]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-b10c5094]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-b10c5094]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-b10c5094]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-b10c5094]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-b10c5094]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-b10c5094]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-b10c5094]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-b10c5094]{width:320px;height:320px}}[data-v-b10c5094] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-b10c5094] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-b10c5094] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-bd37d1a2]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-bd37d1a2]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-bd37d1a2]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-bd37d1a2]>.VPImage{margin-bottom:20px}.icon[data-v-bd37d1a2]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-bd37d1a2]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-bd37d1a2]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-bd37d1a2]{padding-top:8px}.link-text-value[data-v-bd37d1a2]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-bd37d1a2]{margin-left:6px}.VPFeatures[data-v-b1eea84a]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-b1eea84a]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-b1eea84a]{padding:0 64px}}.container[data-v-b1eea84a]{margin:0 auto;max-width:1152px}.items[data-v-b1eea84a]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-b1eea84a]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-b1eea84a],.item.grid-4[data-v-b1eea84a],.item.grid-6[data-v-b1eea84a]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-b1eea84a],.item.grid-4[data-v-b1eea84a]{width:50%}.item.grid-3[data-v-b1eea84a],.item.grid-6[data-v-b1eea84a]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-b1eea84a]{width:25%}}.container[data-v-c141a4bd]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-c141a4bd]{padding:0 48px}}@media (min-width: 960px){.container[data-v-c141a4bd]{width:100%;padding:0 64px}}.vp-doc[data-v-c141a4bd] .VPHomeSponsors,.vp-doc[data-v-c141a4bd] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-c141a4bd] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-c141a4bd] .VPHomeSponsors a,.vp-doc[data-v-c141a4bd] .VPTeamPage a{text-decoration:none}.VPHome[data-v-07b1ad08]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-07b1ad08]{margin-bottom:128px}}.VPContent[data-v-9a6c75ad]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-9a6c75ad]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-9a6c75ad]{margin:0}@media (min-width: 960px){.VPContent[data-v-9a6c75ad]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-9a6c75ad]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-9a6c75ad]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-566314d4]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-566314d4]{display:none}.VPFooter[data-v-566314d4] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-566314d4] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-566314d4]{padding:32px}}.container[data-v-566314d4]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-566314d4],.copyright[data-v-566314d4]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-883964e0]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-883964e0]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-883964e0]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-883964e0]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-883964e0]{color:var(--vp-c-text-1)}.icon[data-v-883964e0]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-883964e0]{font-size:14px}.icon[data-v-883964e0]{font-size:16px}}.open>.icon[data-v-883964e0]{transform:rotate(90deg)}.items[data-v-883964e0]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-883964e0]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-883964e0]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-883964e0]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-883964e0]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-883964e0]{transition:all .2s ease-out}.flyout-leave-active[data-v-883964e0]{transition:all .15s ease-in}.flyout-enter-from[data-v-883964e0],.flyout-leave-to[data-v-883964e0]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-2488c25a]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-2488c25a]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-2488c25a]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-2488c25a]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-2488c25a]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-2488c25a]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-2488c25a]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-2488c25a]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-2488c25a]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-2488c25a]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-2488c25a]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-2488c25a]{display:none}}.menu-icon[data-v-2488c25a]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-2488c25a]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-2488c25a]{padding:12px 32px 11px}}.VPSwitch[data-v-b4ccac88]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-b4ccac88]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-b4ccac88]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-b4ccac88]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-b4ccac88] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-b4ccac88] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-be9742d9]{opacity:1}.moon[data-v-be9742d9],.dark .sun[data-v-be9742d9]{opacity:0}.dark .moon[data-v-be9742d9]{opacity:1}.dark .VPSwitchAppearance[data-v-be9742d9] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-3f90c1a5]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-3f90c1a5]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-7eeeb2dc]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-7eeeb2dc]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-7eeeb2dc]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-7eeeb2dc]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-a6b0397c]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-a6b0397c]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-a6b0397c]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-a6b0397c]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-20ed86d6]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-20ed86d6] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-20ed86d6] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-20ed86d6] .group:last-child{padding-bottom:0}.VPMenu[data-v-20ed86d6] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-20ed86d6] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-20ed86d6] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-20ed86d6] .action{padding-left:24px}.VPFlyout[data-v-bfe7971f]{position:relative}.VPFlyout[data-v-bfe7971f]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-bfe7971f]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-bfe7971f]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-bfe7971f]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-bfe7971f]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-bfe7971f]{opacity:0;visibility:hidden;transform:translateY(0)}.VPFlyout:hover .menu[data-v-bfe7971f],.button[aria-expanded=true]+.menu[data-v-bfe7971f]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-bfe7971f]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-bfe7971f]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-bfe7971f]{margin-right:0;font-size:16px}.text-icon[data-v-bfe7971f]{margin-left:4px;font-size:14px}.icon[data-v-bfe7971f]{font-size:20px;transition:fill .25s}.menu[data-v-bfe7971f]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-60a9a2d3]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-60a9a2d3]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-60a9a2d3]>svg,.VPSocialLink[data-v-60a9a2d3]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-e71e869c]{display:flex;justify-content:center}.VPNavBarExtra[data-v-f953d92f]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-f953d92f]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-f953d92f]{display:none}}.trans-title[data-v-f953d92f]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-f953d92f],.item.social-links[data-v-f953d92f]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-f953d92f]{min-width:176px}.appearance-action[data-v-f953d92f]{margin-right:-2px}.social-links-list[data-v-f953d92f]{margin:-4px -8px}.VPNavBarHamburger[data-v-6bee1efd]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-6bee1efd]{display:none}}.container[data-v-6bee1efd]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-6bee1efd]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-6bee1efd]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-6bee1efd]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-6bee1efd]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-6bee1efd]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-6bee1efd]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-6bee1efd],.VPNavBarHamburger.active:hover .middle[data-v-6bee1efd],.VPNavBarHamburger.active:hover .bottom[data-v-6bee1efd]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-6bee1efd],.middle[data-v-6bee1efd],.bottom[data-v-6bee1efd]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-6bee1efd]{top:0;left:0;transform:translate(0)}.middle[data-v-6bee1efd]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-6bee1efd]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-815115f5]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-815115f5],.VPNavBarMenuLink[data-v-815115f5]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-afb2845e]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-afb2845e]{display:flex}}/*! @docsearch/css 3.6.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-ef6192dc]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-ef6192dc]{display:flex;align-items:center}}.title[data-v-9f43907a]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-9f43907a]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-9f43907a]{border-bottom-color:var(--vp-c-divider)}}[data-v-9f43907a] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-acee064b]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-acee064b]{display:flex;align-items:center}}.title[data-v-acee064b]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-9fd4d1dd]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-9fd4d1dd]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-9fd4d1dd]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-9fd4d1dd]:not(.home){background-color:transparent}.VPNavBar[data-v-9fd4d1dd]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-9fd4d1dd]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-9fd4d1dd]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-9fd4d1dd]{padding:0}}.container[data-v-9fd4d1dd]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-9fd4d1dd],.container>.content[data-v-9fd4d1dd]{pointer-events:none}.container[data-v-9fd4d1dd] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-9fd4d1dd]{max-width:100%}}.title[data-v-9fd4d1dd]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-9fd4d1dd]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-9fd4d1dd]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-9fd4d1dd]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-9fd4d1dd]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-9fd4d1dd]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-9fd4d1dd]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-9fd4d1dd]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-9fd4d1dd]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-9fd4d1dd]{column-gap:.5rem}}.menu+.translations[data-v-9fd4d1dd]:before,.menu+.appearance[data-v-9fd4d1dd]:before,.menu+.social-links[data-v-9fd4d1dd]:before,.translations+.appearance[data-v-9fd4d1dd]:before,.appearance+.social-links[data-v-9fd4d1dd]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-9fd4d1dd]:before,.translations+.appearance[data-v-9fd4d1dd]:before{margin-right:16px}.appearance+.social-links[data-v-9fd4d1dd]:before{margin-left:16px}.social-links[data-v-9fd4d1dd]{margin-right:-8px}.divider[data-v-9fd4d1dd]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-9fd4d1dd]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-9fd4d1dd]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-9fd4d1dd]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-9fd4d1dd]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-9fd4d1dd]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-9fd4d1dd]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-a3e2920d]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-a3e2920d]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-fa963d97]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-fa963d97]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-e04f3e85]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-e04f3e85]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-f60dbfa7]{display:block}.title[data-v-f60dbfa7]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-d99bfeec]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-d99bfeec]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-d99bfeec]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-d99bfeec]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-d99bfeec]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-d99bfeec]{transform:rotate(45deg)}.button[data-v-d99bfeec]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-d99bfeec]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-d99bfeec]{transition:transform .25s}.group[data-v-d99bfeec]:first-child{padding-top:0}.group+.group[data-v-d99bfeec],.group+.item[data-v-d99bfeec]{padding-top:4px}.VPNavScreenTranslations[data-v-516e4bc3]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-516e4bc3]{height:auto}.title[data-v-516e4bc3]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-516e4bc3]{font-size:16px}.icon.lang[data-v-516e4bc3]{margin-right:8px}.icon.chevron[data-v-516e4bc3]{margin-left:4px}.list[data-v-516e4bc3]{padding:4px 0 0 24px}.link[data-v-516e4bc3]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-2dd6d0c7]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-2dd6d0c7],.VPNavScreen.fade-leave-active[data-v-2dd6d0c7]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-2dd6d0c7],.VPNavScreen.fade-leave-active .container[data-v-2dd6d0c7]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-2dd6d0c7],.VPNavScreen.fade-leave-to[data-v-2dd6d0c7]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-2dd6d0c7],.VPNavScreen.fade-leave-to .container[data-v-2dd6d0c7]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-2dd6d0c7]{display:none}}.container[data-v-2dd6d0c7]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-2dd6d0c7],.menu+.appearance[data-v-2dd6d0c7],.translations+.appearance[data-v-2dd6d0c7]{margin-top:24px}.menu+.social-links[data-v-2dd6d0c7]{margin-top:16px}.appearance+.social-links[data-v-2dd6d0c7]{margin-top:16px}.VPNav[data-v-7ad780c2]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-7ad780c2]{position:fixed}}.VPSidebarItem.level-0[data-v-edd2eed8]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-edd2eed8]{padding-bottom:10px}.item[data-v-edd2eed8]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-edd2eed8]{cursor:pointer}.indicator[data-v-edd2eed8]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-edd2eed8],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-edd2eed8],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-edd2eed8],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-edd2eed8]{background-color:var(--vp-c-brand-1)}.link[data-v-edd2eed8]{display:flex;align-items:center;flex-grow:1}.text[data-v-edd2eed8]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-edd2eed8]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-edd2eed8],.VPSidebarItem.level-2 .text[data-v-edd2eed8],.VPSidebarItem.level-3 .text[data-v-edd2eed8],.VPSidebarItem.level-4 .text[data-v-edd2eed8],.VPSidebarItem.level-5 .text[data-v-edd2eed8]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-edd2eed8],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-edd2eed8],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-edd2eed8],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-edd2eed8],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-edd2eed8],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-edd2eed8]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-1.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-2.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-3.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-4.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-5.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-edd2eed8],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-edd2eed8],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-edd2eed8],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-edd2eed8],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-edd2eed8],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-edd2eed8]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-edd2eed8],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-edd2eed8],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-edd2eed8],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-edd2eed8],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-edd2eed8],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-edd2eed8]{color:var(--vp-c-brand-1)}.caret[data-v-edd2eed8]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-edd2eed8]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-edd2eed8]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-edd2eed8]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-edd2eed8]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-edd2eed8],.VPSidebarItem.level-2 .items[data-v-edd2eed8],.VPSidebarItem.level-3 .items[data-v-edd2eed8],.VPSidebarItem.level-4 .items[data-v-edd2eed8],.VPSidebarItem.level-5 .items[data-v-edd2eed8]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-edd2eed8]{display:none}.no-transition[data-v-51288d80] .caret-icon{transition:none}.group+.group[data-v-51288d80]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-51288d80]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-42c4c606]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-42c4c606]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-42c4c606]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-42c4c606]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-42c4c606]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-42c4c606]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-42c4c606]{outline:0}.VPSkipLink[data-v-c8291ffa]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-c8291ffa]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-c8291ffa]{top:14px;left:16px}}.Layout[data-v-d8b57b2d]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3dc26e1d]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-3dc26e1d]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-3dc26e1d]{margin:128px 0}}.VPHomeSponsors[data-v-3dc26e1d]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-3dc26e1d]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-3dc26e1d]{padding:0 64px}}.container[data-v-3dc26e1d]{margin:0 auto;max-width:1152px}.love[data-v-3dc26e1d]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-3dc26e1d]{display:inline-block}.message[data-v-3dc26e1d]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-3dc26e1d]{padding-top:32px}.action[data-v-3dc26e1d]{padding-top:40px;text-align:center}.VPTeamPage[data-v-a5329171]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-a5329171]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-a5329171-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-a5329171-s],.VPTeamMembers+.VPTeamPageSection[data-v-a5329171-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-a5329171-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-a5329171-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-a5329171-s],.VPTeamMembers+.VPTeamPageSection[data-v-a5329171-s]{margin-top:96px}}.VPTeamMembers[data-v-a5329171-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-a5329171-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-a5329171-s]{padding:0 64px}}.VPTeamPageTitle[data-v-46c5e327]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-46c5e327]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-46c5e327]{padding:80px 64px 48px}}.title[data-v-46c5e327]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-46c5e327]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-46c5e327]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-46c5e327]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-3bf2e850]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-3bf2e850]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-3bf2e850]{padding:0 64px}}.title[data-v-3bf2e850]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-3bf2e850]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-3bf2e850]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-3bf2e850]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-3bf2e850]{padding-top:40px}.VPTeamMembersItem[data-v-acff304e]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-acff304e]{padding:32px}.VPTeamMembersItem.small .data[data-v-acff304e]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-acff304e]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-acff304e]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-acff304e]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-acff304e]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-acff304e]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-acff304e]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-acff304e]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-acff304e]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-acff304e]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-acff304e]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-acff304e]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-acff304e]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-acff304e]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-acff304e]{text-align:center}.avatar[data-v-acff304e]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-acff304e]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-acff304e]{margin:0;font-weight:600}.affiliation[data-v-acff304e]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-acff304e]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-acff304e]:hover{color:var(--vp-c-brand-1)}.desc[data-v-acff304e]{margin:0 auto}.desc[data-v-acff304e] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-acff304e]{display:flex;justify-content:center;height:56px}.sp-link[data-v-acff304e]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-acff304e]:hover,.sp .sp-link.link[data-v-acff304e]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-acff304e]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-bf782009]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-bf782009]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-bf782009]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-bf782009]{max-width:876px}.VPTeamMembers.medium .container[data-v-bf782009]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-bf782009]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-bf782009]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-bf782009]{max-width:760px}.container[data-v-bf782009]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--vp-c-brand-1: #b744b8;--vp-c-brand-2: #a379c9;--vp-c-brand-3: #a379c9}.VPLocalSearchBox[data-v-68e678c9]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-68e678c9]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-68e678c9]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-68e678c9]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-68e678c9]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-68e678c9]{padding:0 8px}}.search-bar[data-v-68e678c9]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-68e678c9]{display:block;font-size:18px}.navigate-icon[data-v-68e678c9]{display:block;font-size:14px}.search-icon[data-v-68e678c9]{margin:8px}@media (max-width: 767px){.search-icon[data-v-68e678c9]{display:none}}.search-input[data-v-68e678c9]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-68e678c9]{padding:6px 4px}}.search-actions[data-v-68e678c9]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-68e678c9]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-68e678c9]{display:none}}.search-actions button[data-v-68e678c9]{padding:8px}.search-actions button[data-v-68e678c9]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-68e678c9]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-68e678c9]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-68e678c9]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-68e678c9]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-68e678c9]{display:none}}.search-keyboard-shortcuts kbd[data-v-68e678c9]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-68e678c9]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-68e678c9]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-68e678c9]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-68e678c9]{margin:8px}}.titles[data-v-68e678c9]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-68e678c9]{display:flex;align-items:center;gap:4px}.title.main[data-v-68e678c9]{font-weight:500}.title-icon[data-v-68e678c9]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-68e678c9]{opacity:.5}.result.selected[data-v-68e678c9]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-68e678c9]{position:relative}.excerpt[data-v-68e678c9]{opacity:50%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;margin-top:4px}.result.selected .excerpt[data-v-68e678c9]{opacity:1}.excerpt[data-v-68e678c9] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-68e678c9] mark,.excerpt[data-v-68e678c9] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-68e678c9] .vp-code-group .tabs{display:none}.excerpt[data-v-68e678c9] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-68e678c9]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-68e678c9]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-68e678c9],.result.selected .title-icon[data-v-68e678c9]{color:var(--vp-c-brand-1)!important}.no-results[data-v-68e678c9]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-68e678c9]{flex:none} diff --git a/assets/zh-hans_contribute_core.md.BeVZjd7j.js b/assets/zh-hans_contribute_core.md.BeVZjd7j.js new file mode 100644 index 00000000..e40e1225 --- /dev/null +++ b/assets/zh-hans_contribute_core.md.BeVZjd7j.js @@ -0,0 +1,25 @@ +import{_ as a,c as e,a2 as i,o as t}from"./chunks/framework.BQmytedh.js";const k=JSON.parse('{"title":"asdf","description":"","frontmatter":{},"headers":[],"relativePath":"zh-hans/contribute/core.md","filePath":"zh-hans/contribute/core.md","lastUpdated":1687069487000}'),n={name:"zh-hans/contribute/core.md"};function l(p,s,h,o,r,d){return t(),e("div",null,s[0]||(s[0]=[i(`asdf
核心贡献指南.
在 Github 上 fork asdf
并且/或者使用 Git 克隆默认分支:
# 克隆你 fork 的 asdf
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# 或者直接克隆 asdf
+git clone https://github.com/asdf-vm/asdf.git
核心开发所需的工具都列举在这个存储库的 .tool-versions
文件中。如果你想要使用 asdf
自身来管理它,请使用以下命令添加这些插件:
asdf plugin add bats https://github.com/timgluz/asdf-bats.git
+asdf plugin add shellcheck https://github.com/luizm/asdf-shellcheck.git
+asdf plugin add shfmt https://github.com/luizm/asdf-shfmt.git
使用以下命令安装这些版本来开发 asdf
:
asdf install
在本地机器的开发过程中不使用 asdf
来管理工具 或许 对你有帮助,因为你可能需要打破某些可能会影响到你的开发工具链的功能。以下是所需工具的原始列表:
如果你想要在不更改已安装的 asdf
的情况下尝试应用你的更改,可以将 $ASDF_DIR
变量设置为克隆存储库的路径,并临时将目录的 bin
和 shims
目录添加到你的路径中。
最好在提交或推送到远程之前,在本地做好格式化、lint 检查和测试你的代码。可以使用以下脚本/命令:
# 脚本检查
+./scripts/shellcheck.bash
+
+# 格式化
+./scripts/shfmt.bash
+
+# 测试:所有案例
+bats test/
+# 测试:特定命令
+bats test/list_commands.bash
提示
增加测试! - 新特性需要进行测试,并加快错误修复的审查速度。请在创建拉取请求之前覆盖新的代码路径。查看 bats-core 文档 了解更多。
强烈建议在编写测试之前检查现有的测试套件和 bats-core 文档。
Bats 调试有时可能很困难。使用带有 -t
标识的 TAP 输出将使你能够在测试执行期间打印带有特殊文件描述符 >&3
的输出,从而简化调试。例如:
# test/some_tests.bats
+
+printf "%s\\n" "Will not be printed during bats test/some_tests.bats"
+printf "%s\\n" "Will be printed during bats -t test/some_tests.bats" >&3
进一步相关文档请查看 bats-core 的 Printing to the Terminal 部分.
asdf
正在使用一个名为 Release Please 的自动发布工具来自动碰撞 SemVer 版本并生成 变更日志。这个信息是通过读取自上次发布以来的提交历史记录来确定的。
约定式提交 定义了拉取请求标题的格式,该标题成为默认分支上的提交消息格式。这是通过 Github Action amannn/action-semantic-pull-request
强制执行的。
约定式提交遵循以下格式:
<type>[optional scope][optional !]: <description>
+
+<!-- 例子 -->
+fix: some fix
+feat: a new feature
+docs: some documentation update
+docs(website): some change for the website
+feat!: feature with breaking change
<types>
的所有类型包含: feat
、fix
、docs
、style
、refactor
、perf
、test
、build
、ci
、chore
、revert
。
!
:表示重大更改fix
:将会创建一个新的 SemVer patch
补丁feat
:将会创建一个新的 SemVer minor
小版本<type>!
:将会创建一个新的 SemVer major
大版本拉取请求标题必须遵循这种格式。
提示
请使用约定式提交信息格式作为拉取请求标题。
asdf-alpine 和 asdf-ubuntu 项目正在努力提供一些 asdf 工具的容器化镜像。你可以使用这些容器镜像作为开发服务器的基础镜像,或者运行生产应用。
`,32)]))}const g=a(n,[["render",l]]);export{k as __pageData,g as default}; diff --git a/assets/zh-hans_contribute_core.md.BeVZjd7j.lean.js b/assets/zh-hans_contribute_core.md.BeVZjd7j.lean.js new file mode 100644 index 00000000..e40e1225 --- /dev/null +++ b/assets/zh-hans_contribute_core.md.BeVZjd7j.lean.js @@ -0,0 +1,25 @@ +import{_ as a,c as e,a2 as i,o as t}from"./chunks/framework.BQmytedh.js";const k=JSON.parse('{"title":"asdf","description":"","frontmatter":{},"headers":[],"relativePath":"zh-hans/contribute/core.md","filePath":"zh-hans/contribute/core.md","lastUpdated":1687069487000}'),n={name:"zh-hans/contribute/core.md"};function l(p,s,h,o,r,d){return t(),e("div",null,s[0]||(s[0]=[i(`asdf
核心贡献指南.
在 Github 上 fork asdf
并且/或者使用 Git 克隆默认分支:
# 克隆你 fork 的 asdf
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# 或者直接克隆 asdf
+git clone https://github.com/asdf-vm/asdf.git
核心开发所需的工具都列举在这个存储库的 .tool-versions
文件中。如果你想要使用 asdf
自身来管理它,请使用以下命令添加这些插件:
asdf plugin add bats https://github.com/timgluz/asdf-bats.git
+asdf plugin add shellcheck https://github.com/luizm/asdf-shellcheck.git
+asdf plugin add shfmt https://github.com/luizm/asdf-shfmt.git
使用以下命令安装这些版本来开发 asdf
:
asdf install
在本地机器的开发过程中不使用 asdf
来管理工具 或许 对你有帮助,因为你可能需要打破某些可能会影响到你的开发工具链的功能。以下是所需工具的原始列表:
如果你想要在不更改已安装的 asdf
的情况下尝试应用你的更改,可以将 $ASDF_DIR
变量设置为克隆存储库的路径,并临时将目录的 bin
和 shims
目录添加到你的路径中。
最好在提交或推送到远程之前,在本地做好格式化、lint 检查和测试你的代码。可以使用以下脚本/命令:
# 脚本检查
+./scripts/shellcheck.bash
+
+# 格式化
+./scripts/shfmt.bash
+
+# 测试:所有案例
+bats test/
+# 测试:特定命令
+bats test/list_commands.bash
提示
增加测试! - 新特性需要进行测试,并加快错误修复的审查速度。请在创建拉取请求之前覆盖新的代码路径。查看 bats-core 文档 了解更多。
强烈建议在编写测试之前检查现有的测试套件和 bats-core 文档。
Bats 调试有时可能很困难。使用带有 -t
标识的 TAP 输出将使你能够在测试执行期间打印带有特殊文件描述符 >&3
的输出,从而简化调试。例如:
# test/some_tests.bats
+
+printf "%s\\n" "Will not be printed during bats test/some_tests.bats"
+printf "%s\\n" "Will be printed during bats -t test/some_tests.bats" >&3
进一步相关文档请查看 bats-core 的 Printing to the Terminal 部分.
asdf
正在使用一个名为 Release Please 的自动发布工具来自动碰撞 SemVer 版本并生成 变更日志。这个信息是通过读取自上次发布以来的提交历史记录来确定的。
约定式提交 定义了拉取请求标题的格式,该标题成为默认分支上的提交消息格式。这是通过 Github Action amannn/action-semantic-pull-request
强制执行的。
约定式提交遵循以下格式:
<type>[optional scope][optional !]: <description>
+
+<!-- 例子 -->
+fix: some fix
+feat: a new feature
+docs: some documentation update
+docs(website): some change for the website
+feat!: feature with breaking change
<types>
的所有类型包含: feat
、fix
、docs
、style
、refactor
、perf
、test
、build
、ci
、chore
、revert
。
!
:表示重大更改fix
:将会创建一个新的 SemVer patch
补丁feat
:将会创建一个新的 SemVer minor
小版本<type>!
:将会创建一个新的 SemVer major
大版本拉取请求标题必须遵循这种格式。
提示
请使用约定式提交信息格式作为拉取请求标题。
asdf-alpine 和 asdf-ubuntu 项目正在努力提供一些 asdf 工具的容器化镜像。你可以使用这些容器镜像作为开发服务器的基础镜像,或者运行生产应用。
`,32)]))}const g=a(n,[["render",l]]);export{k as __pageData,g as default}; diff --git a/assets/zh-hans_contribute_documentation.md.DNvwQkgi.js b/assets/zh-hans_contribute_documentation.md.DNvwQkgi.js new file mode 100644 index 00000000..80ae6f76 --- /dev/null +++ b/assets/zh-hans_contribute_documentation.md.DNvwQkgi.js @@ -0,0 +1,29 @@ +import{_ as a,c as i,a2 as e,o as n}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"文档 & 网站","description":"","frontmatter":{},"headers":[],"relativePath":"zh-hans/contribute/documentation.md","filePath":"zh-hans/contribute/documentation.md","lastUpdated":1687069487000}'),t={name:"zh-hans/contribute/documentation.md"};function l(p,s,h,k,d,r){return n(),i("div",null,s[0]||(s[0]=[e(`文档 & 网站贡献指南。
在 Github 上 fork asdf
并且/或者使用 Git 克隆默认分支:
# 克隆你 fork 的 asdf
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# 或者直接克隆 asdf
+git clone https://github.com/asdf-vm/asdf.git
文档网站开发所需的工具都在文件 docs/.tool-versions
中使用 asdf
进行管理。使用以下命令添加插件:
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
使用以下命令安装工具版本:
asdf install
根据 docs/package.json
文件安装 Node.js 依赖:
npm install
Vuepress (v2) 是我们用来构建 asdf 文档网站的静态站点生成器(SSG)。它被选中来取代 Docsify.js,因为我们希望在用户没有可用或未启用 JavaScript 时支持仅依靠 HTML。Docsify 无法做到这一点。除此之外,两者特性集合大致相同,重点是 Vuepress 可以用最少的配置编写 Markdown 文件。
package.json
包含了开发所需的脚本:
启动本地开发服务器:
npm run dev
在提交之前格式化代码:
npm run format
asdf
正在使用依赖 PR 标题中的约定式提交的自动化发布流水线。具体的文档可以查看 核心贡献指南.
当为文档更改创建 PR 请求时,请确保 PR 标题使用了约定式提交类型 docs
以及 docs: <description>
的格式。
网站的配置包含在几个 JavaScript 文件中,其中 JS 对象用于表示配置。它们是:
docs/.vuepress/config.js
:网站的根配置文件。请查看 Vuepress 文档 了解更多详情。为了简化根配置文件,更大的 JS 对象表示 导航栏和侧边栏 配置已经被提取并按照语言类型分隔开来。请参考以下文件:
docs/.vuepress/navbar.js
docs/.vuepress/sidebar.js
这些配置的官方文档位于 默认主题参考。
Vuepress 有一流的国际化支持。根配置文件 docs/.vuepress/config.js
定义了支持的语言类型及其 URL、在选择下拉菜单中的标题以及导航栏/侧边栏配置引用。
导航栏/侧边栏配置在上述配置文件中捕获,按语言类型分隔开并单独导出。
每种语言的 markdown 内容必须位于与根配置文件中 locale
键同名的目录位置。也就是:
{
+ ...
+ themeConfig: {
+ locales: {
+ "/": {
+ selectLanguageName: "English (US)",
+ sidebar: sidebar.en,
+ navbar: navbar.en
+ },
+ "/pt-BR/": {
+ selectLanguageName: "Brazilian Portuguese",
+ sidebar: sidebar.pt_br,
+ navbar: navbar.pt_br
+ }
+ }
+ }
+}
/pt-BR/
将要求 markdown 文件的同一集合位于 docs/pt-BR/
目录下,如下所示:
docs
+├─ README.md
+├─ foo.md
+├─ nested
+│ └─ README.md
+└─ pt-BR
+ ├─ README.md
+ ├─ foo.md
+ └─ nested
+ └─ README.md
请查看 Vuepress i18n 国际化官方文档 了解更多详情。
`,37)]))}const g=a(t,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/zh-hans_contribute_documentation.md.DNvwQkgi.lean.js b/assets/zh-hans_contribute_documentation.md.DNvwQkgi.lean.js new file mode 100644 index 00000000..80ae6f76 --- /dev/null +++ b/assets/zh-hans_contribute_documentation.md.DNvwQkgi.lean.js @@ -0,0 +1,29 @@ +import{_ as a,c as i,a2 as e,o as n}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"文档 & 网站","description":"","frontmatter":{},"headers":[],"relativePath":"zh-hans/contribute/documentation.md","filePath":"zh-hans/contribute/documentation.md","lastUpdated":1687069487000}'),t={name:"zh-hans/contribute/documentation.md"};function l(p,s,h,k,d,r){return n(),i("div",null,s[0]||(s[0]=[e(`文档 & 网站贡献指南。
在 Github 上 fork asdf
并且/或者使用 Git 克隆默认分支:
# 克隆你 fork 的 asdf
+git clone https://github.com/<GITHUB_USER>/asdf.git
+# 或者直接克隆 asdf
+git clone https://github.com/asdf-vm/asdf.git
文档网站开发所需的工具都在文件 docs/.tool-versions
中使用 asdf
进行管理。使用以下命令添加插件:
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs
使用以下命令安装工具版本:
asdf install
根据 docs/package.json
文件安装 Node.js 依赖:
npm install
Vuepress (v2) 是我们用来构建 asdf 文档网站的静态站点生成器(SSG)。它被选中来取代 Docsify.js,因为我们希望在用户没有可用或未启用 JavaScript 时支持仅依靠 HTML。Docsify 无法做到这一点。除此之外,两者特性集合大致相同,重点是 Vuepress 可以用最少的配置编写 Markdown 文件。
package.json
包含了开发所需的脚本:
启动本地开发服务器:
npm run dev
在提交之前格式化代码:
npm run format
asdf
正在使用依赖 PR 标题中的约定式提交的自动化发布流水线。具体的文档可以查看 核心贡献指南.
当为文档更改创建 PR 请求时,请确保 PR 标题使用了约定式提交类型 docs
以及 docs: <description>
的格式。
网站的配置包含在几个 JavaScript 文件中,其中 JS 对象用于表示配置。它们是:
docs/.vuepress/config.js
:网站的根配置文件。请查看 Vuepress 文档 了解更多详情。为了简化根配置文件,更大的 JS 对象表示 导航栏和侧边栏 配置已经被提取并按照语言类型分隔开来。请参考以下文件:
docs/.vuepress/navbar.js
docs/.vuepress/sidebar.js
这些配置的官方文档位于 默认主题参考。
Vuepress 有一流的国际化支持。根配置文件 docs/.vuepress/config.js
定义了支持的语言类型及其 URL、在选择下拉菜单中的标题以及导航栏/侧边栏配置引用。
导航栏/侧边栏配置在上述配置文件中捕获,按语言类型分隔开并单独导出。
每种语言的 markdown 内容必须位于与根配置文件中 locale
键同名的目录位置。也就是:
{
+ ...
+ themeConfig: {
+ locales: {
+ "/": {
+ selectLanguageName: "English (US)",
+ sidebar: sidebar.en,
+ navbar: navbar.en
+ },
+ "/pt-BR/": {
+ selectLanguageName: "Brazilian Portuguese",
+ sidebar: sidebar.pt_br,
+ navbar: navbar.pt_br
+ }
+ }
+ }
+}
/pt-BR/
将要求 markdown 文件的同一集合位于 docs/pt-BR/
目录下,如下所示:
docs
+├─ README.md
+├─ foo.md
+├─ nested
+│ └─ README.md
+└─ pt-BR
+ ├─ README.md
+ ├─ foo.md
+ └─ nested
+ └─ README.md
请查看 Vuepress i18n 国际化官方文档 了解更多详情。
`,37)]))}const g=a(t,[["render",l]]);export{c as __pageData,g as default}; diff --git a/assets/zh-hans_contribute_first-party-plugins.md.CkiCExlE.js b/assets/zh-hans_contribute_first-party-plugins.md.CkiCExlE.js new file mode 100644 index 00000000..dc917b11 --- /dev/null +++ b/assets/zh-hans_contribute_first-party-plugins.md.CkiCExlE.js @@ -0,0 +1 @@ +import{_ as a,c as r,a2 as t,o as s}from"./chunks/framework.BQmytedh.js";const p=JSON.parse('{"title":"官方插件","description":"","frontmatter":{},"headers":[],"relativePath":"zh-hans/contribute/first-party-plugins.md","filePath":"zh-hans/contribute/first-party-plugins.md","lastUpdated":1643288544000}'),i={name:"zh-hans/contribute/first-party-plugins.md"};function l(o,e,n,d,f,c){return s(),r("div",null,e[0]||(e[0]=[t('asdf 核心团队已经开发了一些与他们日常工作相关的插件。随时欢迎大家维护和改进这些插件。这些插件所对应的存储库链接如下所示:
对于社区插件,请参考:
asdf-community
组织:一个用于长期维护 asdf
插件的协作、社区驱动的项目。asdf-plugins
缩写存储库:asdf
核心用于查找流行的 asdf
插件的缩写列表。asdf-plugin
主题搜索asdf 核心团队已经开发了一些与他们日常工作相关的插件。随时欢迎大家维护和改进这些插件。这些插件所对应的存储库链接如下所示:
对于社区插件,请参考:
asdf-community
组织:一个用于长期维护 asdf
插件的协作、社区驱动的项目。asdf-plugins
缩写存储库:asdf
核心用于查找流行的 asdf
插件的缩写列表。asdf-plugin
主题搜索asdf
安装过程包括:
asdf
核心asdf
.tool-versions
配置文件设置全局和项目版本asdf primarily requires git
& curl
. Here is a non-exhaustive list of commands to run for your package manager (some might automatically install these tools in later steps).
OS | Package Manager | Command |
---|---|---|
linux | Aptitude | apt install curl git |
linux | DNF | dnf install curl git |
linux | Pacman | pacman -S curl git |
linux | Zypper | zypper install curl git |
macOS | Homebrew | brew install coreutils curl git |
macOS | Spack | spack install coreutils curl git |
Note
sudo
may be required depending on your system configuration.
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.15.0
We highly recommend using the official git
method.
Method | Command |
---|---|
Homebrew | brew install asdf |
Pacman | git clone https://aur.archlinux.org/asdf-vm.git && cd asdf-vm && makepkg -si or use your preferred AUR helper |
根据 Shell 脚本、操作系统和安装方法的组合不同,相应的配置也会不同。展开以下与你的系统最匹配的选项:
在 ~/.bashrc
文件中加入以下内容:
. "$HOME/.asdf/asdf.sh"
补全功能必须在 .bashrc
文件中加入以下内容来配置完成:
. "$HOME/.asdf/completions/asdf.bash"
如果你正在使用 macOS Catalina 或者更新的版本, 默认的 shell 已经被修改为 ZSH。除非修改回 Bash, 否则请遵循 ZSH 的说明。
在 ~/.bash_profile
文件中加入以下内容:
. "$HOME/.asdf/asdf.sh"
补全功能必须在 .bash_profile
文件中使用以下内容手动配置完成:
. "$HOME/.asdf/completions/asdf.bash"
使用以下命令将 asdf.sh
加入到 ~/.bashrc
文件中:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bashrc
补全功能将需要 按照 Homebrew 的说明完成配置 或者执行以下命令:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bashrc
如果你正在使用 macOS Catalina 或者更新的版本, 默认的 shell 已经被修改为 ZSH。除非修改回 Bash, 否则请遵循 ZSH 的说明。
使用以下命令将 asdf.sh
加入到 ~/.bash_profile
文件中:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bash_profile
补全功能将需要 按照 Homebrew 的说明完成配置 或者执行以下命令:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bash_profile
在 ~/.config/fish/config.fish
文件中加入以下内容:
source ~/.asdf/asdf.fish
补全功能必须按照以下命令手动配置完成:
mkdir -p ~/.config/fish/completions; and ln -s ~/.asdf/completions/asdf.fish ~/.config/fish/completions
使用以下命令将 asdf.fish
加入到 ~/.config/fish/config.fish
文件中:
echo -e "\\nsource "(brew --prefix asdf)"/libexec/asdf.fish" >> ~/.config/fish/config.fish
Fish shell 的补全功能可以交给 Homebrew 处理. 很友好!
在 ~/.config/fish/config.fish
文件中加入以下内容:
source /opt/asdf-vm/asdf.fish
补全功能将会在安装过程中由 AUR 包管理器自动配置完成。
使用以下命令将 asdf.elv
加入到 ~/.config/elvish/rc.elv
文件中:
mkdir -p ~/.config/elvish/lib; ln -s ~/.asdf/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
补全功能将会自动配置。
使用以下命令将 asdf.elv
加入到 ~/.config/elvish/rc.elv
文件中:
mkdir -p ~/.config/elvish/lib; ln -s (brew --prefix asdf)/libexec/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
补全功能将会自动配置。
使用以下命令将 asdf.elv
加入到 ~/.config/elvish/rc.elv
文件中:
mkdir -p ~/.config/elvish/lib; ln -s /opt/asdf-vm/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
补全功能将会自动配置。
在 ~/.zshrc
文件中加入以下内容:
. "$HOME/.asdf/asdf.sh"
或者 使用 ZSH 框架插件,比如 asdf for oh-my-zsh 将会使脚本生效并安装补全功能。
补全功能会被 ZSH 框架 asdf
插件或者通过在 .zshrc
文件中加入以下内容自动配置:
# append completions to fpath
+fpath=(\${ASDF_DIR}/completions $fpath)
+# initialise completions with ZSH's compinit
+autoload -Uz compinit && compinit
compinit
配置,请确保 compinit
在 asdf.sh
生效位置的下方compinit
配置和 ZSH 框架,请确保 compinit
在框架生效位置的下方警告
如果你正在使用 ZSH 框架,有关的 asdf
插件或许需要更新才能通过 fpath
正确地使用最新的 ZSH 补全功能。Oh-My-ZSH asdf 插件还在更新中,请查看 ohmyzsh/ohmyzsh#8837 了解更多。
使用以下命令将 asdf.sh
加入到 ~/.zshrc
文件中:
echo -e "\\n. $(brew --prefix asdf)/libexec/asdf.sh" >> \${ZDOTDIR:-~}/.zshrc
或者 使用 ZSH 框架插件,比如 asdf for oh-my-zsh 将会使脚本生效并安装补全功能。
补全功能可以被 ZSH 框架 asdf
或者 按照 Homebrew 的指引 完成配置。如果你正在使用 ZSH 框架,有关的 asdf
插件或许需要更新才能通过 fpath
正确地使用最新的 ZSH 补全功能。Oh-My-ZSH asdf 插件还在更新中,请查看 ohmyzsh/ohmyzsh#8837 了解更多。
在 ~/.zshrc
文件中加入以下内容:
. /opt/asdf-vm/asdf.sh
补全功能会被放在一个对 ZSH 很友好的位置,但是 ZSH 必须使用自动补全完成配置。
在 ~/.config/powershell/profile.ps1
文件中加入以下内容:
. "$HOME/.asdf/asdf.ps1"
使用以下命令将 asdf.ps1
加入到 ~/.config/powershell/profile.ps1
文件中:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.ps1\\"" >> ~/.config/powershell/profile.ps1
在 ~/.config/powershell/profile.ps1
文件中加入以下内容:
. /opt/asdf-vm/asdf.ps1
使用以下命令将 asdf.nu
加入到 ~/.config/nushell/config.nu
文件中:
"\\n$env.ASDF_DIR = ($env.HOME | path join '.asdf')\\n source " + ($env.HOME | path join '.asdf/asdf.nu') | save --append $nu.config-path
补全功能将会自动配置。
使用以下命令将 asdf.nu
加入到 ~/.config/nushell/config.nu
文件中:
"\\n$env.ASDF_DIR = (brew --prefix asdf | str trim | into string | path join 'libexec')\\n source " + (brew --prefix asdf | str trim | into string | path join 'libexec/asdf.nu') | save --append $nu.config-path
补全功能将会自动配置。
使用以下命令将 asdf.nu
加入到 ~/.config/nushell/config.nu
文件中:
"\\n$env.ASDF_DIR = '/opt/asdf-vm/'\\n source /opt/asdf-vm/asdf.nu" | save --append $nu.config-path
补全功能将会自动配置。
在 ~/.profile
文件中加入以下内容:
export ASDF_DIR="$HOME/.asdf"
+. "$HOME/.asdf/asdf.sh"
使用以下命令将 asdf.sh
加入到 ~/.profile
文件中:
echo -e "\\nexport ASDF_DIR=\\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
+echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
在 ~/.profile
文件中加入以下内容:
export ASDF_DIR="/opt/asdf-vm"
+. /opt/asdf-vm/asdf.sh
asdf
脚本需要在设置好的 $PATH
之后和已经生效的框架(比如 oh-my-zsh 等等)之后的位置生效。
通常打开一个新的终端标签页来重启你的 shell 让 PATH
更改即时生效。
这样就完成了 asdf
核心的安装 🎉
asdf
仅在你安装插件、工具和管理它们的版本时才开始真正发挥作用。请继续阅读下面的指南来了解这些是如何做到的。
出于演示目的,我们将通过 asdf-nodejs
插件来安装和设置 Node.js。
每个插件都有依赖,所以我们需要确认应该列举了这些依赖的插件源码。对于 asdf-nodejs
来说,它们是:
操作系统 | 安装依赖 |
---|---|
Linux (Debian) | apt-get install dirmngr gpg curl gawk |
macOS | brew install gpg gawk |
我们应该提前安装这些依赖,因为有些插件有 post-install 钩子。
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
现在我们已经有了 Node.js 插件,所以我们可以开始安装某个版本了。
我们通过 asdf list all nodejs
可以看到所有可用的版本或者通过 asdf list all nodejs 14
查看版本子集。
我们将只安装最新可用的 latest
版本:
asdf install nodejs latest
注意
asdf
强制使用准确的版本。latest
是一个通过 asdf
来解析到执行时刻的实际版本号的辅助工具。
asdf
在从当前工作目录一直到 $HOME
目录的所有 .tool-versions
文件中进行工具的版本查找。查找在执行 asdf
管理的工具时实时发生。
警告
如果没有为工具找到指定的版本,则会出现错误。asdf current
将显示当前目录中的工具和版本解析结果,或者不存在,以便你可以观察哪些工具将无法执行。
全局默认配置在 $HOME/.tool-versions
文件中进行管理。使用以下命令可以设置一个全局版本:
asdf global nodejs latest
$HOME/.tool-versions
文件内容将会如下所示:
nodejs 16.5.0
某些操作系统已经有一些由系统而非 asdf
安装和管理的工具了,python
就是一个常见的例子。你需要告诉 asdf
将管理权还给系统。版本参考部分 将会引导你。
本地版本被定义在 $PWD/.tool-versions
文件中(当前工作目录)。通常,这将会是一个项目的 Git 存储库。当在你想要的目录执行:
asdf local nodejs latest
$PWD/.tool-versions
文件内容将会如下所示:
nodejs 16.5.0
asdf
支持从其他版本管理器的现有版本文件中迁移过来,比如 rbenv
的 .ruby-version
文件。这在每个插件中都原生支持。
asdf-nodejs
支持从 .nvmrc
和 .node-version
文件进行迁移。为了启用此功能,请在 asdf
配置文件 $HOME/.asdfrc
中加入以下内容:
legacy_version_file = yes
请查看 配置 参考页面可以了解更多配置选项。
恭喜你完成了 asdf
的快速上手 🎉 你现在可以管理你的项目的 nodejs
版本了。对于项目中的其他工具类型可以执行类似步骤即可!
asdf
还有更多命令需要熟悉,你可以通过运行 asdf --help
或者 asdf
来查看它们。命令主要分为三类:
asdf
安装过程包括:
asdf
核心asdf
.tool-versions
配置文件设置全局和项目版本asdf primarily requires git
& curl
. Here is a non-exhaustive list of commands to run for your package manager (some might automatically install these tools in later steps).
OS | Package Manager | Command |
---|---|---|
linux | Aptitude | apt install curl git |
linux | DNF | dnf install curl git |
linux | Pacman | pacman -S curl git |
linux | Zypper | zypper install curl git |
macOS | Homebrew | brew install coreutils curl git |
macOS | Spack | spack install coreutils curl git |
Note
sudo
may be required depending on your system configuration.
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.15.0
We highly recommend using the official git
method.
Method | Command |
---|---|
Homebrew | brew install asdf |
Pacman | git clone https://aur.archlinux.org/asdf-vm.git && cd asdf-vm && makepkg -si or use your preferred AUR helper |
根据 Shell 脚本、操作系统和安装方法的组合不同,相应的配置也会不同。展开以下与你的系统最匹配的选项:
在 ~/.bashrc
文件中加入以下内容:
. "$HOME/.asdf/asdf.sh"
补全功能必须在 .bashrc
文件中加入以下内容来配置完成:
. "$HOME/.asdf/completions/asdf.bash"
如果你正在使用 macOS Catalina 或者更新的版本, 默认的 shell 已经被修改为 ZSH。除非修改回 Bash, 否则请遵循 ZSH 的说明。
在 ~/.bash_profile
文件中加入以下内容:
. "$HOME/.asdf/asdf.sh"
补全功能必须在 .bash_profile
文件中使用以下内容手动配置完成:
. "$HOME/.asdf/completions/asdf.bash"
使用以下命令将 asdf.sh
加入到 ~/.bashrc
文件中:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bashrc
补全功能将需要 按照 Homebrew 的说明完成配置 或者执行以下命令:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bashrc
如果你正在使用 macOS Catalina 或者更新的版本, 默认的 shell 已经被修改为 ZSH。除非修改回 Bash, 否则请遵循 ZSH 的说明。
使用以下命令将 asdf.sh
加入到 ~/.bash_profile
文件中:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.bash_profile
补全功能将需要 按照 Homebrew 的说明完成配置 或者执行以下命令:
echo -e "\\n. \\"$(brew --prefix asdf)/etc/bash_completion.d/asdf.bash\\"" >> ~/.bash_profile
在 ~/.config/fish/config.fish
文件中加入以下内容:
source ~/.asdf/asdf.fish
补全功能必须按照以下命令手动配置完成:
mkdir -p ~/.config/fish/completions; and ln -s ~/.asdf/completions/asdf.fish ~/.config/fish/completions
使用以下命令将 asdf.fish
加入到 ~/.config/fish/config.fish
文件中:
echo -e "\\nsource "(brew --prefix asdf)"/libexec/asdf.fish" >> ~/.config/fish/config.fish
Fish shell 的补全功能可以交给 Homebrew 处理. 很友好!
在 ~/.config/fish/config.fish
文件中加入以下内容:
source /opt/asdf-vm/asdf.fish
补全功能将会在安装过程中由 AUR 包管理器自动配置完成。
使用以下命令将 asdf.elv
加入到 ~/.config/elvish/rc.elv
文件中:
mkdir -p ~/.config/elvish/lib; ln -s ~/.asdf/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
补全功能将会自动配置。
使用以下命令将 asdf.elv
加入到 ~/.config/elvish/rc.elv
文件中:
mkdir -p ~/.config/elvish/lib; ln -s (brew --prefix asdf)/libexec/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
补全功能将会自动配置。
使用以下命令将 asdf.elv
加入到 ~/.config/elvish/rc.elv
文件中:
mkdir -p ~/.config/elvish/lib; ln -s /opt/asdf-vm/asdf.elv ~/.config/elvish/lib/asdf.elv
+echo "\\n"'use asdf _asdf; var asdf~ = $_asdf:asdf~' >> ~/.config/elvish/rc.elv
+echo "\\n"'set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~' >> ~/.config/elvish/rc.elv
补全功能将会自动配置。
在 ~/.zshrc
文件中加入以下内容:
. "$HOME/.asdf/asdf.sh"
或者 使用 ZSH 框架插件,比如 asdf for oh-my-zsh 将会使脚本生效并安装补全功能。
补全功能会被 ZSH 框架 asdf
插件或者通过在 .zshrc
文件中加入以下内容自动配置:
# append completions to fpath
+fpath=(\${ASDF_DIR}/completions $fpath)
+# initialise completions with ZSH's compinit
+autoload -Uz compinit && compinit
compinit
配置,请确保 compinit
在 asdf.sh
生效位置的下方compinit
配置和 ZSH 框架,请确保 compinit
在框架生效位置的下方警告
如果你正在使用 ZSH 框架,有关的 asdf
插件或许需要更新才能通过 fpath
正确地使用最新的 ZSH 补全功能。Oh-My-ZSH asdf 插件还在更新中,请查看 ohmyzsh/ohmyzsh#8837 了解更多。
使用以下命令将 asdf.sh
加入到 ~/.zshrc
文件中:
echo -e "\\n. $(brew --prefix asdf)/libexec/asdf.sh" >> \${ZDOTDIR:-~}/.zshrc
或者 使用 ZSH 框架插件,比如 asdf for oh-my-zsh 将会使脚本生效并安装补全功能。
补全功能可以被 ZSH 框架 asdf
或者 按照 Homebrew 的指引 完成配置。如果你正在使用 ZSH 框架,有关的 asdf
插件或许需要更新才能通过 fpath
正确地使用最新的 ZSH 补全功能。Oh-My-ZSH asdf 插件还在更新中,请查看 ohmyzsh/ohmyzsh#8837 了解更多。
在 ~/.zshrc
文件中加入以下内容:
. /opt/asdf-vm/asdf.sh
补全功能会被放在一个对 ZSH 很友好的位置,但是 ZSH 必须使用自动补全完成配置。
在 ~/.config/powershell/profile.ps1
文件中加入以下内容:
. "$HOME/.asdf/asdf.ps1"
使用以下命令将 asdf.ps1
加入到 ~/.config/powershell/profile.ps1
文件中:
echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.ps1\\"" >> ~/.config/powershell/profile.ps1
在 ~/.config/powershell/profile.ps1
文件中加入以下内容:
. /opt/asdf-vm/asdf.ps1
使用以下命令将 asdf.nu
加入到 ~/.config/nushell/config.nu
文件中:
"\\n$env.ASDF_DIR = ($env.HOME | path join '.asdf')\\n source " + ($env.HOME | path join '.asdf/asdf.nu') | save --append $nu.config-path
补全功能将会自动配置。
使用以下命令将 asdf.nu
加入到 ~/.config/nushell/config.nu
文件中:
"\\n$env.ASDF_DIR = (brew --prefix asdf | str trim | into string | path join 'libexec')\\n source " + (brew --prefix asdf | str trim | into string | path join 'libexec/asdf.nu') | save --append $nu.config-path
补全功能将会自动配置。
使用以下命令将 asdf.nu
加入到 ~/.config/nushell/config.nu
文件中:
"\\n$env.ASDF_DIR = '/opt/asdf-vm/'\\n source /opt/asdf-vm/asdf.nu" | save --append $nu.config-path
补全功能将会自动配置。
在 ~/.profile
文件中加入以下内容:
export ASDF_DIR="$HOME/.asdf"
+. "$HOME/.asdf/asdf.sh"
使用以下命令将 asdf.sh
加入到 ~/.profile
文件中:
echo -e "\\nexport ASDF_DIR=\\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
+echo -e "\\n. \\"$(brew --prefix asdf)/libexec/asdf.sh\\"" >> ~/.profile
在 ~/.profile
文件中加入以下内容:
export ASDF_DIR="/opt/asdf-vm"
+. /opt/asdf-vm/asdf.sh
asdf
脚本需要在设置好的 $PATH
之后和已经生效的框架(比如 oh-my-zsh 等等)之后的位置生效。
通常打开一个新的终端标签页来重启你的 shell 让 PATH
更改即时生效。
这样就完成了 asdf
核心的安装 🎉
asdf
仅在你安装插件、工具和管理它们的版本时才开始真正发挥作用。请继续阅读下面的指南来了解这些是如何做到的。
出于演示目的,我们将通过 asdf-nodejs
插件来安装和设置 Node.js。
每个插件都有依赖,所以我们需要确认应该列举了这些依赖的插件源码。对于 asdf-nodejs
来说,它们是:
操作系统 | 安装依赖 |
---|---|
Linux (Debian) | apt-get install dirmngr gpg curl gawk |
macOS | brew install gpg gawk |
我们应该提前安装这些依赖,因为有些插件有 post-install 钩子。
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
现在我们已经有了 Node.js 插件,所以我们可以开始安装某个版本了。
我们通过 asdf list all nodejs
可以看到所有可用的版本或者通过 asdf list all nodejs 14
查看版本子集。
我们将只安装最新可用的 latest
版本:
asdf install nodejs latest
注意
asdf
强制使用准确的版本。latest
是一个通过 asdf
来解析到执行时刻的实际版本号的辅助工具。
asdf
在从当前工作目录一直到 $HOME
目录的所有 .tool-versions
文件中进行工具的版本查找。查找在执行 asdf
管理的工具时实时发生。
警告
如果没有为工具找到指定的版本,则会出现错误。asdf current
将显示当前目录中的工具和版本解析结果,或者不存在,以便你可以观察哪些工具将无法执行。
全局默认配置在 $HOME/.tool-versions
文件中进行管理。使用以下命令可以设置一个全局版本:
asdf global nodejs latest
$HOME/.tool-versions
文件内容将会如下所示:
nodejs 16.5.0
某些操作系统已经有一些由系统而非 asdf
安装和管理的工具了,python
就是一个常见的例子。你需要告诉 asdf
将管理权还给系统。版本参考部分 将会引导你。
本地版本被定义在 $PWD/.tool-versions
文件中(当前工作目录)。通常,这将会是一个项目的 Git 存储库。当在你想要的目录执行:
asdf local nodejs latest
$PWD/.tool-versions
文件内容将会如下所示:
nodejs 16.5.0
asdf
支持从其他版本管理器的现有版本文件中迁移过来,比如 rbenv
的 .ruby-version
文件。这在每个插件中都原生支持。
asdf-nodejs
支持从 .nvmrc
和 .node-version
文件进行迁移。为了启用此功能,请在 asdf
配置文件 $HOME/.asdfrc
中加入以下内容:
legacy_version_file = yes
请查看 配置 参考页面可以了解更多配置选项。
恭喜你完成了 asdf
的快速上手 🎉 你现在可以管理你的项目的 nodejs
版本了。对于项目中的其他工具类型可以执行类似步骤即可!
asdf
还有更多命令需要熟悉,你可以通过运行 asdf --help
或者 asdf
来查看它们。命令主要分为三类:
asdf
是一个工具版本管理器。所有的工具版本定义都包含在一个文件(.tool-versions
)中,你可以将配置文件放在项目的 Git 存储库中以便于和团队其他成员共享,从而确保每个人都使用完全相同的工具版本。
传统工作方式需要多个命令行版本管理器,而且每个管理器都有其不同的 API、配置文件和实现方式(比如,$PATH
操作、垫片、环境变量等等)。asdf
提供单个交互方式和配置文件来简化开发工作流程,并可通过简单的插件接口扩展到所有工具和运行环境。
一旦 asdf
核心在 Shell 配置中设置好之后,你可以安装插件来管理特定的工具。当通过插件安装工具时,安装的可执行程序会为每个可执行程序创建 垫片。当你尝试运行其中一个可执行程序时,将运行垫片,从而允许 asdf
识别 .tool-versions
文件中设置的工具版本并执行该版本。
nvm, n 和 rbenv 等工具都是用 Shell 脚本写的,这些脚本能为工具安装的可执行程序创建垫片。
asdf
非常相似,目的是在工具/运行环境版本管理领域竞争。asdf
的区别之处在于它的插件系统,它消除了每个工具/运行环境对管理工具的需求、每个管理工具的不同命令以及存储库中不同的*-版本
文件。
使用可以根据当前目录加载和卸载环境变量的新功能增强现有 shell。
asdf
不管理环境变量,但是有一个插件 asdf-direnv
可以用来集成 direnv 的特性到 asdf
中。
请查看 direnv 文档 了解更多。
macOS(或者 Linux)上缺失包的管理器
Homebrew 管理你的软件包及其上游依赖。asdf
不管理上游依赖,它不是包管理器。这个责任取决于用户,尽管我们试图保持依赖关系列表很小。
请查看 Homebrew 文档 了解更多。
Nix 是一种采用独特方法进行软件包管理和系统配置的工具
NixOS 旨在通过管理每个工具的整个依赖关系树中软件包的确切版本来构建真正可重复的环境,有些是 asdf
无法做到的。NixOS 使用自己的编程语言、许多命令行工具和超过 60,000 个包的包集合来实现这一点。
同样,asdf
不管理上游依赖,并且它不是一个包管理器。
请查看 NixOS 文档 了解更多。
asdf
确保团队可以使用完全相同的工具版本,通过插件系统支持很多工具,以及作为 Shell 配置中包含的单个 Shell 脚本的 简单性和熟悉性 。
注意
asdf
并不打算成为一个系统包管理器。它是一个工具版本管理器。仅仅因为你可以为任何工具创建插件并使用 asdf
管理其版本,并不意味着这是这个特定工具的最佳实践方案。
asdf
是一个工具版本管理器。所有的工具版本定义都包含在一个文件(.tool-versions
)中,你可以将配置文件放在项目的 Git 存储库中以便于和团队其他成员共享,从而确保每个人都使用完全相同的工具版本。
传统工作方式需要多个命令行版本管理器,而且每个管理器都有其不同的 API、配置文件和实现方式(比如,$PATH
操作、垫片、环境变量等等)。asdf
提供单个交互方式和配置文件来简化开发工作流程,并可通过简单的插件接口扩展到所有工具和运行环境。
一旦 asdf
核心在 Shell 配置中设置好之后,你可以安装插件来管理特定的工具。当通过插件安装工具时,安装的可执行程序会为每个可执行程序创建 垫片。当你尝试运行其中一个可执行程序时,将运行垫片,从而允许 asdf
识别 .tool-versions
文件中设置的工具版本并执行该版本。
nvm, n 和 rbenv 等工具都是用 Shell 脚本写的,这些脚本能为工具安装的可执行程序创建垫片。
asdf
非常相似,目的是在工具/运行环境版本管理领域竞争。asdf
的区别之处在于它的插件系统,它消除了每个工具/运行环境对管理工具的需求、每个管理工具的不同命令以及存储库中不同的*-版本
文件。
使用可以根据当前目录加载和卸载环境变量的新功能增强现有 shell。
asdf
不管理环境变量,但是有一个插件 asdf-direnv
可以用来集成 direnv 的特性到 asdf
中。
请查看 direnv 文档 了解更多。
macOS(或者 Linux)上缺失包的管理器
Homebrew 管理你的软件包及其上游依赖。asdf
不管理上游依赖,它不是包管理器。这个责任取决于用户,尽管我们试图保持依赖关系列表很小。
请查看 Homebrew 文档 了解更多。
Nix 是一种采用独特方法进行软件包管理和系统配置的工具
NixOS 旨在通过管理每个工具的整个依赖关系树中软件包的确切版本来构建真正可重复的环境,有些是 asdf
无法做到的。NixOS 使用自己的编程语言、许多命令行工具和超过 60,000 个包的包集合来实现这一点。
同样,asdf
不管理上游依赖,并且它不是一个包管理器。
请查看 NixOS 文档 了解更多。
asdf
确保团队可以使用完全相同的工具版本,通过插件系统支持很多工具,以及作为 Shell 配置中包含的单个 Shell 脚本的 简单性和熟悉性 。
注意
asdf
并不打算成为一个系统包管理器。它是一个工具版本管理器。仅仅因为你可以为任何工具创建插件并使用 asdf
管理其版本,并不意味着这是这个特定工具的最佳实践方案。
asdf
中所有可用命令的列表。这个列表就是 asdf help
命令的打印内容。
MANAGE PLUGINS
+asdf plugin add <name> [<git-url>] Add a plugin from the plugin repo OR,
+ add a Git repo as a plugin by
+ specifying the name and repo url
+asdf plugin list [--urls] [--refs] List installed plugins. Optionally show
+ git urls and git-ref
+asdf plugin list all List plugins registered on asdf-plugins
+ repository with URLs
+asdf plugin remove <name> Remove plugin and package versions
+asdf plugin update <name> [<git-ref>] Update a plugin to latest commit on
+ default branch or a particular git-ref
+asdf plugin update --all Update all plugins to latest commit on
+ default branch
+
+
+MANAGE PACKAGES
+asdf current Display current version set or being
+ used for all packages
+asdf current <name> Display current version set or being
+ used for package
+asdf global <name> <version> Set the package global version
+asdf global <name> latest[:<version>] Set the package global version to the
+ latest provided version
+asdf help <name> [<version>] Output documentation for plugin and tool
+asdf install Install all the package versions listed
+ in the .tool-versions file
+asdf install <name> Install one tool at the version
+ specified in the .tool-versions file
+asdf install <name> <version> Install a specific version of a package
+asdf install <name> latest[:<version>] Install the latest stable version of a
+ package, or with optional version,
+ install the latest stable version that
+ begins with the given string
+asdf latest <name> [<version>] Show latest stable version of a package
+asdf latest --all Show latest stable version of all the
+ packages and if they are installed
+asdf list <name> [version] List installed versions of a package and
+ optionally filter the versions
+asdf list all <name> [<version>] List all versions of a package and
+ optionally filter the returned versions
+asdf local <name> <version> Set the package local version
+asdf local <name> latest[:<version>] Set the package local version to the
+ latest provided version
+asdf shell <name> <version> Set the package version to
+ \`ASDF_\${LANG}_VERSION\` in the current shell
+asdf uninstall <name> <version> Remove a specific version of a package
+asdf where <name> [<version>] Display install path for an installed
+ or current version
+asdf which <command> Display the path to an executable
+
+
+UTILS
+asdf exec <command> [args...] Executes the command shim for current version
+asdf env <command> [util] Runs util (default: \`env\`) inside the
+ environment used for command shim execution.
+asdf info Print OS, Shell and ASDF debug information.
+asdf version Print the currently installed version of ASDF
+asdf reshim <name> <version> Recreate shims for version of a package
+asdf shim-versions <command> List the plugins and versions that
+ provide a command
+asdf update Update asdf to the latest stable release
+asdf update --head Update asdf to the latest on the master branch
+
+RESOURCES
+GitHub: https://github.com/asdf-vm/asdf
+Docs: https://asdf-vm.com
asdf
中所有可用命令的列表。这个列表就是 asdf help
命令的打印内容。
MANAGE PLUGINS
+asdf plugin add <name> [<git-url>] Add a plugin from the plugin repo OR,
+ add a Git repo as a plugin by
+ specifying the name and repo url
+asdf plugin list [--urls] [--refs] List installed plugins. Optionally show
+ git urls and git-ref
+asdf plugin list all List plugins registered on asdf-plugins
+ repository with URLs
+asdf plugin remove <name> Remove plugin and package versions
+asdf plugin update <name> [<git-ref>] Update a plugin to latest commit on
+ default branch or a particular git-ref
+asdf plugin update --all Update all plugins to latest commit on
+ default branch
+
+
+MANAGE PACKAGES
+asdf current Display current version set or being
+ used for all packages
+asdf current <name> Display current version set or being
+ used for package
+asdf global <name> <version> Set the package global version
+asdf global <name> latest[:<version>] Set the package global version to the
+ latest provided version
+asdf help <name> [<version>] Output documentation for plugin and tool
+asdf install Install all the package versions listed
+ in the .tool-versions file
+asdf install <name> Install one tool at the version
+ specified in the .tool-versions file
+asdf install <name> <version> Install a specific version of a package
+asdf install <name> latest[:<version>] Install the latest stable version of a
+ package, or with optional version,
+ install the latest stable version that
+ begins with the given string
+asdf latest <name> [<version>] Show latest stable version of a package
+asdf latest --all Show latest stable version of all the
+ packages and if they are installed
+asdf list <name> [version] List installed versions of a package and
+ optionally filter the versions
+asdf list all <name> [<version>] List all versions of a package and
+ optionally filter the returned versions
+asdf local <name> <version> Set the package local version
+asdf local <name> latest[:<version>] Set the package local version to the
+ latest provided version
+asdf shell <name> <version> Set the package version to
+ \`ASDF_\${LANG}_VERSION\` in the current shell
+asdf uninstall <name> <version> Remove a specific version of a package
+asdf where <name> [<version>] Display install path for an installed
+ or current version
+asdf which <command> Display the path to an executable
+
+
+UTILS
+asdf exec <command> [args...] Executes the command shim for current version
+asdf env <command> [util] Runs util (default: \`env\`) inside the
+ environment used for command shim execution.
+asdf info Print OS, Shell and ASDF debug information.
+asdf version Print the currently installed version of ASDF
+asdf reshim <name> <version> Recreate shims for version of a package
+asdf shim-versions <command> List the plugins and versions that
+ provide a command
+asdf update Update asdf to the latest stable release
+asdf update --head Update asdf to the latest on the master branch
+
+RESOURCES
+GitHub: https://github.com/asdf-vm/asdf
+Docs: https://asdf-vm.com
asdf
配置既包括可共享的 .tool-versions
文件,也包括用户特定的自定义 .asdfrc
和环境变量。
.tool-versions
无论何时 .tool-versions
出现在目录中,它所声明的工具版本将会被用于该目录和任意子目录。
注意
全局默认配置将设置在文件$HOME/.tool-versions
中
一个 .tool-versions
文件示例如下所示:
ruby 2.5.3
+nodejs 10.15.0
你也可以包含注释在里面:
ruby 2.5.3 # 这是一个注释
+# 这是另一个注释
+nodejs 10.15.0
版本号可以有如下格式:
10.15.0
- 实际的版本号。支持下载二进制文件的插件将会下载二进制文件。ref:v1.0.2-a
或者 ref:39cb398vb39
- 指定标签/提交/分支从 github 下载并编译。path:~/src/elixir
- 要使用的工具的自定义编译版本的路径。这种方式供语言开发者等使用。system
- 此关键字会导致 asdf 传递系统上未由 asdf 管理的工具版本。提示
多版本可以通过空格将它们分隔开来。比如,使用 Python 3.7.2
回退到 Python 2.7.15
最后回退到 system
Python,可以将以下行的内容添加到 .tool-versions
文件中。
python 3.7.2 2.7.15 system
为了安装 .tool-versions
文件中定义的所有工具,在包含 .tool-versions
文件的目录中不带其他参数执行 asdf install
命令。
为了安装 .tool-versions
文件中定义的某个工具,在包含 .tool-versions
文件的目录中运行 asdf install <name>
命令。这个工具将会安装 .tool-versions
文件所指定的版本。
可以直接编辑这个文件或者使用 asdf local
(或者 asdf global
)来更新工具版本。
$HOME/.asdfrc
给你的家目录添加一个 .asdfrc
文件然后 asdf 将会使用这个文件所指定的配置。下面的文件展示了所需的格式,其中包含用于演示的默认值:
legacy_version_file = no
+use_release_candidates = no
+always_keep_download = no
+plugin_repository_last_check_duration = 60
+disable_plugin_short_name_repository = no
+concurrency = auto
legacy_version_file
插件 支持 读取其他版本管理器使用的版本文件,比如,Ruby 的 rbenv
的 .ruby-version
文件。
ASDF_CONFIG_FILE
- 如上所述默认为 ~/.asdfrc
文件。可以被设置在任何位置。ASDF_DEFAULT_TOOL_VERSIONS_FILENAME
- 存储工具名称和版本的文件名。默认为 .tool-versions
。可以是任何有效的文件名。通常,除非你知道你希望 asdf 忽略 .tool-versions
文件,否则不应该覆盖默认值。ASDF_DIR
- 默认为 ~/.asdf
- asdf
脚本的位置。如果你把 asdf
安装到了其他目录,请设置该变量到那个目录。比如,如果通过 AUR 进行安装,则应设置该变量为 /opt/asdf-vm
。ASDF_DATA_DIR
- 默认为 ~/.asdf
- asdf
安装插件、垫片和安装器的位置。可以被设置在上一节提到的生效 asdf.sh
或者 asdf.fish
之间的任何位置。对于 Elvish,这可以设置在 use asdf
上面。用户不必担心本节,因为它描述了对包管理器和集成者有用的 asdf
的内部配置。
$ASDF_DIR/asdf_updates_disabled
:当此文件存在时(内容无关),通过 asdf update
命令进行的更新 将会被禁用。像 Pacman 或者 Homebrew 等包管理器使用它来确保个性化安装的正确的更新方法。asdf
配置既包括可共享的 .tool-versions
文件,也包括用户特定的自定义 .asdfrc
和环境变量。
.tool-versions
无论何时 .tool-versions
出现在目录中,它所声明的工具版本将会被用于该目录和任意子目录。
注意
全局默认配置将设置在文件$HOME/.tool-versions
中
一个 .tool-versions
文件示例如下所示:
ruby 2.5.3
+nodejs 10.15.0
你也可以包含注释在里面:
ruby 2.5.3 # 这是一个注释
+# 这是另一个注释
+nodejs 10.15.0
版本号可以有如下格式:
10.15.0
- 实际的版本号。支持下载二进制文件的插件将会下载二进制文件。ref:v1.0.2-a
或者 ref:39cb398vb39
- 指定标签/提交/分支从 github 下载并编译。path:~/src/elixir
- 要使用的工具的自定义编译版本的路径。这种方式供语言开发者等使用。system
- 此关键字会导致 asdf 传递系统上未由 asdf 管理的工具版本。提示
多版本可以通过空格将它们分隔开来。比如,使用 Python 3.7.2
回退到 Python 2.7.15
最后回退到 system
Python,可以将以下行的内容添加到 .tool-versions
文件中。
python 3.7.2 2.7.15 system
为了安装 .tool-versions
文件中定义的所有工具,在包含 .tool-versions
文件的目录中不带其他参数执行 asdf install
命令。
为了安装 .tool-versions
文件中定义的某个工具,在包含 .tool-versions
文件的目录中运行 asdf install <name>
命令。这个工具将会安装 .tool-versions
文件所指定的版本。
可以直接编辑这个文件或者使用 asdf local
(或者 asdf global
)来更新工具版本。
$HOME/.asdfrc
给你的家目录添加一个 .asdfrc
文件然后 asdf 将会使用这个文件所指定的配置。下面的文件展示了所需的格式,其中包含用于演示的默认值:
legacy_version_file = no
+use_release_candidates = no
+always_keep_download = no
+plugin_repository_last_check_duration = 60
+disable_plugin_short_name_repository = no
+concurrency = auto
legacy_version_file
插件 支持 读取其他版本管理器使用的版本文件,比如,Ruby 的 rbenv
的 .ruby-version
文件。
ASDF_CONFIG_FILE
- 如上所述默认为 ~/.asdfrc
文件。可以被设置在任何位置。ASDF_DEFAULT_TOOL_VERSIONS_FILENAME
- 存储工具名称和版本的文件名。默认为 .tool-versions
。可以是任何有效的文件名。通常,除非你知道你希望 asdf 忽略 .tool-versions
文件,否则不应该覆盖默认值。ASDF_DIR
- 默认为 ~/.asdf
- asdf
脚本的位置。如果你把 asdf
安装到了其他目录,请设置该变量到那个目录。比如,如果通过 AUR 进行安装,则应设置该变量为 /opt/asdf-vm
。ASDF_DATA_DIR
- 默认为 ~/.asdf
- asdf
安装插件、垫片和安装器的位置。可以被设置在上一节提到的生效 asdf.sh
或者 asdf.fish
之间的任何位置。对于 Elvish,这可以设置在 use asdf
上面。用户不必担心本节,因为它描述了对包管理器和集成者有用的 asdf
的内部配置。
$ASDF_DIR/asdf_updates_disabled
:当此文件存在时(内容无关),通过 asdf update
命令进行的更新 将会被禁用。像 Pacman 或者 Homebrew 等包管理器使用它来确保个性化安装的正确的更新方法。核心 asdf
命令列表很小,但可以促进很多工作流。
请查看 快速上手 了解更多详情。
asdf exec <command> [args...]
执行当前版本的命令垫片。
asdf env <command> [util]
asdf info
用于打印操作系统、Shell 和 asdf
调试信息的辅助命令。在报告 bug 时需要共享这些信息。
asdf reshim <name> <version>
这将为某个包的当前版本重新创建垫片。默认情况下,垫片是在某个工具安装的过程中由插件创建。一些工具像 npm 命令行 允许全局安装可执行程序,比如使用 npm install -g yarn
命令安装 Yarn。因为这个可执行程序不是通过插件生命周期安装的,所以还没有对应的垫片存在。asdf reshim nodejs <version>
命令将会强制重新计算任何新可执行程序的垫片,类似 nodejs
的 versions
版本下的 yarn
。
asdf shim-versions <command>
列举为命令提供垫片的插件和版本。
例如,Node.js 附带了两个可执行程序,node
和 npm
。当使用 asdf-nodejs
插件安装了这些工具的很多版本时,执行
shim-versions\` 命令会返回:
➜ asdf shim-versions node
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
➜ asdf shim-versions npm
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
asdf
有一个依赖于 Git (我们推荐的安装方法)的内置命令用于更新。如果你使用了其他方法安装,则应按照该方法的步骤操作:
方法 | 最新稳定版本 | master 分支上的最新提交 |
---|---|---|
asdf (Git) | asdf update | asdf update --head |
Homebrew | brew upgrade asdf | brew upgrade asdf --fetch-HEAD |
Pacman | 下载一个新的 PKGBUILD 并且重新编译 或者使用你习惯的 AUR helper |
根据以下步骤卸载 asdf
:
~/.bashrc
配置文件中移除生效 asdf.sh
和补全功能的行:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
目录:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bash_profile
配置文件中移除生效 asdf.sh
和补全功能的行:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
目录:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
配置文件中移除生效 asdf.sh
和补全功能的行:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
补全功能可能已经如 Homebrew 的指南 那样配置了,因此请按照他们的指南找出要删除的内容。
brew uninstall asdf --force
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
如果你正在使用 macOS Catalina 以及更新版本,默认的 shell 已经变成了 ZSH。如果你在 ~/.bash_profile
文件中找不到任何配置,则可能位于 ~/.zshrc
中。在这种情况下,请按照 ZSH 指南进行操作。
~/.bash_profile
配置文件中移除生效 asdf.sh
和补全功能的行:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
补全功能可能已经如 Homebrew 的指南 那样配置了,因此请按照他们的指南找出要删除的内容。
brew uninstall asdf --force
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
配置文件中移除生效 asdf.sh
和补全功能的行:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
目录:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
配置文件中移除生效 asdf.fish
的行:source ~/.asdf/asdf.fish
以及使用以下命令移除补全功能:
rm -rf ~/.config/fish/completions/asdf.fish
$HOME/.asdf
目录:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
配置文件中移除生效 asdf.fish
的行:source "(brew --prefix asdf)"/libexec/asdf.fish
brew uninstall asdf --force
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
配置文件中移除生效 asdf.fish
的行:source /opt/asdf-vm/asdf.fish
pacman -Rs asdf-vm
$HOME/.asdf
目录:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
配置文件中移除使用 asdf
模块的行:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
以及使用以下命令卸载 asdf
模块:
rm -f ~/.config/elvish/lib/asdf.elv
$HOME/.asdf
目录:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
配置文件中移除使用 asdf
模块的行:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
以及使用以下命令卸载 asdf
模块:
rm -f ~/.config/elvish/lib/asdf.elv
brew uninstall asdf --force
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
配置文件中移除使用 asdf
模块的行:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
以及使用以下命令卸载 asdf
模块:
rm -f ~/.config/elvish/lib/asdf.elv
pacman -Rs asdf-vm
$HOME/.asdf
目录:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
配置文件中移除生效 asdf.sh
和补全功能的行:. "$HOME/.asdf/asdf.sh"
+# ...
+fpath=(\${ASDF_DIR}/completions $fpath)
+autoload -Uz compinit
+compinit
或者 ZSH 框架插件(如果用了的话)
$HOME/.asdf
目录:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
配置文件中移除生效 asdf.sh
的行:. $(brew --prefix asdf)/libexec/asdf.sh
brew uninstall asdf --force && brew autoremove
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
配置文件中移除生效 asdf.sh
的行:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
目录rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
恭喜你完成了 🎉
`,41)]))}const F=i(h,[["render",e]]);export{c as __pageData,F as default}; diff --git a/assets/zh-hans_manage_core.md.Cn8uDogS.lean.js b/assets/zh-hans_manage_core.md.Cn8uDogS.lean.js new file mode 100644 index 00000000..c3a6ebf1 --- /dev/null +++ b/assets/zh-hans_manage_core.md.Cn8uDogS.lean.js @@ -0,0 +1,18 @@ +import{_ as i,c as a,a2 as l,o as t}from"./chunks/framework.BQmytedh.js";const c=JSON.parse('{"title":"核心","description":"","frontmatter":{},"headers":[],"relativePath":"zh-hans/manage/core.md","filePath":"zh-hans/manage/core.md","lastUpdated":1687069487000}'),h={name:"zh-hans/manage/core.md"};function e(n,s,p,k,d,o){return t(),a("div",null,s[0]||(s[0]=[l(`核心 asdf
命令列表很小,但可以促进很多工作流。
请查看 快速上手 了解更多详情。
asdf exec <command> [args...]
执行当前版本的命令垫片。
asdf env <command> [util]
asdf info
用于打印操作系统、Shell 和 asdf
调试信息的辅助命令。在报告 bug 时需要共享这些信息。
asdf reshim <name> <version>
这将为某个包的当前版本重新创建垫片。默认情况下,垫片是在某个工具安装的过程中由插件创建。一些工具像 npm 命令行 允许全局安装可执行程序,比如使用 npm install -g yarn
命令安装 Yarn。因为这个可执行程序不是通过插件生命周期安装的,所以还没有对应的垫片存在。asdf reshim nodejs <version>
命令将会强制重新计算任何新可执行程序的垫片,类似 nodejs
的 versions
版本下的 yarn
。
asdf shim-versions <command>
列举为命令提供垫片的插件和版本。
例如,Node.js 附带了两个可执行程序,node
和 npm
。当使用 asdf-nodejs
插件安装了这些工具的很多版本时,执行
shim-versions\` 命令会返回:
➜ asdf shim-versions node
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
➜ asdf shim-versions npm
+nodejs 14.8.0
+nodejs 14.17.3
+nodejs 16.5.0
asdf
有一个依赖于 Git (我们推荐的安装方法)的内置命令用于更新。如果你使用了其他方法安装,则应按照该方法的步骤操作:
方法 | 最新稳定版本 | master 分支上的最新提交 |
---|---|---|
asdf (Git) | asdf update | asdf update --head |
Homebrew | brew upgrade asdf | brew upgrade asdf --fetch-HEAD |
Pacman | 下载一个新的 PKGBUILD 并且重新编译 或者使用你习惯的 AUR helper |
根据以下步骤卸载 asdf
:
~/.bashrc
配置文件中移除生效 asdf.sh
和补全功能的行:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
目录:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bash_profile
配置文件中移除生效 asdf.sh
和补全功能的行:. "$HOME/.asdf/asdf.sh"
+. "$HOME/.asdf/completions/asdf.bash"
$HOME/.asdf
目录:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
配置文件中移除生效 asdf.sh
和补全功能的行:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
补全功能可能已经如 Homebrew 的指南 那样配置了,因此请按照他们的指南找出要删除的内容。
brew uninstall asdf --force
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
如果你正在使用 macOS Catalina 以及更新版本,默认的 shell 已经变成了 ZSH。如果你在 ~/.bash_profile
文件中找不到任何配置,则可能位于 ~/.zshrc
中。在这种情况下,请按照 ZSH 指南进行操作。
~/.bash_profile
配置文件中移除生效 asdf.sh
和补全功能的行:. $(brew --prefix asdf)/libexec/asdf.sh
+. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash
补全功能可能已经如 Homebrew 的指南 那样配置了,因此请按照他们的指南找出要删除的内容。
brew uninstall asdf --force
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.bashrc
配置文件中移除生效 asdf.sh
和补全功能的行:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
目录:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
配置文件中移除生效 asdf.fish
的行:source ~/.asdf/asdf.fish
以及使用以下命令移除补全功能:
rm -rf ~/.config/fish/completions/asdf.fish
$HOME/.asdf
目录:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
配置文件中移除生效 asdf.fish
的行:source "(brew --prefix asdf)"/libexec/asdf.fish
brew uninstall asdf --force
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/fish/config.fish
配置文件中移除生效 asdf.fish
的行:source /opt/asdf-vm/asdf.fish
pacman -Rs asdf-vm
$HOME/.asdf
目录:rm -rf (string join : -- $ASDF_DATA_DIR $HOME/.asdf)
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
配置文件中移除使用 asdf
模块的行:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
以及使用以下命令卸载 asdf
模块:
rm -f ~/.config/elvish/lib/asdf.elv
$HOME/.asdf
目录:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
配置文件中移除使用 asdf
模块的行:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
以及使用以下命令卸载 asdf
模块:
rm -f ~/.config/elvish/lib/asdf.elv
brew uninstall asdf --force
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.config/elvish/rc.elv
配置文件中移除使用 asdf
模块的行:use asdf _asdf; var asdf~ = $_asdf:asdf~
+set edit:completion:arg-completer[asdf] = $_asdf:arg-completer~
以及使用以下命令卸载 asdf
模块:
rm -f ~/.config/elvish/lib/asdf.elv
pacman -Rs asdf-vm
$HOME/.asdf
目录:if (!=s $E:ASDF_DATA_DIR "") { rm -rf $E:ASDF_DATA_DIR } else { rm -rf ~/.asdf }
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
配置文件中移除生效 asdf.sh
和补全功能的行:. "$HOME/.asdf/asdf.sh"
+# ...
+fpath=(\${ASDF_DIR}/completions $fpath)
+autoload -Uz compinit
+compinit
或者 ZSH 框架插件(如果用了的话)
$HOME/.asdf
目录:rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
配置文件中移除生效 asdf.sh
的行:. $(brew --prefix asdf)/libexec/asdf.sh
brew uninstall asdf --force && brew autoremove
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
~/.zshrc
配置文件中移除生效 asdf.sh
的行:. /opt/asdf-vm/asdf.sh
pacman -Rs asdf-vm
$HOME/.asdf
目录rm -rf "\${ASDF_DATA_DIR:-$HOME/.asdf}"
asdf
所有配置文件:rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
恭喜你完成了 🎉
`,41)]))}const F=i(h,[["render",e]]);export{c as __pageData,F as default}; diff --git a/assets/zh-hans_manage_plugins.md.DTOXb_Nj.js b/assets/zh-hans_manage_plugins.md.DTOXb_Nj.js new file mode 100644 index 00000000..7fe12d4a --- /dev/null +++ b/assets/zh-hans_manage_plugins.md.DTOXb_Nj.js @@ -0,0 +1,11 @@ +import{_ as a,c as i,a2 as l,o as e}from"./chunks/framework.BQmytedh.js";const o=JSON.parse('{"title":"插件","description":"","frontmatter":{},"headers":[],"relativePath":"zh-hans/manage/plugins.md","filePath":"zh-hans/manage/plugins.md","lastUpdated":1687069487000}'),t={name:"zh-hans/manage/plugins.md"};function n(h,s,p,d,k,r){return e(),i("div",null,s[0]||(s[0]=[l(`插件告诉 asdf
如何处理不同的工具,如 Node.js、 Ruby、 Elixir 等。
请参考 创建插件 了解用于支持更多工具的插件 API。
通过 Git URL 地址添加插件:
asdf plugin add <name> <git-url>
+# asdf plugin add elm https://github.com/vic/asdf-elm
或者通过插件存储库中的缩写添加插件:
asdf plugin add <name>
+# asdf plugin add erlang
建议
推荐独立于缩写存储库的、更长的 git-url
方法。
asdf plugin list
+# asdf plugin list
+# java
+# nodejs
asdf plugin list --urls
+# asdf plugin list
+# java https://github.com/halcyon/asdf-java.git
+# nodejs https://github.com/asdf-vm/asdf-nodejs.git
asdf plugin list all
请参考 插件缩写索引 了解插件的完整缩写列表。
asdf plugin update --all
如果你想要更新特定的包,如下所示。
asdf plugin update <name>
+# asdf plugin update erlang
这种更新方式将会获取插件存储库的 源代码 的 默认分支 的 最新提交。版本化的插件和更新正在开发中 (#916)。
asdf plugin remove <name>
+# asdf plugin remove erlang
移除一个插件将会移除该插件安装的所有工具。这可以当作是清理/修剪工具的许多未使用版本的简单方法。
缩写存储库将同步到你的本地计算机并定期刷新。这个周期由以下方法确定:
asdf plugin add <name>
或者 asdf plugin list all
将会触发同步X
分钟内没有同步,则进行同步X
默认是 60
,但可以通过在 .asdfrc
文件中配置 plugin_repository_last_check_duration
选项来进行配置。请查看 asdf 配置文档 了解更多。插件告诉 asdf
如何处理不同的工具,如 Node.js、 Ruby、 Elixir 等。
请参考 创建插件 了解用于支持更多工具的插件 API。
通过 Git URL 地址添加插件:
asdf plugin add <name> <git-url>
+# asdf plugin add elm https://github.com/vic/asdf-elm
或者通过插件存储库中的缩写添加插件:
asdf plugin add <name>
+# asdf plugin add erlang
建议
推荐独立于缩写存储库的、更长的 git-url
方法。
asdf plugin list
+# asdf plugin list
+# java
+# nodejs
asdf plugin list --urls
+# asdf plugin list
+# java https://github.com/halcyon/asdf-java.git
+# nodejs https://github.com/asdf-vm/asdf-nodejs.git
asdf plugin list all
请参考 插件缩写索引 了解插件的完整缩写列表。
asdf plugin update --all
如果你想要更新特定的包,如下所示。
asdf plugin update <name>
+# asdf plugin update erlang
这种更新方式将会获取插件存储库的 源代码 的 默认分支 的 最新提交。版本化的插件和更新正在开发中 (#916)。
asdf plugin remove <name>
+# asdf plugin remove erlang
移除一个插件将会移除该插件安装的所有工具。这可以当作是清理/修剪工具的许多未使用版本的简单方法。
缩写存储库将同步到你的本地计算机并定期刷新。这个周期由以下方法确定:
asdf plugin add <name>
或者 asdf plugin list all
将会触发同步X
分钟内没有同步,则进行同步X
默认是 60
,但可以通过在 .asdfrc
文件中配置 plugin_repository_last_check_duration
选项来进行配置。请查看 asdf 配置文档 了解更多。asdf install <name> <version>
+# asdf install erlang 17.3
如果一个插件支持从源代码下载和编译,你可以指定 ref:foo
,其中 foo
是特定的分支、标签或者提交。卸载该版本时,你也需要使用相同的名称和引用。
asdf install <name> latest
+# asdf install erlang latest
安装给定字符串开头的最新稳定版本。
asdf install <name> latest:<version>
+# asdf install erlang latest:17
asdf list <name>
+# asdf list erlang
筛选出以给定字符串开头的版本。
asdf list <name> <version>
+# asdf list erlang 17
asdf list all <name>
+# asdf list all erlang
筛选出以给定字符串开头的版本。
asdf list all <name> <version>
+# asdf list all erlang 17
asdf latest <name>
+# asdf latest erlang
显示以给定字符串开头的最新稳定版本。
asdf latest <name> <version>
+# asdf latest erlang 17
asdf global <name> <version> [<version>...]
+asdf shell <name> <version> [<version>...]
+asdf local <name> <version> [<version>...]
+# asdf global elixir 1.2.4
+
+asdf global <name> latest[:<version>]
+asdf local <name> latest[:<version>]
+# asdf global elixir latest
global
将版本写到 $HOME/.tool-versions
文件中。
shell
仅为当前 shell 会话将版本设置为一个名为 ASDF_\${LANG}_VERSION
的环境变量。
local
将版本写到 $PWD/.tool-versions
文件中,如果有需要也会创建此文件。
请查看 配置部分 的 .tool-versions
文件了解更多详情。
可选
如果你只是想为当前 shell 会话或者在特定工具版本下执行一条命令,你可以设置一个类似 ASDF_\${TOOL}_VERSION
的环境变量。
下面的示例在版本为 1.4.0
的 Elixir 项目上运行测试。 版本格式与 .tool-versions
文件支持的版本格式相同。
ASDF_ELIXIR_VERSION=1.4.0 mix test
要使用工具 <name>
的系统版本而非 asdf 管理版本,你可以将工具的版本设置为 system
。
使用 global
、local
或者 shell
设置系统,如上面的 设置当前版本 部分所述。
asdf local <name> system
+# asdf local python system
asdf current
+# asdf current
+# erlang 17.3 (set by /Users/kim/.tool-versions)
+# nodejs 6.11.5 (set by /Users/kim/cool-node-project/.tool-versions)
+
+asdf current <name>
+# asdf current erlang
+# 17.3 (set by /Users/kim/.tool-versions)
asdf uninstall <name> <version>
+# asdf uninstall erlang 17.3
当 asdf 安装一个包时,它会在 $ASDF_DATA_DIR/shims
目录(默认为 ~/.asdf/shims
)中为该包中的每个可执行程序创建垫片。这个位于 $PATH
中(通过 asdf.sh
、 asdf.fish
等等实现)的目录是已安装程序在环境中可用的方式。
垫片本身是非常简单的包装器,它 exec
(执行)一个辅助程序 asdf exec
,向其传递插件的名称和垫片正在包装的已安装包中的可执行程序的路径。
asdf exec
辅助程序确定要使用的软件包版本(比如在 .tool-versions
文件中指定,通过 asdf local ...
或者 asdf global ...
命令选择)、软件包安装目录中的可执行程序的最终路径(这可以在插件中通过 exec-path
回调来操作)以及要在其中执行的环境(也由插件 - exec-env
脚本提供),最后完成执行。
注意
因为此系统使用 exec
调用,所以软件包中的任何脚本如果要由 shell 生效而不是执行的脚本都需要直接访问,而不是通过垫片包装器进行访问。两个 asdf
命令:which
和 where
可以通过返回已安装软件包的路径来帮助解决这个问题。
# 返回当前版本中主要可执行程序的路径
+source $(asdf which \${PLUGIN})/../script.sh
+
+# 返回软件包安装目录的路径
+source $(asdf where \${PLUGIN} $(asdf current \${PLUGIN}))/bin/script.sh
如果由于某种原因,你希望绕过 asdf 垫片,或者希望在进入项目目录时自动设置环境变量,则 asdf-direnv 插件可能会有所帮助。请务必查看其 README 文件了解更多详情。
`,45)]))}const c=i(t,[["render",n]]);export{o as __pageData,c as default}; diff --git a/assets/zh-hans_manage_versions.md.DkeX4EwJ.lean.js b/assets/zh-hans_manage_versions.md.DkeX4EwJ.lean.js new file mode 100644 index 00000000..e84b1acd --- /dev/null +++ b/assets/zh-hans_manage_versions.md.DkeX4EwJ.lean.js @@ -0,0 +1,30 @@ +import{_ as i,c as a,a2 as l,o as h}from"./chunks/framework.BQmytedh.js";const o=JSON.parse('{"title":"版本","description":"","frontmatter":{},"headers":[],"relativePath":"zh-hans/manage/versions.md","filePath":"zh-hans/manage/versions.md","lastUpdated":1687069487000}'),t={name:"zh-hans/manage/versions.md"};function n(e,s,p,k,d,r){return h(),a("div",null,s[0]||(s[0]=[l(`asdf install <name> <version>
+# asdf install erlang 17.3
如果一个插件支持从源代码下载和编译,你可以指定 ref:foo
,其中 foo
是特定的分支、标签或者提交。卸载该版本时,你也需要使用相同的名称和引用。
asdf install <name> latest
+# asdf install erlang latest
安装给定字符串开头的最新稳定版本。
asdf install <name> latest:<version>
+# asdf install erlang latest:17
asdf list <name>
+# asdf list erlang
筛选出以给定字符串开头的版本。
asdf list <name> <version>
+# asdf list erlang 17
asdf list all <name>
+# asdf list all erlang
筛选出以给定字符串开头的版本。
asdf list all <name> <version>
+# asdf list all erlang 17
asdf latest <name>
+# asdf latest erlang
显示以给定字符串开头的最新稳定版本。
asdf latest <name> <version>
+# asdf latest erlang 17
asdf global <name> <version> [<version>...]
+asdf shell <name> <version> [<version>...]
+asdf local <name> <version> [<version>...]
+# asdf global elixir 1.2.4
+
+asdf global <name> latest[:<version>]
+asdf local <name> latest[:<version>]
+# asdf global elixir latest
global
将版本写到 $HOME/.tool-versions
文件中。
shell
仅为当前 shell 会话将版本设置为一个名为 ASDF_\${LANG}_VERSION
的环境变量。
local
将版本写到 $PWD/.tool-versions
文件中,如果有需要也会创建此文件。
请查看 配置部分 的 .tool-versions
文件了解更多详情。
可选
如果你只是想为当前 shell 会话或者在特定工具版本下执行一条命令,你可以设置一个类似 ASDF_\${TOOL}_VERSION
的环境变量。
下面的示例在版本为 1.4.0
的 Elixir 项目上运行测试。 版本格式与 .tool-versions
文件支持的版本格式相同。
ASDF_ELIXIR_VERSION=1.4.0 mix test
要使用工具 <name>
的系统版本而非 asdf 管理版本,你可以将工具的版本设置为 system
。
使用 global
、local
或者 shell
设置系统,如上面的 设置当前版本 部分所述。
asdf local <name> system
+# asdf local python system
asdf current
+# asdf current
+# erlang 17.3 (set by /Users/kim/.tool-versions)
+# nodejs 6.11.5 (set by /Users/kim/cool-node-project/.tool-versions)
+
+asdf current <name>
+# asdf current erlang
+# 17.3 (set by /Users/kim/.tool-versions)
asdf uninstall <name> <version>
+# asdf uninstall erlang 17.3
当 asdf 安装一个包时,它会在 $ASDF_DATA_DIR/shims
目录(默认为 ~/.asdf/shims
)中为该包中的每个可执行程序创建垫片。这个位于 $PATH
中(通过 asdf.sh
、 asdf.fish
等等实现)的目录是已安装程序在环境中可用的方式。
垫片本身是非常简单的包装器,它 exec
(执行)一个辅助程序 asdf exec
,向其传递插件的名称和垫片正在包装的已安装包中的可执行程序的路径。
asdf exec
辅助程序确定要使用的软件包版本(比如在 .tool-versions
文件中指定,通过 asdf local ...
或者 asdf global ...
命令选择)、软件包安装目录中的可执行程序的最终路径(这可以在插件中通过 exec-path
回调来操作)以及要在其中执行的环境(也由插件 - exec-env
脚本提供),最后完成执行。
注意
因为此系统使用 exec
调用,所以软件包中的任何脚本如果要由 shell 生效而不是执行的脚本都需要直接访问,而不是通过垫片包装器进行访问。两个 asdf
命令:which
和 where
可以通过返回已安装软件包的路径来帮助解决这个问题。
# 返回当前版本中主要可执行程序的路径
+source $(asdf which \${PLUGIN})/../script.sh
+
+# 返回软件包安装目录的路径
+source $(asdf where \${PLUGIN} $(asdf current \${PLUGIN}))/bin/script.sh
如果由于某种原因,你希望绕过 asdf 垫片,或者希望在进入项目目录时自动设置环境变量,则 asdf-direnv 插件可能会有所帮助。请务必查看其 README 文件了解更多详情。
`,45)]))}const c=i(t,[["render",n]]);export{o as __pageData,c as default}; diff --git a/assets/zh-hans_more_community-projects.md.dTVUkig9.js b/assets/zh-hans_more_community-projects.md.dTVUkig9.js new file mode 100644 index 00000000..a0472e4d --- /dev/null +++ b/assets/zh-hans_more_community-projects.md.dTVUkig9.js @@ -0,0 +1 @@ +import{_ as t,c as o,a2 as r,o as a}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"Community Projects","description":"","frontmatter":{},"headers":[],"relativePath":"zh-hans/more/community-projects.md","filePath":"zh-hans/more/community-projects.md","lastUpdated":1687069487000}'),s={name:"zh-hans/more/community-projects.md"};function n(c,e,i,m,d,l){return a(),o("div",null,e[0]||(e[0]=[r('Here are some community projects related to asdf
:
Note
asdf core do not own these projects or their code. asdf core are not responsible for the quality or security as they relate to those listed here.
Here are some community projects related to asdf
:
Note
asdf core do not own these projects or their code. asdf core are not responsible for the quality or security as they relate to those listed here.
以下是 asdf
相关的一些常见问题。
WSL1 (Windows Subsystem for Linux 1) 不受官方支持。asdf
的某些方面可能无法正常工作。我们不打算添加对 WSL1 的官方支持。
WSL2 (Windows Subsystem for Linux 2) 应该作为你选择的 WSL 发行版来使用本设置和依赖说明。
重要的是,只有当前工作目录是 Unix 驱动器而不是绑定的 Windows 驱动器时,WSL2 才能 正常工作。
当 Github Actions 上提供主机运行器支持时,我们打算在 WSL2 上运行测试套件。(Github Actions 目前还未提供 WSL2 支持)
我执行了
npm install -g yarn
命令,但是之后不能运行yarn
命令。这是为什么?
asdf
使用 垫片 来管理可执行程序。插件所安装的那些命令会自动创建垫片,而通过 asdf
管理工具安装过的可执行程序则需要通知 asdf
创建垫片的需要。在这个例子中,为 Yarn 创建一个垫片即可。请查看 asdf reshim
命令文档 了解更多。
如果 asdf reshim
没有解决你的问题,那么很有可能是在 asdf.sh
或者 asdf.fish
的生效不在你的 Shell 配置文件(.bash_profile
、.zshrc
、config.fish
等等)的下方。这需要你在设置你的 $PATH
之后和生效你的框架(oh-my-zsh 等等)(如果有的话)之后再生效。
以下是 asdf
相关的一些常见问题。
WSL1 (Windows Subsystem for Linux 1) 不受官方支持。asdf
的某些方面可能无法正常工作。我们不打算添加对 WSL1 的官方支持。
WSL2 (Windows Subsystem for Linux 2) 应该作为你选择的 WSL 发行版来使用本设置和依赖说明。
重要的是,只有当前工作目录是 Unix 驱动器而不是绑定的 Windows 驱动器时,WSL2 才能 正常工作。
当 Github Actions 上提供主机运行器支持时,我们打算在 WSL2 上运行测试套件。(Github Actions 目前还未提供 WSL2 支持)
我执行了
npm install -g yarn
命令,但是之后不能运行yarn
命令。这是为什么?
asdf
使用 垫片 来管理可执行程序。插件所安装的那些命令会自动创建垫片,而通过 asdf
管理工具安装过的可执行程序则需要通知 asdf
创建垫片的需要。在这个例子中,为 Yarn 创建一个垫片即可。请查看 asdf reshim
命令文档 了解更多。
如果 asdf reshim
没有解决你的问题,那么很有可能是在 asdf.sh
或者 asdf.fish
的生效不在你的 Shell 配置文件(.bash_profile
、.zshrc
、config.fish
等等)的下方。这需要你在设置你的 $PATH
之后和生效你的框架(oh-my-zsh 等等)(如果有的话)之后再生效。
asdf 作者和贡献者的感谢页!
我 (@HashNuke),高烧、感冒、咳嗽。
版权 2014 直到时间尽头 (MIT License)
请查看 Github 上的 贡献者名单 🙏 了解更多。
',9)]))}const p=e(s,[["render",o]]);export{u as __pageData,p as default}; diff --git a/assets/zh-hans_more_thanks.md.wO7wGCsP.lean.js b/assets/zh-hans_more_thanks.md.wO7wGCsP.lean.js new file mode 100644 index 00000000..3b2f860e --- /dev/null +++ b/assets/zh-hans_more_thanks.md.wO7wGCsP.lean.js @@ -0,0 +1 @@ +import{_ as e,c as r,a2 as t,o as h}from"./chunks/framework.BQmytedh.js";const u=JSON.parse('{"title":"致谢","description":"","frontmatter":{},"headers":[],"relativePath":"zh-hans/more/thanks.md","filePath":"zh-hans/more/thanks.md","lastUpdated":1671778129000}'),s={name:"zh-hans/more/thanks.md"};function o(l,a,n,i,d,c){return h(),r("div",null,a[0]||(a[0]=[t('asdf 作者和贡献者的感谢页!
我 (@HashNuke),高烧、感冒、咳嗽。
版权 2014 直到时间尽头 (MIT License)
请查看 Github 上的 贡献者名单 🙏 了解更多。
',9)]))}const p=e(s,[["render",o]]);export{u as __pageData,p as default}; diff --git a/assets/zh-hans_plugins_create.md.Bb5e3jX_.js b/assets/zh-hans_plugins_create.md.Bb5e3jX_.js new file mode 100644 index 00000000..e90b01ca --- /dev/null +++ b/assets/zh-hans_plugins_create.md.Bb5e3jX_.js @@ -0,0 +1,35 @@ +import{_ as i,c as a,a2 as e,o as l}from"./chunks/framework.BQmytedh.js";const r=JSON.parse('{"title":"创建插件","description":"","frontmatter":{},"headers":[],"relativePath":"zh-hans/plugins/create.md","filePath":"zh-hans/plugins/create.md","lastUpdated":1704804447000}'),n={name:"zh-hans/plugins/create.md"};function t(h,s,p,d,o,k){return l(),a("div",null,s[0]||(s[0]=[e(`插件是一个包含几个可执行脚本的 git 存储库,用于支持对某种语言或工具进行版本控制。这些脚本在执行 list-all
、install
或者 uninstall
命令时被执行。你可以设定或取消设定环境变量,并执行设置工具环境所需的任何操作。
bin/list-all
- 列举所有可安装的版本bin/download
- 下载指定版本的源代码或二进制文件bin/install
- 安装指定版本所有脚本除了 bin/list-all
之外对以下环境变量有权限进行操作:
ASDF_INSTALL_TYPE
- version
或者 ref
ASDF_INSTALL_VERSION
- 如果 ASDF_INSTALL_TYPE
是 version
,那么这将是版本号。否则它将传递为 git 的 ref。可能指向存储库的一个标签/提交/分支。ASDF_INSTALL_PATH
- 已经 安装到的目录(或 bin/install
脚本执行情况下 应该 安装到的目录)这些附加的环境变量将可用于 bin/install
脚本:
ASDF_CONCURRENCY
- 编译源代码时使用的内核数。对于配置 make -j
非常有用。ASDF_DOWNLOAD_PATH
- bin/download
脚本下载源代码或二进制文件的路径。这些附加的环境变量将可用于 bin/download
脚本:
ASDF_DOWNLOAD_PATH
- 源代码或二进制文件应该下载到的路径。必须打印一个带有空格分隔的版本列表的字符串,示例输出如下所示:
1.0.1 1.0.2 1.3.0 1.4
请注意,最新版本应列在最后,以便它看起来更接近用户的提示。这很有帮助,因为 list-all
命令会在自己的行打印每个版本。如果有很多版本,那么早期版本可能会不在屏幕上。
如果从网站上的发布页面拉取版本,建议尽可能不对版本进行排序。通常,版本已经按照正确的顺序排列,或者以相反的顺序排列,在这种情况下,像 tac
这样的东西就足够了。如果必须手动对版本进行排序,则不能依赖 sort -V
,因为 OSX 操作系统不支持。一种可以替代的排序功能是 更好的选择。
此脚本必须下载源代码或者二进制文件到 ASDF_DOWNLOAD_PATH
环境变量包含的路径。如果下载的源代码或者二进制文件是压缩的,则只有未压缩的源代码或二进制文件会放置在 ASDF_DOWNLOAD_PATH
目录中。
下载成功后脚本必须以 0
状态退出。如果下载失败,脚本必须以任何非零退出状态退出。
如果可能,脚本应该仅将文件放在 ASDF_DOWNLOAD_PATH
中。如果下载失败,则不应将任何文件放在目录中。
如果此脚本不存在,asdf 将假设存在 bin/install
脚本,将下载并安装该版本。asdf 仅在没有此脚本的情况下才能支持传统插件。所有插件都必须包含此脚本,最终将删除对传统插件的支持。
本脚本应在 ASDF_INSTALL_PATH
中安装版本。默认情况下,asdf 将为 $ASDF_INSTALL_PATH/bin
(可以通过可选的 bin/list-bin-paths 脚本自定义)目录中的任意文件创建垫片。
安装成功时,安装脚本应以 0
状态退出。如果安装失败,脚本应以任何非零退出状态退出。
如果可能,脚本应仅在安装脚本认为工具的生成和安装成功后,才将文件放在 ASDF_INSTALL_PATH
目录中。asdf 检查 ASDF_INSTALL_PATH
目录的 扩展 以确认是否安装了该工具版本。如果在安装过程开始时填充了 ASDF_INSTALL_PATH
目录,则在安装过程中在其他终端中运行的其他 asdf 命令可能会认为该工具版本已经安装,即使它还未完全安装。
如果你希望你的插件使用 asdf 0.7._ 及更早版本和 0.8._ 及更高版本,请检查是否存在 ASDF_DOWNLOAD_PATH
环境变量。如果未设置,请在 bin/install
脚本回调时下载源代码。如果设置,则假设 bin/downlaod
脚本已经下载源代码。
这不是一个回调脚本,而是一组回调脚本,每个脚本将打印不同的文档到 STDOUT。下面列出了可能的回调脚本。请注意,bin/help.overview
是一种特殊情况,因为必须存在才能为脚本显示任何帮助输出。
bin/help.overview
- 此脚本应该输出有关插件和所管理工具的一般描述。不应该打印任何标题,因为 asdf 将打印标题。输出可以是自由格式的文本,但理想情况下只有一个短段落。如果你希望 asdf 为你的插件提供帮助信息,则必须存在此脚本。所有其他的帮助回调脚本都是可选的。bin/help.deps
- 此脚本应该输出为操作系统量身定制的依赖项列表。每行一个依赖项。bin/help.config
- 此脚本应该打印对插件和工具可能有用的任何必需或可选配置。安装或编译该工具所需的任何环境变量或其他标志(尽可能针对用户的操作系统)。输出可以是自由格式的文本。bin/help.links
- 这应该是与插件和工具相关的链接列表(同样,尽可能针对当前操作系统量身定制)。每行一个链接。行的格式可以是 <title>: <link>
或只是 <link>
。这些脚本的每一个都应根据当前操作系统调整其输出。例如,在 Ubuntu 上,依赖脚本可以将依赖项输出为必须安装的 apt-get 包。设置变量时,脚本还应该根据设置变量 ASDF_INSTALL_VERSION
和 ASDF_INSTALL_TYPE
的值。它们是可选的,并不总是被设置。
帮助回调脚本不得输出核心 asdf-vm 文档中已涵盖的任何信息。不得出现一般的 asdf 使用信息。
如果实现了此回调,asdf 将使用它来确定工具的最新稳定版本,而不是尝试自行判断。asdf latest
通过查看由 list-all
回调打印的最新版本,在从输出中排除了几种类型的版本(如发布候选版本)之后推断出最新版本。当你的插件的 list-all
回调打印同一工具的不同变体并且最新版本不是你希望默认使用的变体的最新稳定版本时,这种默认行为是不可取的。例如,对于 Ruby,最新的稳定版本应该是 Ruby(MRI)的常规实现,但最后 list-all
回调打印的是 truffleruby 版本。
此回调使用单个 “过滤器” 字符串调用,因为它是唯一的参数。这应该用于过滤所有最新稳定版本。例如对于 Ruby,用户可以选择传入 jruby
以选择 jruby
的最新稳定版本。
列举指定工具版本的可执行程序。必须打印一个带有空格分隔的包含可执行文件的目录路径列表的字符串。路径必须相对于传递的安装路径。示例输出如下所示:
bin tools veggies
这将指示 asdf 为 <install-path>/bin
、<install-path>/tools
和 <install-path>/veggies
中的文件创建垫片。
如果未指定此脚本,asdf 将在安装中查找 bin
目录并为这些脚本创建垫片。
设置环境变量以运行包中的二进制文件。
获取工具的指定版本的可执行程序路径。必须打印具有相对可执行程序路径的字符串。这允许插件有条件地覆盖垫片指定的可执行程序路径,否则返回垫片指定的默认路径。
用法:
+ plugin/bin/exec-path <install-path> <command> <executable-path>
+
+例子调用:
+ ~/.asdf/plugins/foo/bin/exec-path "~/.asdf/installs/foo/1.0" "foo" "bin/foo"
+
+输出:
+ bin/foox
卸载某个工具的指定版本。
为此插件注册其他设置器文件。必须打印一个带有空格分隔的文件名列表的字符串。
.ruby-version .rvmrc
注意:这仅适用于在 ~/.asdfrc
配置文件中启用了 legacy_version_file
选项的用户。
这可用于进一步解析 asdf 找到的传统文件。如果 parse-legacy-file
未实现,asdf 将会简单读取文件来确定版本。脚本将传递文件路径作为其第一个参数。
这可用于在插件添加到 asdf 后运行任何安装后操作。
该脚本可以访问插件的安装路径(\${ASDF_PLUGIN_PATH}
)和源 URL(\${ASDF_PLUGIN_SOURCE_URL}
),如果有的话。
其他请参考相关钩子:
pre_asdf_plugin_add
pre_asdf_plugin_add_\${plugin_name}
post_asdf_plugin_add
post_asdf_plugin_add_\${plugin_name}
这可用于在 asdf 下载更新的插件后运行任何插件更新后操作。
该脚本可以访问插件的安装路径(\${ASDF_PLUGIN_PATH}
)、更新前的 git-ref(\${ASDF_PLUGIN_PREV_REF}
)和更新后的 git-ref(\${ASDF_PLUGIN_POST_REF}
)。
其他请参考相关钩子:
pre_asdf_plugin_update
pre_asdf_plugin_update_\${plugin_name}
post_asdf_plugin_update
post_asdf_plugin_update_\${plugin_name}
这可用于在从 asdf 中删除插件之前运行任何预删除操作。
该脚本可以访问安装插件的路径(\${ASDF_PLUGIN_PATH}
)。
其他请参考相关钩子:
pre_asdf_plugin_remove
pre_asdf_plugin_remove_\${plugin_name}
post_asdf_plugin_remove
post_asdf_plugin_remove_\${plugin_name}
插件可以通过提供 lib/commands/command*.bash
脚本或者可执行程序来定义新的 asdf 命令,这些脚本或可执行程序将使用插件名称作为 asdf 命令的子命令进行调用。
例如,假设一个 foo
插件有以下文件:
foo/
+ lib/commands/
+ command.bash
+ command-bat.bash
+ command-bat-man.bash
+ command-help.bash
用户现在可以执行:
$ asdf foo # 等同于运行 \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash\`
+$ asdf foo bar # 等同于运行 \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash bar\`
+$ asdf foo help # 等同于运行 \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command-help.bash\`
+$ asdf foo bat man # 等同于运行 \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat-man.bash\`
+$ asdf foo bat baz # 等同于运行 \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat.bash baz\`
插件作者可以使用此功能来提供与其工具相关的实用命令,或者可以创建 asdf 本身的新命令扩展的插件。
调用时,如果扩展命令未设置其可执行位,则它们将作为 bash 脚本获取,且具有来自 $ASDF_DIR/lib/utils.bash
的所有可用功能。 此外,$ASDF_CMD_FILE
解析所获取文件的完整路径。 如果设置了可执行位,则只是执行它们并替换 asdf 执行。
这个功能的一个很好的例子是像 haxe
这样的插件。 它提供了 asdf haxe neko-dylibs-link
来修复 haxe 可执行文件期望找到相对于可执行目录的动态链接库的问题。
如果你的插件提供了 asdf 扩展命令,请务必在插件的 README 文件中提及。
请仅在真的需要时才使用此功能
asdf 允许自定义垫片模板。对于名为 foo
的可执行程序,如果有一个 shims/foo
的文件在插件中,那么 asdf 将复制这个文件替代使用标准垫片模板。
必须明智地使用这一点。对于目前的 AFAIK,它仅仅被使用在了 Elixir 插件中,因为一个可执行程序除了是可执行程序文件之外,还被读作为 Elixir 文件,这使得无法使用标准的 bash 垫片。
asdf
包含 plugin-test
命令用于测试插件。你可以像下面这样使用它:
asdf plugin test <plugin-name> <plugin-url> [--asdf-tool-version <version>] [--asdf-plugin-gitref <git-ref>] [test-command*]
只有前两个参数是必须的。 如果指定了 _version,则该工具将随指定版本一起安装。默认返回为 asdf latest <plugin-name>
。 如果指定了 git-ref,则插件将检查提交/分支/标签。这对于在该插件的 CI 上测试拉取请求非常有用。默认值是插件仓库的默认分支。
剩下的参数被视为要执行的命令,以确保安装的工具正常工作。通常情况下,它需要带 --version
或者 --help
。例如,要测试 NodeJS 插件,我们可以运行:
asdf plugin test nodejs https://github.com/asdf-vm/asdf-nodejs.git node --version
我们强烈建议你在 CI 环境中测试你的插件,并确保它可以在 Linux 和 OSX 上运行。
asdf-vm/actions 存储库为托管在 github 的项目提供了使用 Github Action 来测试插件的可能。
steps:
+ - name: asdf_plugin_test
+ uses: asdf-vm/actions/plugin-test@v1
+ with:
+ command: "my_tool --version"
+ env:
+ GITHUB_API_TOKEN: \${{ secrets.GITHUB_TOKEN }} # 自动提供
这是一个 .travis.yml
示例文件,请根据你的需要进行自定义:
language: c
+script: asdf plugin test nodejs $TRAVIS_BUILD_DIR 'node --version'
+before_script:
+ - git clone https://github.com/asdf-vm/asdf.git asdf
+ - . asdf/asdf.sh
+os:
+ - linux
+ - osx
注意: 当使用其他 CI 时,你将需要确认哪些变量映射到存储库路径。
你还可以选择将相对路径传递给 plugin-test
。
例如,如果在存储库目录中运行测试脚本:asdf plugin test nodejs . 'node --version'
。
如果你的插件的 list-all
依赖于访问 GitHub API,请确保在访问时提供授权令牌,否则你的测试可能会因频率限制而失败。
为此,创建一个仅具有 public_repo
权限的 新个人令牌。
然后,在 travis.ci 构建设置中添加一个名为 GITHUB_API_TOKEN
的 安全 环境变量。并且 绝对不要 在你的代码中公布你的 token。
最后,添加如下内容到 bin/list-all
:
cmd="curl -s"
+if [ -n "$GITHUB_API_TOKEN" ]; then
+ cmd="$cmd -H 'Authorization: token $GITHUB_API_TOKEN'"
+fi
+
+cmd="$cmd $releases_path"
asdf
可以通过指定插件存储库 url 轻松安装插件,比如 plugin add my-plugin https://github.com/user/asdf-my-plugin.git
。
为了使你的用户更轻松,你可以将插件添加到官方插件存储库中,以列出你的插件并使用较短的命令轻松安装,比如 asdf plugin add my-plugin
。
请查看插件存储库 asdf-vm/asdf-plugins 中的说明了解更多。
`,109)]))}const g=i(n,[["render",t]]);export{r as __pageData,g as default}; diff --git a/assets/zh-hans_plugins_create.md.Bb5e3jX_.lean.js b/assets/zh-hans_plugins_create.md.Bb5e3jX_.lean.js new file mode 100644 index 00000000..e90b01ca --- /dev/null +++ b/assets/zh-hans_plugins_create.md.Bb5e3jX_.lean.js @@ -0,0 +1,35 @@ +import{_ as i,c as a,a2 as e,o as l}from"./chunks/framework.BQmytedh.js";const r=JSON.parse('{"title":"创建插件","description":"","frontmatter":{},"headers":[],"relativePath":"zh-hans/plugins/create.md","filePath":"zh-hans/plugins/create.md","lastUpdated":1704804447000}'),n={name:"zh-hans/plugins/create.md"};function t(h,s,p,d,o,k){return l(),a("div",null,s[0]||(s[0]=[e(`插件是一个包含几个可执行脚本的 git 存储库,用于支持对某种语言或工具进行版本控制。这些脚本在执行 list-all
、install
或者 uninstall
命令时被执行。你可以设定或取消设定环境变量,并执行设置工具环境所需的任何操作。
bin/list-all
- 列举所有可安装的版本bin/download
- 下载指定版本的源代码或二进制文件bin/install
- 安装指定版本所有脚本除了 bin/list-all
之外对以下环境变量有权限进行操作:
ASDF_INSTALL_TYPE
- version
或者 ref
ASDF_INSTALL_VERSION
- 如果 ASDF_INSTALL_TYPE
是 version
,那么这将是版本号。否则它将传递为 git 的 ref。可能指向存储库的一个标签/提交/分支。ASDF_INSTALL_PATH
- 已经 安装到的目录(或 bin/install
脚本执行情况下 应该 安装到的目录)这些附加的环境变量将可用于 bin/install
脚本:
ASDF_CONCURRENCY
- 编译源代码时使用的内核数。对于配置 make -j
非常有用。ASDF_DOWNLOAD_PATH
- bin/download
脚本下载源代码或二进制文件的路径。这些附加的环境变量将可用于 bin/download
脚本:
ASDF_DOWNLOAD_PATH
- 源代码或二进制文件应该下载到的路径。必须打印一个带有空格分隔的版本列表的字符串,示例输出如下所示:
1.0.1 1.0.2 1.3.0 1.4
请注意,最新版本应列在最后,以便它看起来更接近用户的提示。这很有帮助,因为 list-all
命令会在自己的行打印每个版本。如果有很多版本,那么早期版本可能会不在屏幕上。
如果从网站上的发布页面拉取版本,建议尽可能不对版本进行排序。通常,版本已经按照正确的顺序排列,或者以相反的顺序排列,在这种情况下,像 tac
这样的东西就足够了。如果必须手动对版本进行排序,则不能依赖 sort -V
,因为 OSX 操作系统不支持。一种可以替代的排序功能是 更好的选择。
此脚本必须下载源代码或者二进制文件到 ASDF_DOWNLOAD_PATH
环境变量包含的路径。如果下载的源代码或者二进制文件是压缩的,则只有未压缩的源代码或二进制文件会放置在 ASDF_DOWNLOAD_PATH
目录中。
下载成功后脚本必须以 0
状态退出。如果下载失败,脚本必须以任何非零退出状态退出。
如果可能,脚本应该仅将文件放在 ASDF_DOWNLOAD_PATH
中。如果下载失败,则不应将任何文件放在目录中。
如果此脚本不存在,asdf 将假设存在 bin/install
脚本,将下载并安装该版本。asdf 仅在没有此脚本的情况下才能支持传统插件。所有插件都必须包含此脚本,最终将删除对传统插件的支持。
本脚本应在 ASDF_INSTALL_PATH
中安装版本。默认情况下,asdf 将为 $ASDF_INSTALL_PATH/bin
(可以通过可选的 bin/list-bin-paths 脚本自定义)目录中的任意文件创建垫片。
安装成功时,安装脚本应以 0
状态退出。如果安装失败,脚本应以任何非零退出状态退出。
如果可能,脚本应仅在安装脚本认为工具的生成和安装成功后,才将文件放在 ASDF_INSTALL_PATH
目录中。asdf 检查 ASDF_INSTALL_PATH
目录的 扩展 以确认是否安装了该工具版本。如果在安装过程开始时填充了 ASDF_INSTALL_PATH
目录,则在安装过程中在其他终端中运行的其他 asdf 命令可能会认为该工具版本已经安装,即使它还未完全安装。
如果你希望你的插件使用 asdf 0.7._ 及更早版本和 0.8._ 及更高版本,请检查是否存在 ASDF_DOWNLOAD_PATH
环境变量。如果未设置,请在 bin/install
脚本回调时下载源代码。如果设置,则假设 bin/downlaod
脚本已经下载源代码。
这不是一个回调脚本,而是一组回调脚本,每个脚本将打印不同的文档到 STDOUT。下面列出了可能的回调脚本。请注意,bin/help.overview
是一种特殊情况,因为必须存在才能为脚本显示任何帮助输出。
bin/help.overview
- 此脚本应该输出有关插件和所管理工具的一般描述。不应该打印任何标题,因为 asdf 将打印标题。输出可以是自由格式的文本,但理想情况下只有一个短段落。如果你希望 asdf 为你的插件提供帮助信息,则必须存在此脚本。所有其他的帮助回调脚本都是可选的。bin/help.deps
- 此脚本应该输出为操作系统量身定制的依赖项列表。每行一个依赖项。bin/help.config
- 此脚本应该打印对插件和工具可能有用的任何必需或可选配置。安装或编译该工具所需的任何环境变量或其他标志(尽可能针对用户的操作系统)。输出可以是自由格式的文本。bin/help.links
- 这应该是与插件和工具相关的链接列表(同样,尽可能针对当前操作系统量身定制)。每行一个链接。行的格式可以是 <title>: <link>
或只是 <link>
。这些脚本的每一个都应根据当前操作系统调整其输出。例如,在 Ubuntu 上,依赖脚本可以将依赖项输出为必须安装的 apt-get 包。设置变量时,脚本还应该根据设置变量 ASDF_INSTALL_VERSION
和 ASDF_INSTALL_TYPE
的值。它们是可选的,并不总是被设置。
帮助回调脚本不得输出核心 asdf-vm 文档中已涵盖的任何信息。不得出现一般的 asdf 使用信息。
如果实现了此回调,asdf 将使用它来确定工具的最新稳定版本,而不是尝试自行判断。asdf latest
通过查看由 list-all
回调打印的最新版本,在从输出中排除了几种类型的版本(如发布候选版本)之后推断出最新版本。当你的插件的 list-all
回调打印同一工具的不同变体并且最新版本不是你希望默认使用的变体的最新稳定版本时,这种默认行为是不可取的。例如,对于 Ruby,最新的稳定版本应该是 Ruby(MRI)的常规实现,但最后 list-all
回调打印的是 truffleruby 版本。
此回调使用单个 “过滤器” 字符串调用,因为它是唯一的参数。这应该用于过滤所有最新稳定版本。例如对于 Ruby,用户可以选择传入 jruby
以选择 jruby
的最新稳定版本。
列举指定工具版本的可执行程序。必须打印一个带有空格分隔的包含可执行文件的目录路径列表的字符串。路径必须相对于传递的安装路径。示例输出如下所示:
bin tools veggies
这将指示 asdf 为 <install-path>/bin
、<install-path>/tools
和 <install-path>/veggies
中的文件创建垫片。
如果未指定此脚本,asdf 将在安装中查找 bin
目录并为这些脚本创建垫片。
设置环境变量以运行包中的二进制文件。
获取工具的指定版本的可执行程序路径。必须打印具有相对可执行程序路径的字符串。这允许插件有条件地覆盖垫片指定的可执行程序路径,否则返回垫片指定的默认路径。
用法:
+ plugin/bin/exec-path <install-path> <command> <executable-path>
+
+例子调用:
+ ~/.asdf/plugins/foo/bin/exec-path "~/.asdf/installs/foo/1.0" "foo" "bin/foo"
+
+输出:
+ bin/foox
卸载某个工具的指定版本。
为此插件注册其他设置器文件。必须打印一个带有空格分隔的文件名列表的字符串。
.ruby-version .rvmrc
注意:这仅适用于在 ~/.asdfrc
配置文件中启用了 legacy_version_file
选项的用户。
这可用于进一步解析 asdf 找到的传统文件。如果 parse-legacy-file
未实现,asdf 将会简单读取文件来确定版本。脚本将传递文件路径作为其第一个参数。
这可用于在插件添加到 asdf 后运行任何安装后操作。
该脚本可以访问插件的安装路径(\${ASDF_PLUGIN_PATH}
)和源 URL(\${ASDF_PLUGIN_SOURCE_URL}
),如果有的话。
其他请参考相关钩子:
pre_asdf_plugin_add
pre_asdf_plugin_add_\${plugin_name}
post_asdf_plugin_add
post_asdf_plugin_add_\${plugin_name}
这可用于在 asdf 下载更新的插件后运行任何插件更新后操作。
该脚本可以访问插件的安装路径(\${ASDF_PLUGIN_PATH}
)、更新前的 git-ref(\${ASDF_PLUGIN_PREV_REF}
)和更新后的 git-ref(\${ASDF_PLUGIN_POST_REF}
)。
其他请参考相关钩子:
pre_asdf_plugin_update
pre_asdf_plugin_update_\${plugin_name}
post_asdf_plugin_update
post_asdf_plugin_update_\${plugin_name}
这可用于在从 asdf 中删除插件之前运行任何预删除操作。
该脚本可以访问安装插件的路径(\${ASDF_PLUGIN_PATH}
)。
其他请参考相关钩子:
pre_asdf_plugin_remove
pre_asdf_plugin_remove_\${plugin_name}
post_asdf_plugin_remove
post_asdf_plugin_remove_\${plugin_name}
插件可以通过提供 lib/commands/command*.bash
脚本或者可执行程序来定义新的 asdf 命令,这些脚本或可执行程序将使用插件名称作为 asdf 命令的子命令进行调用。
例如,假设一个 foo
插件有以下文件:
foo/
+ lib/commands/
+ command.bash
+ command-bat.bash
+ command-bat-man.bash
+ command-help.bash
用户现在可以执行:
$ asdf foo # 等同于运行 \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash\`
+$ asdf foo bar # 等同于运行 \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command.bash bar\`
+$ asdf foo help # 等同于运行 \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command-help.bash\`
+$ asdf foo bat man # 等同于运行 \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat-man.bash\`
+$ asdf foo bat baz # 等同于运行 \`$ASDF_DATA_DIR/plugins/foo/lib/commands/command-bat.bash baz\`
插件作者可以使用此功能来提供与其工具相关的实用命令,或者可以创建 asdf 本身的新命令扩展的插件。
调用时,如果扩展命令未设置其可执行位,则它们将作为 bash 脚本获取,且具有来自 $ASDF_DIR/lib/utils.bash
的所有可用功能。 此外,$ASDF_CMD_FILE
解析所获取文件的完整路径。 如果设置了可执行位,则只是执行它们并替换 asdf 执行。
这个功能的一个很好的例子是像 haxe
这样的插件。 它提供了 asdf haxe neko-dylibs-link
来修复 haxe 可执行文件期望找到相对于可执行目录的动态链接库的问题。
如果你的插件提供了 asdf 扩展命令,请务必在插件的 README 文件中提及。
请仅在真的需要时才使用此功能
asdf 允许自定义垫片模板。对于名为 foo
的可执行程序,如果有一个 shims/foo
的文件在插件中,那么 asdf 将复制这个文件替代使用标准垫片模板。
必须明智地使用这一点。对于目前的 AFAIK,它仅仅被使用在了 Elixir 插件中,因为一个可执行程序除了是可执行程序文件之外,还被读作为 Elixir 文件,这使得无法使用标准的 bash 垫片。
asdf
包含 plugin-test
命令用于测试插件。你可以像下面这样使用它:
asdf plugin test <plugin-name> <plugin-url> [--asdf-tool-version <version>] [--asdf-plugin-gitref <git-ref>] [test-command*]
只有前两个参数是必须的。 如果指定了 _version,则该工具将随指定版本一起安装。默认返回为 asdf latest <plugin-name>
。 如果指定了 git-ref,则插件将检查提交/分支/标签。这对于在该插件的 CI 上测试拉取请求非常有用。默认值是插件仓库的默认分支。
剩下的参数被视为要执行的命令,以确保安装的工具正常工作。通常情况下,它需要带 --version
或者 --help
。例如,要测试 NodeJS 插件,我们可以运行:
asdf plugin test nodejs https://github.com/asdf-vm/asdf-nodejs.git node --version
我们强烈建议你在 CI 环境中测试你的插件,并确保它可以在 Linux 和 OSX 上运行。
asdf-vm/actions 存储库为托管在 github 的项目提供了使用 Github Action 来测试插件的可能。
steps:
+ - name: asdf_plugin_test
+ uses: asdf-vm/actions/plugin-test@v1
+ with:
+ command: "my_tool --version"
+ env:
+ GITHUB_API_TOKEN: \${{ secrets.GITHUB_TOKEN }} # 自动提供
这是一个 .travis.yml
示例文件,请根据你的需要进行自定义:
language: c
+script: asdf plugin test nodejs $TRAVIS_BUILD_DIR 'node --version'
+before_script:
+ - git clone https://github.com/asdf-vm/asdf.git asdf
+ - . asdf/asdf.sh
+os:
+ - linux
+ - osx
注意: 当使用其他 CI 时,你将需要确认哪些变量映射到存储库路径。
你还可以选择将相对路径传递给 plugin-test
。
例如,如果在存储库目录中运行测试脚本:asdf plugin test nodejs . 'node --version'
。
如果你的插件的 list-all
依赖于访问 GitHub API,请确保在访问时提供授权令牌,否则你的测试可能会因频率限制而失败。
为此,创建一个仅具有 public_repo
权限的 新个人令牌。
然后,在 travis.ci 构建设置中添加一个名为 GITHUB_API_TOKEN
的 安全 环境变量。并且 绝对不要 在你的代码中公布你的 token。
最后,添加如下内容到 bin/list-all
:
cmd="curl -s"
+if [ -n "$GITHUB_API_TOKEN" ]; then
+ cmd="$cmd -H 'Authorization: token $GITHUB_API_TOKEN'"
+fi
+
+cmd="$cmd $releases_path"
asdf
可以通过指定插件存储库 url 轻松安装插件,比如 plugin add my-plugin https://github.com/user/asdf-my-plugin.git
。
为了使你的用户更轻松,你可以将插件添加到官方插件存储库中,以列出你的插件并使用较短的命令轻松安装,比如 asdf plugin add my-plugin
。
请查看插件存储库 asdf-vm/asdf-plugins 中的说明了解更多。
`,109)]))}const g=i(n,[["render",t]]);export{r as __pageData,g as default}; diff --git a/contribute/core.html b/contribute/core.html new file mode 100644 index 00000000..d7e2ba00 --- /dev/null +++ b/contribute/core.html @@ -0,0 +1,63 @@ + + + + + +The Multiple Runtime Version Manager
Manage all your runtime versions with one tool!
O Gerenciador de Múltiplas Versões de Tempo de Execução
Gerencie todas as suas versões de tempo de execução com uma ferramenta!