mirror of
https://github.com/verdaccio/verdaccio.git
synced 2024-12-23 22:27:34 -05:00
8338d9be22
* New translations dev-plugins.md (Vietnamese) docs(website): new translations * New translations dev-plugins.md (Vietnamese) docs(website): new translations * New translations dev-plugins.md (Vietnamese) docs(website): new translations * New translations dev-plugins.md (Vietnamese) docs(website): new translations * New translations dev-plugins.md (Vietnamese) docs(website): new translations * New translations dev-plugins.md (Vietnamese) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations en.json (Russian) docs(website): new translations * New translations auth.md (Russian) docs(website): new translations * New translations en.json (Russian) docs(website): new translations * New translations auth.md (Russian) docs(website): new translations * New translations en.json (Russian) docs(website): new translations * New translations en.json (Russian) docs(website): new translations * New translations install.md (Russian) docs(website): new translations * New translations en.json (Russian) docs(website): new translations * New translations ansible.md (Polish) docs(website): new translations * New translations auth.md (Polish) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations auth.md (Russian) docs(website): new translations * New translations auth.md (Russian) docs(website): new translations * New translations auth.md (Russian) docs(website): new translations * New translations auth.md (Russian) docs(website): new translations * New translations build.md (Russian) docs(website): new translations * New translations build.md (Russian) docs(website): new translations * New translations ci.md (Russian) docs(website): new translations * New translations chef.md (Russian) docs(website): new translations * New translations cli.md (Russian) docs(website): new translations * New translations ci.md (Russian) docs(website): new translations * New translations cli.md (Russian) docs(website): new translations * New translations config.md (Russian) docs(website): new translations * New translations config.md (Russian) docs(website): new translations * New translations config.md (Russian) docs(website): new translations * New translations config.md (Russian) docs(website): new translations * New translations config.md (Russian) docs(website): new translations * New translations auth.md (Russian) docs(website): new translations * New translations en.json (Russian) docs(website): new translations * New translations contributing.md (Russian) docs(website): new translations * New translations contributing.md (Russian) docs(website): new translations * New translations contributing.md (Russian) docs(website): new translations * New translations contributing.md (Russian) docs(website): new translations * New translations contributing.md (Russian) docs(website): new translations * New translations contributing.md (Russian) docs(website): new translations * New translations contributing.md (Russian) docs(website): new translations * New translations dev-plugins.md (Russian) docs(website): new translations * New translations dev-plugins.md (Russian) docs(website): new translations * New translations dev-plugins.md (Russian) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations contributing.md (Vietnamese) docs(website): new translations * New translations contributing.md (Vietnamese) docs(website): new translations * New translations dev-plugins.md (Vietnamese) docs(website): new translations * New translations iis-server.md (Vietnamese) docs(website): new translations * New translations iis-server.md (Vietnamese) docs(website): new translations * New translations iis-server.md (Vietnamese) docs(website): new translations * New translations iis-server.md (Vietnamese) docs(website): new translations * New translations iis-server.md (Vietnamese) docs(website): new translations * New translations iis-server.md (Vietnamese) docs(website): new translations * New translations install.md (Vietnamese) docs(website): new translations * New translations install.md (Vietnamese) docs(website): new translations * New translations install.md (Vietnamese) docs(website): new translations * New translations kubernetes.md (Vietnamese) docs(website): new translations * New translations kubernetes.md (Vietnamese) docs(website): new translations * New translations auth.md (Polish) docs(website): new translations * New translations cli.md (Polish) docs(website): new translations * New translations config.md (Polish) docs(website): new translations * New translations contributing.md (Polish) docs(website): new translations * New translations dev-plugins.md (Polish) docs(website): new translations * New translations dev-plugins.md (Polish) docs(website): new translations * New translations notifications.md (Polish) docs(website): new translations * New translations protect-your-dependencies.md (Polish) docs(website): new translations * New translations en.json (Polish) docs(website): new translations * New translations en.json (Polish) docs(website): new translations * New translations puppet.md (Polish) docs(website): new translations * New translations en.json (Polish) docs(website): new translations * New translations install.md (Vietnamese) docs(website): new translations * New translations install.md (Italian) docs(website): new translations * New translations install.md (Polish) docs(website): new translations * New translations install.md (Russian) docs(website): new translations * New translations install.md (Korean) docs(website): new translations * New translations install.md (Portuguese) docs(website): new translations * New translations install.md (Spanish) docs(website): new translations * New translations install.md (Arabic) docs(website): new translations * New translations install.md (Chinese Simplified) docs(website): new translations * New translations install.md (Portuguese, Brazilian) docs(website): new translations * New translations install.md (Japanese) docs(website): new translations * New translations install.md (French) docs(website): new translations * New translations install.md (German) docs(website): new translations * New translations kubernetes.md (Vietnamese) docs(website): new translations * New translations kubernetes.md (Vietnamese) docs(website): new translations * New translations logger.md (Vietnamese) docs(website): new translations * New translations logger.md (Vietnamese) docs(website): new translations * New translations node-api.md (Vietnamese) docs(website): new translations * New translations dev-plugins.md (Russian) docs(website): new translations * New translations dev-plugins.md (Russian) docs(website): new translations * New translations dev-plugins.md (Russian) docs(website): new translations * New translations docker.md (Russian) docs(website): new translations * New translations docker.md (Russian) docs(website): new translations * New translations docker.md (Russian) docs(website): new translations * New translations docker.md (Vietnamese) docs(website): new translations * New translations en.json (Vietnamese) docs(website): new translations * New translations en.json (Italian) docs(website): new translations * New translations en.json (Polish) docs(website): new translations * New translations en.json (Portuguese) docs(website): new translations * New translations en.json (Russian) docs(website): new translations * New translations en.json (Korean) docs(website): new translations * New translations en.json (Portuguese, Brazilian) docs(website): new translations * New translations en.json (Spanish) docs(website): new translations * New translations en.json (Chinese Simplified) docs(website): new translations * New translations en.json (German) docs(website): new translations * New translations en.json (Japanese) docs(website): new translations * New translations en.json (Arabic) docs(website): new translations * New translations en.json (French) docs(website): new translations
188 lines
No EOL
7.1 KiB
Markdown
188 lines
No EOL
7.1 KiB
Markdown
---
|
|
id: dev-plugins
|
|
title: "Phát triển các phần mềm bổ trợ"
|
|
---
|
|
Có nhiều cách để mở rộng `verdaccio`. Các loại phần mềm bổ trợ là:
|
|
|
|
* Những phần mềm bổ trợ xác minh
|
|
* Phần mềm bổ trợ Middleware (kể từ phiên bản `v2.7.0`)
|
|
* Phần mềm bổ trợ lưu trữ từ phiên bản (` v3.x `)
|
|
|
|
> Chúng tôi khuyên bạn nên phát triển phần mềm bổ trợ bằng cách sử dụng [định nghĩa loại luồng ](https://github.com/verdaccio/flow-types) của chúng tôi.
|
|
|
|
## Phần mềm bổ trợ xác minh
|
|
|
|
Cơ bản chúng ta phải trả về một đối tượng với phương thức được gọi là `authenticate`, và sẽ nhận lại 3 tham số (`user, password, callback`).
|
|
|
|
### API
|
|
|
|
```flow
|
|
interface IPluginAuth extends IPlugin {
|
|
login_url?: string;
|
|
authenticate(user: string, password: string, cb: Callback): void;
|
|
adduser(user: string, password: string, cb: Callback): void;
|
|
allow_access(user: RemoteUser, pkg: $Subtype<PackageAccess>, cb: Callback): void;
|
|
allow_publish(user: RemoteUser, pkg: $Subtype<PackageAccess>, cb: Callback): void;
|
|
}
|
|
```
|
|
|
|
> Chỉ có các tùy chọn là `adduser`, ` allow_access` và `allow_publish` và verdaccio cung cấp chức năng dự phòng trong tất cả các tùy chọn này.
|
|
|
|
#### Callback
|
|
|
|
Khi xác thực được thực hiện, có hai tùy chọn để trả lời `verdaccio`.
|
|
|
|
###### OnError
|
|
|
|
Hiện lỗi này nghĩa là hoặc xảy ra lỗi hoặc xác thực không thành công.
|
|
|
|
```flow
|
|
callback(null, false)
|
|
```
|
|
|
|
###### OnSuccess
|
|
|
|
Xác thực thành công.
|
|
|
|
`groups` là một tập hợp các chuỗi người dùng.
|
|
|
|
callback(null, groups);
|
|
|
|
|
|
### Ví dụ
|
|
|
|
```javascript
|
|
function Auth(config, stuff) {
|
|
var self = Object.create(Auth.prototype);
|
|
self._users = {};
|
|
|
|
// config for this module
|
|
self._config = config;
|
|
|
|
// verdaccio logger
|
|
self._logger = stuff.logger;
|
|
|
|
// pass verdaccio logger to ldapauth
|
|
self._config.client_options.log = stuff.logger;
|
|
|
|
return self;
|
|
}
|
|
|
|
Auth.prototype.authenticate = function (user, password, callback) {
|
|
var LdapClient = new LdapAuth(self._config.client_options);
|
|
....
|
|
LdapClient.authenticate(user, password, function (err, ldapUser) {
|
|
...
|
|
var groups;
|
|
...
|
|
callback(null, groups);
|
|
});
|
|
};
|
|
|
|
module.exports = Auth;
|
|
```
|
|
|
|
Cấu hình sẽ trông như thế này:
|
|
|
|
```yaml
|
|
auth:
|
|
htpasswd:
|
|
file: ./htpasswd
|
|
```
|
|
|
|
Trong đó `htpasswd` là tên của một phần mềm bổ trợ, ví dụ: hậu tố của `verdaccio-htpasswd`. Các mã còn lại là các tham số của cấu hình phần mềm bổ trợ.
|
|
|
|
## Phần mềm bổ trợ Middleware
|
|
|
|
Phần mềm bổ trợ Middleware có khả năng sửa đổi giao diện API để thêm các điểm cuối mới hoặc chặn các yêu cầu.
|
|
|
|
```flow
|
|
interface verdaccio$IPluginMiddleware extends verdaccio$IPlugin {
|
|
register_middlewares(app: any, auth: IBasicAuth, storage: IStorageManager): void;
|
|
}
|
|
```
|
|
|
|
### register_middlewares
|
|
|
|
Phương thức này sẽ cung cấp đầy đủ cách truy cập để xác thực và lưu trữ thông qua `auth` và `storage`. Nếu bạn muốn thêm điểm cuối mới, hãy dùng ứng dụng `app`.
|
|
|
|
> Một ví dụ điển hình về phần mềm bổ trợ Middleware là [ sinopia-github-oauth ](https://github.com/soundtrackyourbrand/sinopia-github-oauth) và <a href = "https: // Github.com/verdaccio/verdaccio-audit">verdaccio-audit </a>.
|
|
|
|
### API
|
|
|
|
```js
|
|
function register_middlewares(expressApp, authInstance, storageInstance) {
|
|
/* more stuff */
|
|
}
|
|
```
|
|
|
|
Bằng cách sử dụng một cách thức duy nhất để đăng ký middleware là `register_middlewares`, chúng ta cần tìm một đối tượng có thể nhận được 3 tham số (` expressApp, auth, storage `) được gọi là. Lớp xác thực *Auth* và lớp lưu trữ chính *storage* cho phép bạn truy cập vào tất cả các hoạt động lưu trữ.
|
|
|
|
## Phần mềm bổ trợ lưu trữ
|
|
|
|
Theo mặc định, Verdaccio sử dụng phần mềm bổ trợ lưu trữ hệ thống tệp [local-storage](https://github.com/verdaccio/local-storage), tuy nhiên, từ phiên bản `verdaccio@3.x ` bạn có thể chèn lưu trữ tùy chỉnh thay vì hành vi mặc định.
|
|
|
|
### API
|
|
|
|
Vì API lưu trữ phức tạp hơn nên bạn sẽ cần phải tạo một lớp (bao gồm nhóm các đối tượng mà có các thuộc tính chung) có thể hoàn tác lại việc sử dụng ` IPluginStorage `. Vui lòng xem chi tiết bên dưới.
|
|
|
|
```flow
|
|
class LocalDatabase<IPluginStorage>{
|
|
constructor(config: $Subtype<verdaccio$Config>, logger: verdaccio$Logger): ILocalData;
|
|
}
|
|
|
|
interface IPluginStorage {
|
|
logger: verdaccio$Logger;
|
|
config: $Subtype<verdaccio$Config>;
|
|
add(name: string, callback: verdaccio$Callback): void;
|
|
remove(name: string, callback: verdaccio$Callback): void;
|
|
get(callback: verdaccio$Callback): void;
|
|
getSecret(): Promise<string>;
|
|
setSecret(secret: string): Promise<any>;
|
|
getPackageStorage(packageInfo: string): verdaccio$IPackageStorage;
|
|
search(onPackage: verdaccio$Callback, onEnd: verdaccio$Callback, validateName: Function): void;
|
|
}
|
|
|
|
interface IPackageStorageManager {
|
|
path: string;
|
|
logger: verdaccio$Logger;
|
|
writeTarball(name: string): verdaccio$IUploadTarball;
|
|
readTarball(name: string): verdaccio$IReadTarball;
|
|
readPackage(fileName: string, callback: verdaccio$Callback): void;
|
|
createPackage(name: string, value: verdaccio$Package, cb: verdaccio$Callback): void;
|
|
deletePackage(fileName: string, callback: verdaccio$Callback): void;
|
|
removePackage(callback: verdaccio$Callback): void;
|
|
updatePackage(pkgFileName: string,
|
|
updateHandler: verdaccio$Callback,
|
|
onWrite: verdaccio$Callback,
|
|
transformPackage: Function,
|
|
onEnd: verdaccio$Callback): void;
|
|
savePackage(fileName: string, json: verdaccio$Package, callback: verdaccio$Callback): void;
|
|
}
|
|
|
|
class verdaccio$IUploadTarball extends stream$PassThrough {
|
|
abort: Function;
|
|
done: Function;
|
|
_transform: Function;
|
|
abort(): void;
|
|
done(): void;
|
|
}
|
|
|
|
class verdaccio$IReadTarball extends stream$PassThrough {
|
|
abort: Function;
|
|
abort(): void;
|
|
}
|
|
```
|
|
|
|
> API lưu trữ vẫn đang trong quá trình chạy thử nghiệm và có thể sẽ được sửa đổi trong phiên bản tiếp theo. Để biết thêm thông tin về API lưu trữ, vui lòng truy cập [ và nhập định nghĩa trong kho lưu trữ chính thức của chúng tôi ](https://github.com/verdaccio/flow-types).
|
|
|
|
### Những ví dụ về phần mềm bổ trợ bộ nhớ
|
|
|
|
Dưới đây là danh sách những phần mềm bổ trợ đang sử dụng API lưu trữ và có thể được sử dụng làm ví dụ.
|
|
|
|
* [verdaccio-memory](https://github.com/verdaccio/verdaccio-memory)
|
|
* [local-storage](https://github.com/verdaccio/local-storage)
|
|
* [verdaccio-google-cloud](https://github.com/verdaccio/verdaccio-google-cloud)
|
|
* [verdaccio-s3-storage](https://github.com/Remitly/verdaccio-s3-storage/tree/s3)
|
|
|
|
> Bạn đã sẵn sàng đóng góp vào phần mềm bổ trợ lưu trữ mới chưa? [Nhấp vào đây.](https://github.com/verdaccio/verdaccio/issues/103#issuecomment-357478295) |