首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TerserPlugin Webpack排除/测试不按预期工作

TerserPlugin Webpack排除/测试不按预期工作
EN

Stack Overflow用户
提问于 2019-09-27 11:03:21
回答 2查看 4K关注 0票数 2

我希望将TerserPlugin用于优化我的一些代码,并将一些第三方库(例如vue)排除在Terser处理之外,但是无论我尝试什么测试,包含和排除都不起作用。我的代码是用类型记录(只有*.ts文件,没有.vue文件)和大多数带有js的第三方库编写的,以防以后发生问题。

我对下面的regexes和字符串进行了测试,包括并排除了TerserPlugin,就像给出的结果一样:

1.)没有指定的测试子句,没有排除,没有包含: Terser被应用,例如,方法的局部变量在我的内容和第三方库中被替换。这实际上很奇怪,因为test默认设置是/\.m?js(\?.*)?$/,根据https://github.com/webpack-contrib/terser-webpack-plugin,这对于任何*.ts文件都是不正确的。因此,我的类型记录文件不应该由Terser处理,而是应该由

2. test: /\.ts$/i -在我的文件或第三方库中没有terser转换

3. include: /\.ts$/i -在我的文件或第三方库中没有terser转换

4. include: /entities/i --我的文件中没有terser转换(在目录名实体中有一对夫妇)或第三方库

5.应用了exclude: /vue/i - Terser,例如,方法的局部变量在我的内容和第三方库中被替换。

6.应用了exclude: "C:\Repositories\m2\node_modules\vue\dist\vue.esm.js" - Terser,例如,方法的局部变量在我的内容和第三方库中被替换。

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被应用,例如,方法的局部变量在我的内容和第三方库中被替换。

对我来说没有任何意义。我输入的任何东西似乎都失败了,例如测试和包含似乎从来都不是真实的,因此没有什么是被处理的,排除也不可能是真的,因此一切都被处理了。对我来说,这似乎是一个巨大的错误--对我来说实在是太大了,我不敢相信它是真的。有人有什么想法吗?

这里是我在webpack配置中的完整配置,位置标记为我放置regex表达式的位置。

代码语言:javascript
运行
复制
   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模块配置:

代码语言:javascript
运行
复制
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']
               }
            }
         }
      ]
   },
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-27 11:40:13

我的理解是,Terser工作在输出块上,而不是输入文件上。

例如,有一个块筛选器选项:https://webpack.js.org/plugins/terser-webpack-plugin/#chunkfilter,它声明:

允许过滤哪些块应该被丑陋(在默认情况下,所有块都是丑的)。

include/exclude选项比较模糊。

因此,我总结说,为了不处理供应商脚本,您必须将它们放在一个单独的缓存组:https://webpack.js.org/plugins/split-chunks-plugin/#split-chunks-example-3中,然后排除这个供应商块。

票数 5
EN

Stack Overflow用户

发布于 2019-09-27 11:50:15

这是一个错误的假设,插件工作在.ts文件和其他源文件位于您保存源代码的目录中。当插件开始工作时,.ts文件已经被转换成.js文件。请看

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58133270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档