Khi Webpack đóng gói các mô-đun của bạn, nó sẽ tuân theo chuỗi phụ thuộc của mô-đun mà bạn đã nhập (hoặc bắt buộc) và kéo tất cả các phụ thuộc của nó vào và cũng nhóm chúng đến tận cuối chuỗi.
Nếu có một tệp mà nó không biết cách tải trong chuỗi phụ thuộc đó thì loại lỗi này sẽ được tạo ra.
Điều này đôi khi có thể được giải quyết bằng cách thêm một trình tải biết cách tải loại phụ thuộc này. Tuy nhiên, nếu phần phụ thuộc là một mô-đun không phải gốc thì Webpack không thể tải nó. Một số trình tải biết cách tải các mô-đun với các phần phụ thuộc không phải gốc bằng cách khai thác và loại trừ phần không phải gốc để nó sẽ tải. Trong fs
ví dụ, bạn không cần có khả năng đọc và ghi tệp từ đĩa vì trình duyệt không thể làm điều đó nên không cần bao gồm phần đó.
Điều này đặt ra câu hỏi:Bạn cần chức năng nào từ mô-đun mongoose trong trình duyệt? Bạn có thể chỉ bao gồm chức năng đó chứ không phải toàn bộ mô-đun mongoose không?
Nếu bạn có thể làm được điều này thì bạn có thể giải quyết được 2 vấn đề:
- Bạn có thể giải quyết vấn đề gói Webpack vì phần mongoose mà bạn đưa vào dự án của mình không có các phần phụ thuộc con có vấn đề.
- Bạn sẽ tạo một gói nhỏ hơn với Webpack vì bạn sẽ chỉ bao gồm những phần bạn cần để tải trọng của gói.js cho khách hàng sẽ nhỏ hơn nhiều.
Ví dụ, gần đây tôi cần sử dụng trình tạo ObjectId mongodb trong máy khách. Tôi phát hiện ra rằng Webpack không thể đối phó với import mongodb from 'mongodb'
vì vậy khi đào sâu vào các phần phụ thuộc, tôi thấy rằng mongodb
phụ thuộc vào mongodb-core
cái này phụ thuộc vào bson
có ObjectId
phương pháp tôi cần.
Bằng cách chỉ nhập bson
thành phần của chuỗi phụ thuộc đó, tôi đã giải quyết được vấn đề Webpack và làm cho gói của tôi nhỏ hơn nhiều.
Nếu bạn đang sử dụng Npm 3 thì rất có thể bson
được cài đặt trong thư mục gốc của node_modules
nếu bạn đã sử dụng mongoose hoặc mongodb để bạn có thể import
nó mà không đặt tham chiếu rõ ràng đến nó trong package.json
của bạn . Điều này rõ ràng mang lại rủi ro rằng nếu sự phụ thuộc trên ngừng phụ thuộc vào nó thì bản dựng của bạn sẽ bị hỏng và bạn sẽ cần phải npm install
nó độc lập. Ưu điểm của việc sử dụng phương pháp này là bạn sẽ luôn sử dụng cùng một phiên bản của bson
mà phần phụ thuộc phía trên đang sử dụng có thể quan trọng.