Tôi đang phát triển mô-đun nút my-module
do đó phụ thuộc vào một mô-đun khác other-module
. Do đó, other-module
là một phụ thuộc được liệt kê rõ ràng trong package.json của mô-đun của tôi.Cách tránh nút yêu cầu tải cùng một mô-đun hai lần
Như mô-đun của tôi sẽ thay đổi hành vi của other-module
chỉ bằng cách require
d, điều quan trọng là other-module
được nạp một lần duy nhất và điều này, một và chỉ 'dụ' là một tham chiếu trong suốt bất kỳ ứng dụng mà đòi hỏi cả hai my
và other
.
tôi mong đợi này để giữ đúng theo Mô-đun Policy Caching nút nhưng những gì tôi đã đi qua trong khi viết một ứng dụng thử nghiệm đơn giản là thế này:
Nếu my-module
là npm install
ed trướcother-module
sau đó sau này được đưa như một sự phụ thuộc của cái cũ. npm install
ing other-module
sau đó đưa nó vào phân cấp node_modules lần thứ hai. Sau đó, khi mô-đun của tôi yêu cầu other-module
, nút tải bản sao 'cục bộ' của mô-đun của tôi và khi ứng dụng require
nhấp vào nút thứ hai lần nữa, (lần này phiên bản đã được cài đặt do số npm install
thứ hai). Điều này rõ ràng không phải là kết quả dự định.
Nếu my-module
là npm installe
d sauother-module
sau đó tôi kết thúc với chỉ có một bản sao củaother-module
trong node_modules và ứng dụng thử nghiệm của tôi làm việc như mong đợi.
Hành vi này đã cho tôi nhìn qua các chính sách có liên quan của nút một lần nữa và chắc chắn đủ tôi đi qua các 'Mô-đun Caching Hãy cẩn thận':
Modules được lưu trữ dựa trên tên tập tin giải quyết của họ. Vì mô-đun có thể phân giải thành tên tệp khác dựa trên vị trí của mô-đun gọi (tải từ thư mục node_modules), nó không đảm bảo yêu cầu ('foo') sẽ luôn trả về cùng một đối tượng, nếu nó sẽ giải quyết các tệp khác nhau .
Tại thời điểm này, có vẻ như mô-đun của tôi có thể hoặc không hoạt động như mong đợi tùy theo thứ tự của npm install
s.
Có bất kỳ phương pháp hay nhất nào tôi bị thiếu không? Có cách nào để tránh lộn xộn này mà không thay đổi cách thức hoạt động của mô-đun của tôi?