NervJS / taro

开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发微信/京东/百度/支付宝/字节跳动/ QQ 小程序/H5/React Native 等应用。 https://taro.zone/
https://docs.taro.zone/
Other
35.69k stars 4.8k forks source link

当使用webpackChain编写自定义loader编写自定义rule或者使用mini: { compile: { exclude: [(modulePath) => reg.test(modulePath)]时,依旧会遍历到被排除的文件 #15101

Open johnsoncheg opened 10 months ago

johnsoncheg commented 10 months ago

相关平台

微信小程序

复现仓库

https://gist.github.com/johnsoncheg/4bf5eb258e585fd82023258dc1718a86 小程序基础库: 2.24.5 使用框架: Vue 2

复现步骤

通过webpackChain,给taro写一个微信小程序的自定义loader。 通过配置mini.compile.exclude,会发现依旧会遍历exclude内规则的文件

期望结果

1.当编写webpack自定义loader时,能够根据定义的rule规则去遍历,排除一些不包含rule的文件 2.当配置了min -> compile -> exclude也能排除遍历exclude关键字的文件

实际结果

会根据app.config.js中配置的内容,全部遍历到。

环境信息

Taro CLI 3.6.22 environment info:
    System:
      OS: macOS 14.2.1
      Shell: 5.9 - /bin/zsh
    Binaries:
      Node: 14.18.1 - ~/.nvm/versions/node/v14.18.1/bin/node
      Yarn: 1.22.19 - /opt/homebrew/bin/yarn
      npm: 6.14.15 - ~/.nvm/versions/node/v14.18.1/bin/npm
    npmPackages:
      @tarojs/cli: 3.6.22 => 3.6.22 
      @tarojs/components: 3.6.22 => 3.6.22 
      @tarojs/helper: 3.6.22 => 3.6.22 
      @tarojs/plugin-framework-vue2: 3.6.22 => 3.6.22 
      @tarojs/plugin-platform-weapp: 3.6.22 => 3.6.22 
      @tarojs/plugin-vue-devtools: 3.6.22 => 3.6.22 
      @tarojs/router: 3.6.22 => 3.6.22 
      @tarojs/runtime: 3.6.22 => 3.6.22 
      @tarojs/shared: 3.6.22 => 3.6.22 
      @tarojs/taro: 3.6.22 => 3.6.22 
      @tarojs/webpack5-runner: 3.6.22 => 3.6.22 
      babel-preset-taro: 3.6.22 => 3.6.22 
      eslint-config-taro: 3.6.22 => 3.6.22 
    npmGlobalPackages:
      typescript: 5.3.3
johnsoncheg commented 10 months ago

调试了下babel-loader,即使源码中设置了rule:/.[tjs]x?/,依然会遍历到

image

深入taro源码,大致的范围锁定在了这一段引起的所有loader原定义的规则失效

image