Đây là một thư viện JavaScript nhỏ cố gắng mô phỏng thời gian chạy NodeJS trên máy ảo V8. Nó cố gắng tương thích hoàn toàn với API NodeJS nhất có thể, đồng thời cho phép kết nối các tính năng chọn lọc vào. Hiện tại, các hook được giới hạn trong -procedure
🔍 Tìm thấy sự không nhất quán với API NodeJS chính thức khiến một số mô-đun không hoạt động với máy ảo này?
Tại sao
vm-nodejs khác với vm2 theo nghĩa là nó không cố gắng cung cấp sự cô lập hoàn toàn và do đó, nó nhẹ hơn nhiều. Trên hết, nó cho phép kết nối vào bên trong NodeJS theo cách mà vm2 không cho phép
- Chạy nhiều chương trình trong một quy trình chia sẻ các phụ thuộc giống nhau trong môi trường có bộ nhớ hạn chế
- Phát hiện khi tập lệnh được yêu cầu và tải lại các phụ thuộc [yêu cầu theo dõi]
⚠️ Thư viện này hoàn toàn không nhằm cung cấp sự cô lập hoàn toàn, chỉ đơn thuần là một cách để chạy nhiều phiên bản NodeJS trong một quy trình. Nếu bạn cần cách ly hoàn toàn, hãy xem gói vm2
Cài đặt
$ npm i --save vm-nodejs
API
const NodeVM = require['vm-nodejs']
mô-đun. tải lại[]
Tải lại mô-đun và tất cả các phần phụ thuộc của nó và trả về một đối tượng Module
mới như thể require[]
đã được gọi lần đầu tiên trên chính mô-đun và các phần phụ thuộc của nó
mô-đun. bọn trẻ
Các đối tượng mô-đun được yêu cầu bởi cái này
mô-đun. xuất khẩu
mô-đun. đối tượng xuất khẩu được tạo bởi hệ thống Mô-đun. Đôi khi điều này không được chấp nhận; . Để thực hiện việc này, hãy gán đối tượng xuất mong muốn cho mô-đun. xuất khẩu. Lưu ý rằng việc gán đối tượng mong muốn cho xuất khẩu sẽ chỉ đơn giản là khởi động lại biến xuất khẩu cục bộ, đây có thể không phải là điều mong muốn
mô-đun. tên tập tin
Tên tệp được giải quyết đầy đủ cho mô-đun
mô-đun. Tôi
Mã định danh cho mô-đun. Thông thường, đây là tên tệp được giải quyết đầy đủ
mô-đun. cha mẹ
Mô-đun đầu tiên yêu cầu mô-đun này
mô-đun. yêu cầu [id]
Cung cấp cách tải một mô-đun như thể yêu cầu [] được gọi từ mô-đun ban đầu
NodeVM mới [[tùy chọn]]
Tạo một máy ảo NodeJS mới. Hiện tại không có tùy chọn nào
gật đầu. getModule[modulePath]
Hoạt động theo cách tương tự như -procedure, ngoại trừ các đường dẫn được giải quyết tương ứng với thư mục làm việc hiện tại và nó trả về một tham chiếu đến đối tượng Module
thay vì xuất của nó
gật đầu. on['yêu cầu', cb]
Sẽ kích hoạt cb
mỗi khi một câu lệnh yêu cầu mới được thực thi trong ngữ cảnh của máy ảo NodeJS. Cuộc gọi lại được kích hoạt với một đối số duy nhất e
chứa các thuộc tính sau
- mô-đun. một phiên bản mô-đun đại diện cho mô-đun được yêu cầu
const NodeVM = require['vm-nodejs']
const node = new NodeVM[]
node.on['require', e => {
console.log[`Required ${e.module.filename}`]
}]
node.getModule['index.js']
Giấy phép
Giấy phép MIT
PHẦN MỀM ĐƯỢC CUNG CẤP "NGUYÊN TRẠNG", KHÔNG CÓ BẢO ĐẢM DƯỚI BẤT KỲ HÌNH THỨC NÀO, RÕ RÀNG HAY NGỤ Ý, BAO GỒM NHƯNG KHÔNG GIỚI HẠN CÁC BẢO ĐẢM VỀ KHẢ NĂNG BÁN ĐƯỢC, TÍNH PHÙ HỢP CHO MỘT MỤC ĐÍCH CỤ THỂ VÀ KHÔNG VI PHẠM. TRONG BẤT KỲ TRƯỜNG HỢP NÀO TÁC GIẢ HOẶC NGƯỜI GIỮ BẢN QUYỀN SẼ KHÔNG CHỊU TRÁCH NHIỆM PHÁP LÝ VỀ BẤT KỲ KHIẾU NẠI, THIỆT HẠI HOẶC TRÁCH NHIỆM PHÁP LÝ KHÁC NÀO, DÙ TRONG MỘT HÀNH ĐỘNG HỢP ĐỒNG, NGOẠI TỆ HOẶC CÁCH NÀO KHÁC, PHÁT SINH TỪ, NGOÀI HOẶC LIÊN QUAN ĐẾN PHẦN MỀM HOẶC VIỆC SỬ DỤNG HOẶC CÁC GIAO DỊCH KHÁC TRONG