NPM private registry với AWS CodeArtifact
Bài đăng này sẽ trình bày cách tạo, tải lên và nhúng các package nodejs bằng AWS CodeArtifact, nó cho phép bạn chia sẻ mã trong tổ chức hoặc trong nhóm của mình mà không để lộ thông tin các package của bạn ra ngoài với chi phí gần như bằng không.
Bạn sẽ tạo một package chứa một chức năng để bạn có thể sử dụng ở các dự án khác của bạn. Ngoài ra bạn sẽ phải có một dự án nodejs khác để dùng package bạn vừa tạo. Bạn cũng học sẽ học được cách cấu trúc package của mình để tự động đăng nhập vào CodeArifact khi bạn muốn tải lên hoặc build package.
Chọn repository ở CodeArtifact của bạn và chọn Details để xem các chi tiết bổ sung cho kho lưu trữ của bạn.
Chúng ta sử dụng hai thư mục từ trang này:
Nếu bạn thấy lỗi chứ "Invalid choice, valid choices are" thì bạn cần cập nhập AWS CLI theo các phiên bản mình đã liệt kê ở phần trên.
Bây giờ package.json của bạn sẽ được liệt kê @myorg/my-package trong phần phụ thuộc:
Bạn sẽ tạo một package chứa một chức năng để bạn có thể sử dụng ở các dự án khác của bạn. Ngoài ra bạn sẽ phải có một dự án nodejs khác để dùng package bạn vừa tạo. Bạn cũng học sẽ học được cách cấu trúc package của mình để tự động đăng nhập vào CodeArifact khi bạn muốn tải lên hoặc build package.
Tổng quan về AWS CodeArtifact
Sơ đồ sau minh hoạ về AWS CodeArtifact.
Các công việc cần thực hiện trước khi bắt đầu làm
- Tạo tài khoản AWS
- Cài đặt AWS Command Line Interface (AWS CLI). Code Artifact được hỗ trợ trong các phiên bản CLI này:
- 18.83 trở lên: install the AWS CLI version 1
- 0.54 trở lên: install the AWS CLI version 2
- Tạo repository Code Artifact
- Thêm các quyền IAM bắt buộc cho CodeArtifact
Tạo private npm package
Bạn có thể tạo gói npm của mình theo ba bước đơn giản là: thiết lập dự án, tạo script trong package.json để đăng nhập vào aws sử dụng CodeArtifact và xuất bản gói.Khởi tạo project nodejs
Tạo một thư mục cho package npm mới của bạn. Mình thường đặt tên thư mục này là my-package bởi vì nó đóng vai trò là tên của package.Và Chúng ta nên sử dụng npm scope cho package, tại đây @myorg đại diện cho phạm vi mà tất cả các package của team/tổ trức được xuất bản. Điều này giúp chúng ta phân biệt package privatevà các packpage public cũng như các package của các team khác nhau. Hãy xem đoạn code sau: npm init --scope=@myorg -y
{
"name": "@myorg/my-package",
"version": "1.0.0",
"description": "A sample private scoped npm package",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
}
}
Tệp package.json được chỉ định gọi vào file index.js. Tiếp theo, chúng ta tạo tệp đó và thêm chức năng của chúng ta vào nó:
module.exports.helloWorld = function() {
console.log('Hello world!');
}
Tạo các lệnh npm
Trên bảng điều khiển CodeArtifact, chọn repository mà bạn đã tạo ở trên phần trên. Nếu bạn chưa có repository, hãy tạo một cái trước khi tiếp tục.
Chọn repository ở CodeArtifact của bạn và chọn Details để xem các chi tiết bổ sung cho kho lưu trữ của bạn.
Chúng ta sử dụng hai thư mục từ trang này:
- Tên repository (my-repo)
- Tên miền (my-domain)
{ "name": "@myorg/my-package", "version": "1.0.0", "description": "A sample private scoped npm package", "main": "index.js", "scripts": { "co:login": "aws codeartifact login --tool npm --repository my-repo --domain my-domain", "test": "echo \"Error: no test specified\" && exit 1" } }
Chạy script này sẽ cập nhập cấu hình npm của bạn để sử dụng repository CodeArtifact của bạn và lấy xác thực để sử dụng CodeArtiface, việc xác thực này chỉ dùng được trong 12 giờ, hết 12 giờ chúng ta lại phải chạy lại script này để đăng nhập: npm run co:login. Sau khi chạy command trên bạn sẽ nhận được đoạn sau:
> aws codeartifact login --tool npm --repository my-repo --domain my-domain
Successfully configured npm to use AWS CodeArtifact repository https://my-domain-<ACCOUNT ID>.d.codeartifact.us-east-1.amazonaws.com/npm/my-repo/
Login expires in 12 hours at 2020-09-04 02:16:17-04:00
Thêm prepare vào package.json:{
"name": "@myorg/my-package",
"version": "1.0.0",
"description": "A sample private scoped npm package",
"main": "index.js",
"scripts": {
"prepare": "npm run co:login",
"co:login": "aws codeartifact login --tool npm --repository my-repo --domain my-domain",
"test": "echo \"Error: no test specified\" && exit 1"
}
}
Điều này dùng để định cấu hình dự án, giúp tự động xác thực và tạo quyền truy cập bất cứ lúc nào khi các bạn dùng npm install hoặc npm publish trong dự án.Nếu bạn thấy lỗi chứ "Invalid choice, valid choices are" thì bạn cần cập nhập AWS CLI theo các phiên bản mình đã liệt kê ở phần trên.
Tải package lên CodeArtifact
Để xuất bản gói mới trong lần đầu tiên, chạy npm publish.Nếu quay lại CodeArtifact ở trình duyệt, bạn sẽ thấy package mới đã sẵn sàng để sử dụng
Cài đặt private package
Để cài đặt gói private package, trước tiên bạn cần thiết lập dự án và thêm các script để tự động hoá việc sử dụng CodeArtifact trong dự án.Tạo dự án mới
Tạo thư mục cho dự án mới và đặt tên cho nó là my-app. Đây là dự án mà bạn muốn dùng private npm cái chúng ta đã xuất bản ở bước trước. Bạn có thể áp dụng cách này cho tất cả các dự ác khác mà bạn muốn dùng registry này: npm init -y{
"name": "my-app",
"version": "1.0.0",
"description": "A sample application consuming a private scoped npm package",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
}
}
Thêm cấu hình CodeArtifact
Sao chép các tập lệnh npm prepare và co:login đã tạo trước đó cho dự án mới:{
"name": "my-app",
"version": "1.0.0",
"description": "A sample application consuming a private scoped npm package",
"main": "index.js",
"scripts": {
"prepare": "npm run co:login",
"co:login": "aws codeartifact login --tool npm --repository my-repo --domain my-domain",
"test": "echo \"Error: no test specified\" && exit 1"
}
}
Cài đặt gói private npm mới
Nhập lệnh sau: npm install @myorg/my-packageBây giờ package.json của bạn sẽ được liệt kê @myorg/my-package trong phần phụ thuộc:
{
"name": "my-app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"prepare": "npm run co:login",
"co:login": "aws codeartifact login --tool npm --repository my-repo --domain my-domain",
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"@myorg/my-package": "^1.0.0"
}
}
Sử dụng package npm
Trong thư mục my-app, hãy tạo index.js để chạy code từ package có chứa thông tin sau:const { helloWorld } = require('@myorg/my-package');
helloWorld();
Chạy node index.js trong terminal để in thông báo từ hàm @myorg/my-package của mình.