hộp công việc-webpack-plugin

Workbox cung cấp 2 trình bổ trợ gói web: một trình bổ trợ tạo trình chạy dịch vụ hoàn chỉnh cho bạn và trình bổ trợ tạo danh sách các thành phần để lưu trước vào bộ nhớ đệm được chèn vào tệp trình chạy dịch vụ.

Các trình bổ trợ này được triển khai dưới dạng 2 lớp trong mô-đun workbox-webpack-plugin, có tên là GenerateSWInjectManifest. Câu trả lời cho các câu hỏi sau có thể giúp bạn chọn đúng trình bổ trợ và cấu hình mà bạn muốn sử dụng.

Nên sử dụng trình bổ trợ nào

GenerateSW

Trình bổ trợ GenerateSW sẽ tạo một tệp trình chạy dịch vụ cho bạn và thêm tệp đó vào quy trình tài sản gói web.

Trường hợp sử dụng GenerateSW

  • Bạn muốn lưu tệp vào bộ nhớ đệm trước.
  • Bạn có nhu cầu lưu vào bộ nhớ đệm đơn giản trong thời gian chạy.

Những trường hợp KHÔNG nên sử dụng GenerateSW

  • Bạn muốn sử dụng các tính năng khác của Service Worker (ví dụ: Đẩy trên web).
  • Bạn muốn nhập các tập lệnh bổ sung hoặc thêm logic bổ sung cho các chiến lược lưu vào bộ nhớ đệm tuỳ chỉnh.

InjectManifest

Trình bổ trợ InjectManifest sẽ tạo một danh sách URL để lưu trước vào bộ nhớ đệm và thêm tệp kê khai bộ nhớ đệm đó vào một tệp trình chạy dịch vụ hiện có. Nếu không, tệp sẽ giữ nguyên.

Trường hợp sử dụng InjectManifest

  • Bạn muốn có nhiều quyền kiểm soát hơn đối với trình chạy dịch vụ của mình.
  • Bạn muốn lưu tệp vào bộ nhớ đệm trước.
  • Bạn cần tuỳ chỉnh việc định tuyến và các chiến lược.
  • Bạn muốn sử dụng trình chạy dịch vụ với các tính năng khác của nền tảng (ví dụ: Tính năng đẩy trên web).

Những trường hợp KHÔNG nên sử dụng InjectManifest

  • Bạn muốn sử dụng đường dẫn dễ nhất để thêm trình chạy dịch vụ vào trang web của mình.

Trình bổ trợ GenerateSW

Bạn có thể thêm trình bổ trợ GenerateSW vào cấu hình gói web như sau:

// Inside of webpack.config.js:
const {GenerateSW} = require('workbox-webpack-plugin');

module.exports = {
  // Other webpack config...
  plugins: [
    // Other plugins...
    new GenerateSW({
      // These are some common options, and not all are required.
      // Consult the docs for more info.
      exclude: [/.../, '...'],
      maximumFileSizeToCacheInBytes: ...,
      navigateFallback: '...',
      runtimeCaching: [{
        // Routing via a matchCallback function:
        urlPattern: ({request, url}) => ...,
        handler: '...',
        options: {
          cacheName: '...',
          expiration: {
            maxEntries: ...,
          },
        },
      }, {
        // Routing via a RegExp:
        urlPattern: new RegExp('...'),
        handler: '...',
        options: {
          cacheName: '...',
          plugins: [..., ...],
        },
      }],
      skipWaiting: ...,
    }),
  ],
};

Thao tác này sẽ tạo một trình chạy dịch vụ có thiết lập tính năng lưu trước vào bộ nhớ đệm cho tất cả thành phần webpack do cấu hình của bạn chọn, cũng như các quy tắc lưu vào bộ nhớ đệm trong thời gian chạy được cung cấp.

Bạn có thể tìm thấy tập hợp đầy đủ các tuỳ chọn cấu hình trong tài liệu tham khảo.

Trình bổ trợ InjectManifest

Bạn có thể thêm trình bổ trợ InjectManifest vào cấu hình gói web như sau:

