Webpack - Phụ thuộc quan trọng: yêu cầu của một phụ thuộc là một biểu thức


81

Tôi nhận được ba thông báo cảnh báo khi nhập requestvào một dự án webpack khung. Một ví dụ tối thiểu để tái tạo lỗi có sẵn trên GitHub (chạy npm installnpm start).

Critical dependency: the request of a dependency is an expression

Làm cách nào để thoát khỏi cảnh báo này?


Thêm thông tin:

Webpack cố gắng giải quyết requirecác cuộc gọi một cách tĩnh để tạo ra một gói tối thiểu. Khi một thư viện sử dụng các biến hoặc biểu thức trong một yêu cầu cuộc gọi (như require('' + 'nodent')những dòng này của ajv), Webpack không thể giải quyết chúng tĩnh và nhập khẩu toàn bộ gói.

Cơ sở lý luận của tôi là quá trình nhập động này không được mong muốn trong quá trình sản xuất và mã tốt nhất là không có cảnh báo. Điều đó có nghĩa là tôi muốn có bất kỳ giải pháp nào giải quyết được vấn đề. Ví dụ:

  1. Định cấu hình webpack theo cách thủ công để nhập các thư viện cần thiết và ngăn các cảnh báo xảy ra.
  2. Thêm hack.jstệp vào dự án của tôi để ghi đè các lệnh gọi yêu cầu theo một cách nào đó.
  3. Nâng cấp thư viện của tôi. ajv-5.0.1-beta.3có một bản sửa lỗi làm im lặng các cảnh báo. Tuy nhiên, nếu tôi muốn sử dụng nó, tôi phải đợi cho đến khi nó được phát hành, sau đó đến har-validatorrequestphát hành các bản cập nhật tiếp theo. Nếu có một cách để buộc har-validatorsử dụng phiên bản beta của ajv, điều đó sẽ giải quyết được vấn đề của tôi.
  4. Khác

1. github.com/epoberezkin/ajv/issues/117#issuecomment-198328830 2. Tôi không nghĩ nó sẽ hoạt động 3. bạn sẽ phải đợi một chút.
đặc biệt

@esp: bình luận github đó có vẻ là thứ tôi đang tìm kiếm, nhưng nó không làm im lặng các cảnh báo. Nếu tôi thay đổi nó thành new webpack.IgnorePlugin(/async/, /ajv/), hai trong số ba cảnh báo sẽ biến mất nhưng webpack Cannot find module "../async". Bất kỳ ý tưởng nào về giá trị ma thuật thích hợp để làm cho nó hoạt động?
Jodiug

Liên kết đến ví dụ mã github bị hỏng. Xin vui lòng đặt mã trực tiếp vào câu hỏi.
CodeChimpy

Câu trả lời:


25

Đã giải quyết với npm install request@2.79.0 --save

Theo các tác giả của ajv, vấn đề có thể sẽ được giải quyết trong phiên bản mới nhất requesttrong vài tuần tới.


@maembe hãy thử npm remove requestvà cài đặt lại, sau đó package.jsonxóa ^số phiên bản trước. Nếu bạn rời khỏi ^, gói có thể được cập nhật sau khi npm updatevà cảnh báo xuất hiện lại.
Jodiug

Không làm việc cho tôi. Nhưng gợi ý của @DhirendraNk trong một câu trả lời khác bên dưới, đó là thay thế webpack.ContextReplacementPlugin đã phù hợp với tôi.
Will

9

Thay thế cái này

new webpack.ContextReplacementPlugin(
        /angular(\\|\/)core(\\|\/)@angular/,
        helpers.root('./src'), // location of your src
        {} // a map of your routes
    ),

Với cái này-

new webpack.ContextReplacementPlugin( /(.+)?angular(\\|\/)core(.+)?/, root('./src'), {} )

7
Điều này có hiệu quả. Sẽ rất tuyệt nếu được giải thích sâu hơn về lý do tại sao thay đổi biểu thức chính quy lại khắc phục được vấn đề này.
atconway

Điều này phù hợp với tôi, thật khó chịu khi thấy cảnh báo, cảm ơn.
Will

2
có ai biết nơi để tìm mã này? Tôi không thể tìm thấy mã để thay thế.
Prem popatia

2
Điều này hoạt động vì bạn đang cho System.Importhàm biết vị trí tìm mã nguồn trong node_modulesthư mục. Đường dẫn thay đổi tùy thuộc vào phiên bản Angular mà bạn đang sử dụng. Nó sẽ được xử lý tốt hơn bởi nhóm Angular, hy vọng nó đã được.
Robert Brisita

1

Cảnh báo này có thể được liên kết với các gói được tiêm vào (phụ thuộc hoặc devDependencies).

Nếu sự cố đột ngột xuất hiện, hãy kiểm tra sửa đổi cuối cùng trong package.json của bạn.

Cân nhắc xóa package-lock.json nếu bạn định khởi chạy lại một npm install.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.