NervJS / taro

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

动态给app.config.ts的pages字段添加页面,新增的页面没有被编译 #10224

Open bigmeow opened 3 years ago

bigmeow commented 3 years ago

使用场景

我定义了一套类似于vue-router的路由配置,我写了一个插件来解析自己路由配置,动态生成小程序所需要的app.jsonpages

相关平台

微信小程序

复现仓库

https://github.com/bigmeow/taro-bug-demo 小程序基础库: 无 使用框架: Vue 3

复现步骤

我新增了一个taro插件, 插件作用是动态修改 小程序的配置文件app.config.ts, 在插件里我给pages数组新加了一个页面,然后新加的页面并没有被编译。 插件代码:

module.exports = (ctx, pluginOpts) => {

    ctx.modifyMiniConfigs(({ configMap }) => {
        console.log("动态添加app.config中的pages字段")
        configMap["app.config"].content.pages.push("pages/index2/index")
        console.log(configMap["app.config"].content.pages)
    })
}

重现步骤:

  1. 克隆demo
  2. npm i
  3. npm run build:weapp

期望结果

打开dist/pages目录,希望看到动态新增的pages/index2/index被编译

实际结果

编译后无pages/index2/index页面

环境信息

👽 Taro v3.3.6

  Taro CLI 3.3.6 environment info:
    System:
      OS: macOS 11.5.2
      Shell: 5.8 - /bin/zsh
    Binaries:
      Node: 14.17.5 - ~/.nvm/versions/node/v14.17.5/bin/node
      Yarn: 1.22.11 - /usr/local/bin/yarn
      npm: 6.14.14 - ~/.nvm/versions/node/v14.17.5/bin/npm
    npmPackages:
      @tarojs/components: 3.3.6 => 3.3.6 
      @tarojs/mini-runner: 3.3.6 => 3.3.6 
      @tarojs/runtime: 3.3.6 => 3.3.6 
      @tarojs/taro: 3.3.6 => 3.3.6 
      @tarojs/webpack-runner: 3.3.6 => 3.3.6 
      babel-preset-taro: 3.3.6 => 3.3.6 
      eslint-config-taro: 3.3.6 => 3.3.6 
b2nil commented 3 years ago

确实 modifyMiniConfigs 目前只是修改了 filesConfig,没有相应修改 this.pages。调后 modifyMiniConfigs 后,再调用一次 this.getPages() 就没问题了。 https://github.com/NervJS/taro/blob/6e3bab1741ba4a42dac01a9bb6a71249ce89f4a8/packages/taro-mini-runner/src/plugins/MiniPlugin.ts#L895-L897