TerserPlugin Webpack Исключить / Тест не работает, как ожидалось - PullRequest
0 голосов
/ 27 сентября 2019

Я хочу применить TerserPlugin для оптимизации к некоторому моему коду и исключить некоторые сторонние библиотеки (например, vue) из обработки Terser, но все, что я пытаюсь проверить, включить и исключить, не работает.Мой код написан на Typescript (только файлы * .ts, нет файлов .vue) и в большинстве сторонних библиотек с js на случай, если это будет важно позже.

Я пробовал это с регулярными выражениями и строками followig для тестирования, включения и исключения TerserPlugin, как и при заданных результатах:

1.) Не указано ни одно условие теста, не исключать, не включать: Terser применяется, например, локальные переменные методов заменены в моем материале и в сторонних библиотеках.Это на самом деле странно, так как test значение по умолчанию /\.m?js(\?.*)?$/ в соответствии с https://github.com/webpack-contrib/terser-webpack-plugin, что неверно для любого файла * .ts.таким образом, мои файлы Typescript не должны обрабатываться Terser, но

2.) test: /\.ts$/i - нет более краткого преобразования в моих файлах или библиотеках третьих сторон

3.) include: /\.ts$/i - нет terserпреобразование в моих файлах или сторонних библиотеках

4.) include: /entities/i - нет более грубого преобразования в моих файлах (пара находится в каталоге с именами сущностей) или сторонних библиотеках

5.) exclude: /vue/i - Терсер применяется, например, локальные переменные методов заменяются в моем материале и в сторонних библиотеках

6.) exclude: "C:\Repositories\m2\node_modules\vue\dist\vue.esm.js" - Терсер применяется, например, локальные переменные методов заменяются в моем материале ив сторонних библиотеках

7.) exclude: "C:/Repositories/m2/node_modules/vue/dist/vue.esm.js" - применяется Terser, например, локальные переменные методов заменяются в моем материале, а в сторонних библиотеках

8.) exclude: path.join(__dirname, 'node_modules/vue/dist/vue.esm.js') - Terserприменяется, например, локальные переменные методов заменяются в моем материале и в сторонних библиотеках

Это не имеет никакого смысла для меня.Все, что я вставляю, кажется неудачным, например, проверка и включение никогда не кажутся правдой, и поэтому ничего не обрабатывается и исключается, и никогда не кажется правдой, и поэтому все обрабатывается.Мне это кажется огромной ошибкой - слишком большой, чтобы я мог в это поверить.Любые идеи кто-то?

Здесь мой полный конфиг Terser в моем конфиге webpack с местом, отмеченным, где я положил выражение регулярного выражения

   optimization: {
          namedModules: true,
          chunkIds: 'size',
          moduleIds: 'hashed',
          removeAvailableModules: true, 
          removeEmptyChunks: true,
          mergeDuplicateChunks: true,
          usedExports: true,
          minimize: true,
          minimizer: [new TerserPlugin({
           - place where i put the regex test, exclude condition --
             extractComments: false,
             sourceMap: false,
             terserOptions: {
                output: {
                   comments: true,// to change
                   beautify: true,// to change
                },
                ecma: 6,
                warnings: true,// to change
                parse: {},
                mangle: {
                   eval: true, 
                   // mangle options
                   keep_classnames: false,
                   keep_fnames: false,
                   module: true,
                   toplevel: true,
                   safari10: false,
                },
                nameCache: null,
                ie8: false,
             }
          })],

Моя версия TerserPlugin: "terser-webpack-plugin": "^ 1.4.1"

И если это может иметь значение, хотя я думаю, что нет, вот мой конфиг модуля webpack:

module: {
      rules: [
         {  test: /\.vue$/,
            exclude: /node_modules/,
            loader: 'vue-loader'
         },
         {  test: /\.ts$/,
            exclude: /node_modules|vue\/src/,
            loader: "ts-loader"
         },
         {  test: /\.woff(2)?(\?v=[0-9]+\.[0-9]+\.[0-9]+)?$/, 
            loader: "url-loader?limit=10000&mimetype=application/font-woff&name=[name].[ext]",
            options: {
               outputPath: './m2/fonts',
            }
         },
         {  test: /\.(ttf|eot)(\?v=[0-9]+\.[0-9]+\.[0-9]+)?$/, 
            loader: "file-loader?name=[name].[ext]", 
            options: {
               outputPath: './m2/fonts',
            }
         },
         {  test:/\.sass$/,
            use:['style-loader','css-loader', 'sass-loader']
         },
         {  test:/\.(s*)css$/,
            use:['style-loader','css-loader', 'sass-loader']
         },
         {  test: /\.styl$/,
            loader: ['style-loader', 'css-loader', 'stylus-loader']
         },
         {  test: /\.js$/,
            exclude: /node_modules/,
            use: {
               loader: 'babel-loader',
               options: {
                  presets: ['@babel/preset-env']
               }
            }
         }
      ]
   },

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Насколько я понимаю, Terser работает с выходными блоками, а не с входными файлами.

Например, есть опция chunkfilter: https://webpack.js.org/plugins/terser-webpack-plugin/#chunkfilter, которая гласит:

Позволяет фильтровать, какие чанки должны быть увеличены (по умолчанию все чанки увеличены).

Параметры include/exclude более расплывчаты.

Поэтому я бы пришел к выводу, чтобы не обрабатывать скрипты вендора - вам придется поместить их в отдельную группу кеша: https://webpack.js.org/plugins/split-chunks-plugin/#split-chunks-example-3, а затем исключить этот блок вендора.

0 голосов
/ 27 сентября 2019

Неправильное предположение, что плагин работает с файлами .ts и другими файлами source , расположенными в каталогах, в которых вы храните свои источники.Когда плагин начинает работать, файлы .ts уже были перенесены в файлы .js.Пожалуйста, посмотрите это и , что .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...