Почему моя сборка webpack обнаруживает так много потерянных модулей?

#webpack #webpack-5

#webpack #webpack-5

Вопрос:

Я только что обновился до webpack 5 .

Это мой webpack.config.ts :

 import * as path from "path";
import * as webpack from "webpack";

const config: webpack.Configuration = {

  mode: "production",

  devtool: false,

  output: {
    filename: "[name].[contenthash:5].js",
    path: path.resolve(__dirname, "public"),
    publicPath: "/"
  },
  
  entry: {
    app: "./src/index.tsx"
  },

  module: {
    rules:[{
      test: /.(js|jsx|ts|tsx)$/,
      include: path.resolve(__dirname, "src"),
      use: ["babel-loader"]
    }]
  },

  plugins: [
    new HtmlWebpackPlugin({ ... })
  ],

  optimization: {
    moduleIds: "deterministic",
    runtimeChunk: "single",
    splitChunks: {
      chunks: "all",
      cacheGroups: {
        defaultVendors: {
          filename: `vendors.[contenthash:5].js`
        }
      }
    }
  }
}
 

Это довольно стандартно.

Это вывод пакета:

введите описание изображения здесь

Все имеет смысл. Это то, что мы имеем:

  • runtime Фрагмент. Из runtimeChunk: "single" опции
  • vendors Фрагмент. Из defaultVendors cacheGroup
  • app Фрагмент, начиная с точки app: "./src/index.tsx" входа

Но есть и другие журналы, которые я не понимаю:

потерянные модули

введите описание изображения здесь

webpack Почему так много модулей обнаруживается как потерянные? Общее количество файлов в моей src папке составляет около ~ 500. Вероятно, там есть несколько потерянных файлов, но я уверен, что большинство из них ни в коем случае не следует считать потерянными, поскольку они используются во всем коде приложения.

Это их определение для потерянных модулей:

введите описание изображения здесь

И я почти уверен, что большинство моих src файлов включены в app чанк. Итак, как их можно считать потерянными? Могу ли я проверить или зарегистрировать, какие модули считаются потерянными?

Я не уверен, началось ли это с webpack 5 или нет. Не помню, было ли это в журналах webpack 4. Должен ли я беспокоиться об этом? Он не запускает ни warnings одного, но он регистрируется таким образом.

Ответ №1:

Мне было любопытно узнать о потерянных модулях, когда я анализировал статистику своего webpack. Я заметил, что объединенные модули всегда считаются потерянными модулями. Если вы посмотрите в webpack bundle analyzer и увидите объединенные модули, скорее всего, это будут ваши потерянные модули. Я не уверен, является ли это ошибкой или нет в webpack.

Комментарии:

1. Что вы подразумеваете под объединенными модулями?

2. В некоторых случаях Webpack автоматически объединяет код в качестве оптимизации. Если вы используете подключаемый модуль bundle analyzer, вы увидите объединенные модули в своей сборке. — для получения дополнительной информации о конкатенации — посмотрите здесь webpack.js.org/plugins/module-concatenation-plugin

3. webpack bundle analyzer полезный совет, спасибо!

4. webpack, похоже, считает это не ошибкой, хотя я не уверен, что понимаю объяснение. github.com/webpack/webpack/issues/12568