// Inside of webpack.config.js:
const {InjectManifest} = require('workbox-webpack-plugin');

module.exports = {
  // Other webpack config...
  plugins: [
    // Other plugins...
    new InjectManifest({
      // These are some common options, and not all are required.
      // Consult the docs for more info.
      exclude: [/.../, '...'],
      maximumFileSizeToCacheInBytes: ...,
      swSrc: '...',
    }),
  ],
};

Thao tác này sẽ tạo một tệp kê khai bộ nhớ đệm trước dựa trên các tài sản gói web do cấu hình của bạn chọn và đưa vào tệp trình chạy dịch vụ được biên dịch và đóng gói.

Bạn có thể tìm thấy tập hợp đầy đủ các tuỳ chọn cấu hình trong tài liệu tham khảo.

Thông tin bổ sung

Bạn có thể xem hướng dẫn về cách sử dụng trình bổ trợ trong bối cảnh bản dựng gói web lớn hơn ở phần "Ứng dụng web tiến bộ" của tài liệu về gói web.

Loại

GenerateSW

Lớp này hỗ trợ tạo một tệp trình chạy dịch vụ mới, sẵn sàng sử dụng trong quá trình biên dịch gói web.

Sử dụng một thực thể của GenerateSW trong mảng plugins của cấu hình gói web.

// The following lists some common options; see the rest of the documentation
// for the full set of options and defaults.
new GenerateSW({
  exclude: [/.../, '...'],
  maximumFileSizeToCacheInBytes: ...,
  navigateFallback: '...',
  runtimeCaching: [{
    // Routing via a matchCallback function:
    urlPattern: ({request, url}) => ...,
    handler: '...',
    options: {
      cacheName: '...',
      expiration: {
        maxEntries: ...,
      },
    },
  }, {
    // Routing via a RegExp:
    urlPattern: new RegExp('...'),
    handler: '...',
    options: {
      cacheName: '...',
      plugins: [..., ...],
    },
  }],
  skipWaiting: ...,
});

Thuộc tính

GenerateSWConfig

