NervJS/taro-doctor

3.6.8 配置 compiler 报错无法启动项目

sushi-su opened this issue · 24 comments

相关平台

微信小程序

小程序基础库: 2.32.2
使用框架: React

复现步骤

  1. taro init 创建 React + TS + Less + Webpack5 + 默认模板
  2. 将 /config/index.js 的 compiler 更改为 {
    type: 'webpack5',
    prebundle: { enable: false },
    }
  3. 运行 dev:weapp

期望结果

正常启动项目

实际结果

提示 Taro 配置有误,请检查!
[✗] compiler 的值 {"prebundle":{"enable":false,"exclude":[{}],"include":["react","react-dom","react/jsx-runtime","@tarojs/plugin-framework-react/dist/runtime"]},"type":"webpack5"} 不符合类型要求

环境信息

  Taro CLI 3.6.8 environment info:
    System:
      OS: macOS 13.4
      Shell: 5.9 - /bin/zsh
    Binaries:
      Node: 18.16.0 - ~/.nvm/versions/node/v18.16.0/bin/node
      Yarn: 1.22.19 - ~/.nvm/versions/node/v18.16.0/bin/yarn
      npm: 9.7.1 - ~/.nvm/versions/node/v18.16.0/bin/npm
    npmPackages:
      @tarojs/cli: 3.6.8 => 3.6.8 
      @tarojs/components: 3.6.8 => 3.6.8 
      @tarojs/helper: 3.6.8 => 3.6.8 
      @tarojs/plugin-framework-react: 3.6.8 => 3.6.8 
      @tarojs/plugin-platform-alipay: 3.6.8 => 3.6.8 
      @tarojs/plugin-platform-h5: 3.6.8 => 3.6.8 
      @tarojs/plugin-platform-jd: 3.6.8 => 3.6.8 
      @tarojs/plugin-platform-qq: 3.6.8 => 3.6.8 
      @tarojs/plugin-platform-swan: 3.6.8 => 3.6.8 
      @tarojs/plugin-platform-tt: 3.6.8 => 3.6.8 
      @tarojs/plugin-platform-weapp: 3.6.8 => 3.6.8 
      @tarojs/react: 3.6.8 => 3.6.8 
      @tarojs/runtime: 3.6.8 => 3.6.8 
      @tarojs/shared: 3.6.8 => 3.6.8 
      @tarojs/taro: 3.6.8 => 3.6.8 
      @tarojs/taro-loader: 3.6.8 => 3.6.8 
      @tarojs/webpack5-runner: 3.6.8 => 3.6.8 
      babel-preset-taro: 3.6.8 => 3.6.8 
      eslint-config-taro: 3.6.8 => 3.6.8 
      react: ^18.0.0 => 18.0.0 
    npmGlobalPackages:
      typescript: 5.1.3

补充报错信息
image

配置文件发出来看看

我也有这个配置, 看不到你这个错误, 怀疑有版本没对齐

我也有这个配置, 看不到你这个错误, 怀疑有版本没对齐

如开头所说的我用 taro init 创建默认模板后只修改了 compiler 配置,我不熟 Taro 源码,不知道在什么场景下 compiler. prebundle.exclude 内会出现 object,我猜测问题出在这,因为校验规则里面 exclude 应该是一个 string array

相同问题+1,从 3.6.7升级到 3.6.8 就报这个错误

相同问题+1

XRHC commented

3.6.5升级到3.6.8也是这个问题

这次升级是不是哪里有问题,升级完之后的pnpm-lock.yaml里居然同时存在3.6.7和3.6.8的依赖配置。

猜测主要是由于exclude中string[]编译出来了一个空对象产生的类型错误
直接把 compiler 改为 webpack5 就没编译报错

compiler: 'webpack5'

这是要等发布版本吗?

我改成按模板中的方法, compiler: 'webpack5', 暂时编译通过,ossa库也没报错

为啥我改了 compiler: 'webpack5' 不行,我是编译的rn端

这个是3.6.8版本的bug吧,我也是遇到这种情况

https://github.com/NervJS/taro-doctor/blob/main/assets/config_schema.json 猜测是 exclude 没过校验 image

升级到3.6.8build报错了,感觉是类似的问题
Taro 配置有误,请检查! (/Users/evoforce/project/enterprise-mini-app/config/index.js) [✗] mini.optimizeMainPackage.exclude.0 的值 "__function__" 不满足要求的格式

optimizeMainPackage: { enable: true, exclude: [ module => { const resource = (module.resource || '').replace(/\\/g, '/') return onlySubPackageUsed.every( sourcePath => !resource?.includes(sourcePath) ) }, ], },

配置:

  compiler: {
    type: "webpack5",
    prebundle: {
      enable: false,
      exclude: ["@nutui/nutui-react-taro"],
    },
  },

报错:

Taro 配置有误,请检查! (C:\Code\wuye\mp\config\index.js)
  [✗] compiler 的值 {"prebundle":{"enable":false,"exclude":["@nutui/nutui-react-taro",{}],"include":["react","react-dom","react/jsx-runtime","@tarojs/plugin-framework-react/dist/runtime"]},"type":"webpack5"} 不符合类型要求

感觉是处理exclude默认值的问题,会自动添加空对象到exclude中

我也有这个问题,然后回退到3.6.7后正常,应该是3.6.8里的bug

taro3.6.8一样的问题+1

optimizeMainPackage: { enable: true, exclude: [ 'module => { const resource = (module.resource || '').replace(/\\/g, '/') return onlySubPackageUsed.every( sourcePath => !resource?.includes(sourcePath) ) }', ], }

这样试下呢

optimizeMainPackage: { enable: true, exclude: [ 'module => { const resource = (module.resource || '').replace(/\\/g, '/') return onlySubPackageUsed.every( sourcePath => !resource?.includes(sourcePath) ) }', ], }

这样试下呢

报错是 taro-doctor的问题,最新版本已修复了

optimizeMainPackage: { enable: true, exclude: [ 'module => { const resource = (module.resource || '').replace(/\\/g, '/') return onlySubPackageUsed.every( sourcePath => !resource?.includes(sourcePath) ) }', ], }

这样试下呢

报错是 taro-doctor的问题,最新版本已修复了

我刚升级的3.6.11 还是报这个错

optimizeMainPackage: {
			enable: true,
			exclude: [
				(module) => module.resource && module.resource.indexOf("lodash") >= 0,
				(module) => module.resource && module.resource.indexOf("dayjs") >= 0
			],
		},
optimizeMainPackage: { enable: true, exclude: [ 'module => { const resource = (module.resource || '').replace(/\\/g, '/') return onlySubPackageUsed.every( sourcePath => !resource?.includes(sourcePath) ) }', ], }

这样试下呢

报错是 taro-doctor的问题,最新版本已修复了

我刚升级的3.6.11 还是报这个错

optimizeMainPackage: {
			enable: true,
			exclude: [
				(module) => module.resource && module.resource.indexOf("lodash") >= 0,
				(module) => module.resource && module.resource.indexOf("dayjs") >= 0
			],
		},

抱歉,刚刚没注意细看,你这个应该也是 taro-doctor的原因
@luckyadam @ZakaryCode

image
3.6.11也遇到了这个问题