Skip to content

Hooks

Theo mặc định, Volta tải Node, npm và Yarn từ các nguồn và registry công khai (https://nodejs.org, https://yarnpkg.com, https://www.npmjs.com). Tuy nhiên, tùy thuộc vào môi trường của bạn, bạn có thể cần yêu cầu Volta tải từ một nguồn khác (ví dụ: npm Enterprise cho các công cụ nội bộ). Để hỗ trợ điều đó, Volta cung cấp hooks vào quá trình tải.

Chỉ định hooks ở đâu

Hooks luôn được đặt trong một file tên là hooks.json. File này có thể nằm ở một trong hai vị trí, tùy thuộc vào phạm vi bạn muốn các hooks đó có hiệu lực:

  • Hooks được chỉ định trong thư mục Volta (~/.volta/hooks.json trên Linux/MacOS, %LOCALAPPDATA%\Volta\hooks.json trên Windows) sẽ áp dụng trên toàn bộ hệ thống.
  • Hooks được chỉ định trong thư mục con .volta của một dự án (<PROJECT ROOT>/.volta/hooks.json) sẽ chỉ áp dụng trong dự án đó. <PROJECT ROOT> ở đây được định nghĩa là vị trí của package.json cho dự án đó.

Định dạng file Hooks

Nội dung của hooks.json phải là một object, với các key tùy chọn cho mỗi loại công cụ (hiện tại là node, npmyarn). Mỗi công cụ có 3 hành động có thể áp dụng hook cho mỗi hành động:

  • index Đại diện cho URL được sử dụng để xác định danh sách các phiên bản có sẵn để tải cho công cụ đó. Phản hồi khi truy cập URL đó phải khớp với định dạng của các index công khai cho công cụ đã chọn.
  • latest Đại diện cho URL được sử dụng để xác định phiên bản mới nhất của công cụ đó. Đối với node, phản hồi nên có cùng định dạng như index, đảm bảo rằng phiên bản mới nhất là phần tử đầu tiên trong danh sách. Đối với yarn, phản hồi nên là chuỗi số phiên bản thô và không có gì khác.
  • distro Đại diện cho URL được sử dụng để tải các binary của công cụ.

Cuối cùng, mỗi hành động có 3 hooks khả dĩ (được mô tả bên dưới) có thể được sử dụng (chỉ một trong số đó có thể được chỉ định cho mỗi hành động tại bất kỳ thời điểm nào). Một file hooks.json ví dụ như sau:

json
{
    "node": {
        "index": {
            "bin": "/usr/local/node-lookup"
        },
        "latest": {
            "prefix": "http://example.com/node/"
        },
        "distro": {
            "template": "http://example.com/{{os}}/{{arch}}/node-{{version}}.tar.gz"
        }
    },
    "npm": {
        "index": {
            "prefix": "http://example.com/npm/"
        },
        "latest": {
            "bin": "~/npm-latest"
        },
        "distro": {
            "template": "http://example.com/npm/npm-{{version}}.tgz"
        }
    },
    "yarn": {
        "index": {
            "template": "http://example.com/yarn/{{os}}/{{arch}}/yarn-{{version}}.tgz"
        },
        "latest": {
            "prefix": "http://example.com/yarnpkg/"
        },
        "distro": {
            "bin": "~/yarn-distro"
        }
    }
}

Các loại Hook

Hook prefix

Hook prefix là một sự thay thế URL đơn giản. URL sẽ được xây dựng bằng cách sử dụng prefix được chỉ định, theo sau là tên file công khai cho hành động đó. Ví dụ, sử dụng hooks.json ở trên, chúng ta có một hook prefix được chỉ định để xác định phiên bản yarn mới nhất. Theo mặc định, Volta sẽ tải phiên bản mới nhất bằng cách gửi yêu cầu đến https://yarnpkg.com/latest-version. Sử dụng hook, Volta sẽ thay vì truy cập http://example.com/yarnpkg/latest-version, thêm latest-version vào prefix được chỉ định là http://example.com/yarnpkg/.

Hook template

Hook template cho phép bạn chỉ định template cho một URL, với các wildcard sẽ được thay thế. Các wildcard khả dĩ là:

  • sẽ được thay thế bằng darwin, linux hoặc win, tùy thuộc vào hệ điều hành.
  • sẽ được thay thế bằng x86 hoặc x64, tùy thuộc vào kiến trúc của hệ thống.
  • (Chỉ khả dĩ cho các hành động distro) sẽ được thay thế bằng phiên bản cụ thể của công cụ mà Volta đang cố tải.
  • sẽ được thay thế bằng tên của file mà Volta sẽ tải từ registry công khai.
  • (Chỉ khả dĩ cho các hành động distro) sẽ được thay thế bằng phần mở rộng file mà Volta mong đợi tải.

TIP

Các thay thế filenameext chỉ khả dĩ trong Volta 0.8.4 hoặc mới hơn

Sử dụng hook node.distro từ ví dụ ở trên, khi tải node@10.15.3 trên hệ thống Linux 64-bit, Volta sẽ cố tải tarball từ: http://example.com/linux/x64/node-10.15.3.tar.gz

Hook bin

Hook bin là một hook đa năng sẽ gọi đến một script bên ngoài để xác định URL. Giá trị là một đường dẫn đến một script thực thi sẽ được gọi, và URL sẽ được đọc từ stdout của script đó. stderr của script sẽ được hiển thị cho người dùng, vì vậy nó có thể được sử dụng để hiển thị thanh tiến trình hoặc vòng chờ nếu muốn. Nếu đường dẫn đến script là tương đối thì nó sẽ được phân giải tương đối so với file hooks.json mà nó được chỉ định. Trong ngữ cảnh này, một đường dẫn tương đối có nghĩa là đường dẫn bắt đầu bằng ./ hoặc ../ trên Linux/MacOS và bắt đầu bằng .\ hoặc ..\ trên Windows. Cuối cùng, đối với các hook hành động distro, phiên bản được yêu cầu của công cụ sẽ được truyền làm đối số đầu tiên cho script đó.

Sử dụng hook yarn.distro từ ví dụ hooks.json, khi tải yarn@1.13.0, Volta sẽ gọi ~/yarn-distro "1.13.0" và cố tải tarball từ URL được trả về bởi hook đó.

Released under the BSD 2-Clause License.