Thuộc tính

  • additionalManifestEntries

    (chuỗi | ManifestEntry)[] không bắt buộc

    Danh sách các mục nhập được lưu trước vào bộ nhớ đệm, ngoài những mục nhập được tạo trong cấu hình bản dựng.

  • babelPresetEnvTargets

    string[] không bắt buộc

    Giá trị mặc định là: ["chrome >= 56"]

    Các mục tiêu cần truyền đến babel-preset-env khi biên dịch gói trình chạy dịch vụ.

  • cacheId

    chuỗi không bắt buộc

    Mã nhận dạng (không bắt buộc) được thêm vào trước tên bộ nhớ đệm. Điều này chủ yếu hữu ích cho việc phát triển cục bộ, trong đó nhiều trang web có thể được phân phát từ cùng một nguồn gốc http://localhost:port.

  • đoạn

    string[] không bắt buộc

    Bạn nên đưa một hoặc nhiều tên phân đoạn có tệp đầu ra tương ứng vào tệp kê khai bộ nhớ đệm trước.

  • cleanupOutdatedCaches

    boolean không bắt buộc

    Giá trị mặc định là: false

    Liệu Workbox có nên cố gắng xác định và xoá mọi bộ nhớ đệm trước do các phiên bản cũ hơn, không tương thích tạo ra hay không.

  • clientsClaim

    boolean không bắt buộc

    Giá trị mặc định là: false

    Liệu trình chạy dịch vụ có nên bắt đầu kiểm soát mọi ứng dụng hiện tại ngay khi kích hoạt hay không.

  • directoryIndex

    chuỗi không bắt buộc

    Nếu yêu cầu điều hướng cho một URL kết thúc bằng / không khớp với một URL được lưu trước vào bộ nhớ đệm, thì giá trị này sẽ được thêm vào URL và sẽ được kiểm tra xem có khớp với bộ nhớ đệm trước hay không. Bạn nên đặt thuộc tính này thành những gì mà máy chủ web của bạn đang sử dụng cho chỉ mục thư mục.

  • disableDevLogs

    boolean không bắt buộc

    Giá trị mặc định là: false

  • dontCacheBustURLsMatching

    Biểu thức chính quy không bắt buộc

    Các thành phần khớp với yêu cầu này sẽ được giả định là được tạo phiên bản duy nhất thông qua URL tương ứng và được miễn trừ khỏi quy trình chặn truy xuất bộ nhớ đệm HTTP thông thường (hoạt động khi điền sẵn bộ nhớ đệm trước). Mặc dù không bắt buộc, nhưng nếu quy trình xây dựng hiện có của bạn đã chèn giá trị [hash] vào mỗi tên tệp, bạn nên cung cấp RegExp để phát hiện điều đó, vì tính năng này sẽ làm giảm băng thông tiêu thụ khi lưu trước.

  • loại trừ

    (chuỗi | RegExp | hàm)[] không bắt buộc

    Một hoặc nhiều thông số kỹ thuật dùng để loại trừ nội dung khỏi tệp kê khai bộ nhớ đệm trước. Điều này được diễn giải theo các quy tắc tương tự như tuỳ chọn exclude tiêu chuẩn của webpack. Nếu không được cung cấp, giá trị mặc định sẽ là [/\.map$/, /^manifest.*\.js$].

  • excludeChunks

    string[] không bắt buộc

    Một hoặc nhiều tên phân đoạn có tệp đầu ra tương ứng cần được loại trừ khỏi tệp kê khai bộ nhớ đệm trước.

  • ignoreURLParametersMatching

    RegExp[] không bắt buộc

    Mọi tên tham số tìm kiếm khớp với một trong các RegExp trong mảng này sẽ bị xoá trước khi tìm kết quả khớp trước bộ nhớ đệm. Điều này sẽ hữu ích nếu người dùng của bạn có thể yêu cầu các URL có chứa, chẳng hạn như các tham số URL dùng để theo dõi nguồn lưu lượng truy cập. Nếu không được cung cấp, giá trị mặc định sẽ là [/^utm_/, /^fbclid$/].

  • importScripts

    string[] không bắt buộc

    Danh sách các tệp JavaScript cần được truyền đến importScripts() bên trong tệp trình chạy dịch vụ đã tạo. Điều này rất hữu ích khi bạn muốn cho phép Workbox tạo tệp trình chạy dịch vụ cấp cao nhất, nhưng muốn đưa thêm một số mã bổ sung vào, chẳng hạn như trình nghe sự kiện đẩy.

  • importScriptsViaChunks

    string[] không bắt buộc

    Một hoặc nhiều tên của các phân đoạn gói web. Nội dung của các phần đó sẽ được đưa vào trình chạy dịch vụ đã tạo thông qua lệnh gọi đến importScripts().

  • bao gồm

    (chuỗi | RegExp | hàm)[] không bắt buộc

    Một hoặc nhiều thông số kỹ thuật dùng để đưa nội dung vào tệp kê khai trước bộ nhớ đệm. Điều này được diễn giải theo các quy tắc tương tự như tuỳ chọn include tiêu chuẩn của webpack.

  • inlineWorkboxRuntime

    boolean không bắt buộc

    Giá trị mặc định là: false

    Liệu bạn nên đưa mã thời gian chạy cho thư viện Workbox vào trình chạy dịch vụ cấp cao nhất hay tách thành một tệp riêng cần triển khai cùng với trình chạy dịch vụ. Việc giữ riêng biệt thời gian chạy đồng nghĩa với việc người dùng sẽ không phải tải lại mã Workbox xuống mỗi khi trình chạy dịch vụ cấp cao nhất của bạn thay đổi.

  • manifestEntries

    ManifestEntry[] không bắt buộc

  • manifestTransforms

    ManifestTransform[] không bắt buộc

    Một hoặc nhiều hàm sẽ được áp dụng tuần tự dựa trên tệp kê khai đã tạo. Nếu bạn cũng chỉ định modifyURLPrefix hoặc dontCacheBustURLsMatching, thì các phép biến đổi tương ứng sẽ được áp dụng trước.

  • maximumFileSizeToCacheInBytes

    số không bắt buộc

    Giá trị mặc định là: 2097152

    Bạn có thể dùng giá trị này để xác định kích thước tối đa của các tệp sẽ được lưu vào bộ nhớ đệm trước. Điều này giúp bạn không vô tình lưu trước vào bộ nhớ đệm các tệp rất lớn mà có thể đã vô tình khớp với một trong các mẫu của bạn.

  • chế độ

    chuỗi không bắt buộc

    Nếu bạn đặt thành "product" (chính thức), thì gói trình chạy dịch vụ được tối ưu hoá không bao gồm thông tin gỡ lỗi sẽ được tạo. Nếu bạn không định cấu hình rõ ràng ở đây, thì giá trị mode được định cấu hình trong quá trình biên dịch webpack hiện tại sẽ được sử dụng.

  • modifyURLPrefix

    đối tượng không bắt buộc

    Một tiền tố chuỗi ánh xạ đối tượng đến giá trị chuỗi thay thế. Ví dụ: bạn có thể sử dụng thao tác này để xoá hoặc thêm tiền tố đường dẫn khỏi một mục nhập tệp kê khai nếu chế độ thiết lập dịch vụ lưu trữ web không khớp với chế độ thiết lập hệ thống tệp cục bộ của bạn. Để thay thế linh hoạt hơn, bạn có thể sử dụng tuỳ chọn manifestTransforms và cung cấp một hàm sửa đổi các mục nhập trong tệp kê khai bằng bất kỳ logic nào mà bạn cung cấp.

    Ví dụ về cách sử dụng:

    // Replace a '/dist/' prefix with '/', and also prepend
    // '/static' to every URL.
    modifyURLPrefix: {
      '/dist/': '/',
      '': '/static',
    }
    
  • navigateFallback

    chuỗi không bắt buộc

    Giá trị mặc định là: null

    Nếu được chỉ định, mọi yêu cầu điều hướng đối với các URL không được lưu trước vào bộ nhớ đệm sẽ được thực hiện bằng HTML tại URL đã cung cấp. Bạn phải truyền URL của một tài liệu HTML được liệt kê trong tệp kê khai bộ nhớ đệm trước. Mã này nhằm sử dụng trong trường hợp Ứng dụng một trang, trong đó bạn muốn mọi thao tác điều hướng đều dùng HTML của App Shell phổ biến.

  • navigateFallbackAllowlist

    RegExp[] không bắt buộc

    Một mảng biểu thức chính quy không bắt buộc giới hạn những URL mà hành vi navigateFallback đã định cấu hình sẽ áp dụng. Điều này sẽ hữu ích nếu chỉ nên coi một tập hợp con các URL của trang web là một phần của Ứng dụng trang đơn. Nếu cả navigateFallbackDenylistnavigateFallbackAllowlist được định cấu hình, danh sách từ chối sẽ được ưu tiên áp dụng trước.

    Lưu ý: Bạn có thể đánh giá các biểu thức chính quy này dựa trên mọi URL đích trong quá trình điều hướng. Tránh sử dụng biểu thức chính quy phức tạp, nếu không người dùng có thể thấy độ trễ khi di chuyển trên trang web của bạn.

  • navigateFallbackDenylist

    RegExp[] không bắt buộc

    Một mảng biểu thức chính quy không bắt buộc giới hạn những URL mà hành vi navigateFallback đã định cấu hình sẽ áp dụng. Điều này sẽ hữu ích nếu bạn chỉ nên coi một tập hợp con URL của trang web là một phần của Ứng dụng trang đơn. Nếu bạn định cấu hình cả navigateFallbackDenylistnavigateFallbackAllowlist, thì danh sách từ chối sẽ được ưu tiên.

    Lưu ý: Bạn có thể đánh giá các biểu thức chính quy này dựa trên mọi URL đích trong quá trình điều hướng. Tránh sử dụng biểu thức chính quy phức tạp, nếu không người dùng có thể thấy độ trễ khi di chuyển trên trang web của bạn.

  • navigationPreload

    boolean không bắt buộc

    Giá trị mặc định là: false

    Liệu có bật tính năng tải trước điều hướng trong trình chạy dịch vụ đã tạo hay không. Khi đặt thành true, bạn cũng phải sử dụng runtimeCaching để thiết lập chiến lược phản hồi thích hợp sao cho khớp với các yêu cầu điều hướng và tận dụng phản hồi được tải trước.

  • offlineGoogleAnalytics

    boolean | GoogleAnalyticsInitializeOptions không bắt buộc

    Giá trị mặc định là: false

    Kiểm soát việc có hiển thị tính năng hỗ trợ cho Google Analytics ngoại tuyến hay không. Khi true, lệnh gọi đến initialize() của workbox-google-analytics sẽ được thêm vào trình chạy dịch vụ đã tạo. Khi được đặt thành Object, đối tượng đó sẽ được truyền vào lệnh gọi initialize(), cho phép bạn tuỳ chỉnh hành vi.

  • runtimeCaching

    RuntimeCaching[] không bắt buộc

    Khi sử dụng các công cụ xây dựng của Workbox để tạo trình chạy dịch vụ, bạn có thể chỉ định một hoặc nhiều cấu hình lưu vào bộ nhớ đệm trong thời gian chạy. Sau đó, các lệnh này được chuyển đổi thành lệnh gọi workbox-routing.registerRoute bằng cách sử dụng cấu hình so khớp và trình xử lý mà bạn xác định.

    Để biết tất cả các tuỳ chọn, hãy xem tài liệu về workbox-build.RuntimeCaching. Ví dụ bên dưới cho thấy một cấu hình điển hình, với hai tuyến thời gian chạy được xác định:

  • skipWaiting

    boolean không bắt buộc

    Giá trị mặc định là: false

    Liệu có thêm lệnh gọi vô điều kiện tới skipWaiting() vào trình chạy dịch vụ đã tạo hay không. Nếu là false, thì trình nghe message sẽ được thêm vào, cho phép các trang ứng dụng kích hoạt skipWaiting() bằng cách gọi postMessage({type: 'SKIP_WAITING'}) trên một trình chạy dịch vụ đang chờ.

  • sơ đồ nguồn

    boolean không bắt buộc

    Giá trị mặc định là: true

    Liệu có tạo sơ đồ nguồn cho các tệp trình chạy dịch vụ đã tạo hay không.

  • swDest

    chuỗi không bắt buộc

    Giá trị mặc định là: "service-worker.js"

    Tên tài sản của tệp trình chạy dịch vụ do trình bổ trợ này tạo.

