NervJS / taro

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

未移除未使用的import库 #13352

Open moseszhou opened 1 year ago

moseszhou commented 1 year ago

相关平台

微信小程序

复现仓库

https://github.com/moseszhou/taroImportError.git 小程序基础库: 2.4.0 使用框架: React

复现步骤

在src/store/index.js中,import { createLogger } from "redux-logger"; 在打包的时候不管代码中是否用到createLogger,’redux-logger‘都会被打入包中

期望结果

  1. 未使用的import模块不会被打入包中

  2. 当出现 条件编译时,能够根据需要将’redux-logger‘打入包中

    if (process.env.NODE_ENV !== "production") {
    middlewares.push(createLogger());
    }
  3. 也能支持preveal进行条件编译引入

    preval`
    module.exports = process.env.NODE_ENV === 'development' ? () => { middlewares.push(logger) } : () => {}
    `();

实际结果

只要是import 引入的包都会被打入包中

环境信息

👽 Taro v3.5.12

  Taro CLI 3.5.12 environment info:
    System:
      OS: macOS 13.2.1
      Shell: 5.8.1 - /bin/zsh
    Binaries:
      Node: 14.19.3 - ~/.nvm/versions/node/v14.19.3/bin/node
      Yarn: 1.22.17 - /usr/local/bin/yarn
      npm: 6.14.17 - ~/.nvm/versions/node/v14.19.3/bin/npm
    npmPackages:
      @tarojs/cli: 3.5.12 => 3.5.12 
      @tarojs/components: 3.5.12 => 3.5.12 
      @tarojs/helper: 3.5.12 => 3.5.12 
      @tarojs/plugin-framework-react: 3.5.12 => 3.5.12 
      @tarojs/plugin-platform-alipay: 3.5.12 => 3.5.12 
      @tarojs/plugin-platform-jd: 3.5.12 => 3.5.12 
      @tarojs/plugin-platform-qq: 3.5.12 => 3.5.12 
      @tarojs/plugin-platform-swan: 3.5.12 => 3.5.12 
      @tarojs/plugin-platform-tt: 3.5.12 => 3.5.12 
      @tarojs/plugin-platform-weapp: 3.5.12 => 3.5.12 
      @tarojs/react: 3.5.12 => 3.5.12 
      @tarojs/rn-runner: 3.5.12 => 3.5.12 
      @tarojs/router: 3.5.12 => 3.5.12 
      @tarojs/runtime: 3.5.12 => 3.5.12 
      @tarojs/shared: 3.5.12 => 3.5.12 
      @tarojs/taro: 3.5.12 => 3.5.12 
      @tarojs/taro-h5: 3.5.12 => 3.5.12 
      @tarojs/taro-rn: 3.5.12 => 3.5.12 
      @tarojs/webpack5-runner: 3.5.12 => 3.5.12 
      babel-preset-taro: 3.5.12 => 3.5.12 
      eslint-config-taro: 3.5.12 => 3.5.12 
      expo: ~46.0.2 => 46.0.20 
      react: ^18.0.0 => 18.2.0 
      react-native: ^0.69.3 => 0.69.8 

补充信息

taro2.x中 会打包时会自动移除未使用的模块,也能正确的根据条件是否打入包中

moseszhou commented 1 year ago

taro2.x 的编译是

条件

process.env.NODE_ENV = 'development' 

方式一

源码

  if(process.env.NODE_ENV === 'development'){
    middlewares.push(logger) 
  }

结果

  if(true){
      middlewares.push(_reduxLogger2.default);
 }

方式二

源码:

  preval`
    module.exports = process.env.NODE_ENV === 'development' ? () => { middlewares.push(logger) } : () => {}
  `()

结果:

  (function () {
    middlewares.push(_reduxLogger2.default);
  })();
moseszhou commented 1 year ago

@Chen-jj 能找人看看这个问题么?

tourze commented 1 year ago

+1