NervJS / taro

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

编译支付宝小程序时,modifyPageTemplate方法内部报错 #9453

Closed hyphappy011 closed 3 years ago

hyphappy011 commented 3 years ago

相关平台

支付宝小程序

复现仓库

https://github.com/b2nil/taro-ui-vue3/tree/dev/demo 小程序基础库: 版本2.0.6 (2.0.6) 使用框架: Vue 3

复现步骤

1.下载Taro-UI-Vue3 Demo

  1. yarn install 3.yarn run dev:alipay

期望结果

编译成功

实际结果

Cannot read property 'pages' of undefined

node:internal/process/promises:245 triggerUncaughtException(err, true / fromPromise /); ^

TypeError: Cannot read property 'pages' of undefined at Object.fn (/Volumes/Work/OneinStudio/onein-smartviews/node_modules/@tarojs/plugin-platform-alipay/dist/index.js:335:16) at Kernel. (/Users/xxxxx/.nvm/versions/node/v15.14.0/lib/node_modules/@tarojs/cli/node_modules/@tarojs/service/dist/Kernel.js:201:48) at Generator.next () at /Users/xxxx/.nvm/versions/node/v15.14.0/lib/node_modules/@tarojs/cli/node_modules/@tarojs/service/dist/Kernel.js:8:71 at new Promise () at awaiter (/Users/xxxxx/.nvm/versions/node/v15.14.0/lib/node_modules/@tarojs/cli/node_modules/@tarojs/service/dist/Kernel.js:4:12) at /Users/xxxxxx/.nvm/versions/node/v15.14.0/lib/node_modules/@tarojs/cli/node_modules/@tarojs/service/dist/Kernel.js:200:33 at eval (eval at create (/Users/xxxxx/.nvm/versions/node/v15.14.0/lib/node_modules/@tarojs/cli/node_modules/tapable/lib/HookCodeFactory.js:74:10), :16:17) at new Promise () at AsyncSeriesWaterfallHook.eval [as promise] (eval at create (/Users/xxxx/.nvm/versions/node/v15.14.0/lib/node_modules/@tarojs/cli/node_modules/tapable/lib/HookCodeFactory.js:74:10), :4:8) at AsyncSeriesWaterfallHook.lazyCompileHook (/Users/xxxxx/.nvm/versions/node/v15.14.0/lib/node_modules/@tarojs/cli/node_modules/tapable/lib/Hook.js:154:20) at Kernel. (/Users/xxxxx/.nvm/versions/node/v15.14.0/lib/node_modules/@tarojs/cli/node_modules/@tarojs/service/dist/Kernel.js:213:36) at Generator.next () at /Users/xxxxx/.nvm/versions/node/v15.14.0/lib/node_modules/@tarojs/cli/node_modules/@tarojs/service/dist/Kernel.js:8:71 at new Promise () at awaiter (/Users/xxxxx/.nvm/versions/node/v15.14.0/lib/node_modules/@tarojs/cli/node_modules/@tarojs/service/dist/Kernel.js:4:12) error Command failed with exit code 1. info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

环境信息

Taro CLI 3.2.8 environment info:
    System:
      OS: macOS 11.3.1
      Shell: 5.8 - /bin/zsh
    Binaries:
      Node: 15.14.0 - ~/.nvm/versions/node/v15.14.0/bin/node
      Yarn: 1.22.10 - /opt/homebrew/bin/yarn
      npm: 7.12.1 - ~/.nvm/versions/node/v15.14.0/bin/npm
    npmPackages:
      @tarojs/components: ^3.0.18 => 3.0.18 
      @tarojs/mini-runner: ^3.0.18 => 3.0.18 
      @tarojs/plugin-platform-alipay: ^3.2.10 => 3.2.10 
      @tarojs/plugin-platform-jd: ^3.2.10 => 3.2.10 
      @tarojs/plugin-platform-qq: ^3.2.10 => 3.2.10 
      @tarojs/plugin-platform-swan: ^3.2.10 => 3.2.10 
      @tarojs/plugin-platform-tt: ^3.2.10 => 3.2.10 
      @tarojs/plugin-platform-weapp: ^3.2.10 => 3.2.10 
      @tarojs/runtime: ^3.0.18 => 3.0.18 
      @tarojs/taro: ^3.0.18 => 3.0.18 
      @tarojs/webpack-runner: ^3.0.18 => 3.0.18 
      babel-preset-taro: ^3.0.18 => 3.0.18 
      eslint-config-taro: ^3.0.18 => 3.0.18 

补充信息

ctx.modifyBuildAssets(({ assets, miniPlugin }) => { const pages = []; 下面加上 if (typeof miniPlugin === 'undefined') { return } 可以编译通过。

因为taro-webpack-runner/src/index.ts

compiler.hooks.emit.tapAsync('taroBuildDone', async (compilation, callback) => { if (typeof config.modifyBuildAssets === 'function') { // 此处并未传入miniPlugin,因此可能导致报错 await config.modifyBuildAssets(compilation.assets) } callback() })

Chen-jj commented 3 years ago

@hyphappy011 复现不了,CLI 和依赖都升级到最新版再试试。

image

而且,taro-webpack-runner 是编译 H5 时用的。编译小程序时用的是 taro-mini-runner,这时是有传入 miniPlugin 参数的:

https://github.com/NervJS/taro/blob/aad52380140b933e0a40282bdd47b20d618cbaa9/packages/taro-mini-runner/src/plugins/MiniPlugin.ts#L1012-L1014

可以看看是不是哪里搞错了。