InjectManifest

Lớp này hỗ trợ biên dịch tệp trình chạy dịch vụ được cung cấp qua swSrc và chèn vào trình chạy dịch vụ đó danh sách URL cũng như thông tin sửa đổi để lưu trước vào bộ nhớ đệm dựa trên quy trình tài sản gói web.

Sử dụng một thực thể của InjectManifest trong mảng plugins của cấu hình gói web.

Ngoài việc chèn tệp kê khai, trình bổ trợ này sẽ thực hiện việc biên dịch tệp swSrc bằng cách sử dụng các tuỳ chọn trong cấu hình gói web chính.

// The following lists some common options; see the rest of the documentation
// for the full set of options and defaults.
new InjectManifest({
  exclude: [/.../, '...'],
  maximumFileSizeToCacheInBytes: ...,
  swSrc: '...',
});

Thuộc tính

  • hàm khởi tạo

    void

    Tạo một thực thể của InjectManifest.

    Hàm constructor sẽ có dạng như sau:

    (config: WebpackInjectManifestOptions) => {...}

    • cấu hình

      WebpackInjectManifestOptions

  • cấu hình

    WebpackInjectManifestOptions

Thuộc tính

default

Loại

đối tượng

Thuộc tính

  • GenerateSW

    query

  • InjectManifest

    query