uniapp的manifest.json配置后,支付宝小程序include不生效,map高级渲染

一:问题描述:

                支付宝小程序在使用map组件时,使用高级渲染需要使用xml组件,在                  manifest.json下配置include字段,编译完没有该字段,不生效。

                       

                

                这里是支付宝文档:支付宝官方文档
                • 布局的 XML 文件默认会被 IDE 打包工具忽略,需要在根目录 mini.project.json                  配置规则里将 xml 打到小程序中。

                  {
                    "include":["*/.xml"] // 配置包含 xml
                   }

原因:社区文公开发人员后,可能是由于hbuilderX内配置文件未添加该项所致。

二:没解决之前每次编译后是这样的:

解决之后就自动添加了 

                   {
                    "include":["*/.xml"] // 配置包含 xml
                   }

这个配置项,看图:

三:解决方案如下:

                                (1):在 你的根目录/node_modules/@dcloudio/webpack-uni-pages-loader/lib/platforms/mp-alipay.js中替换(将文件里面的代码全部替换掉)如下代码:             

const fs = require('fs')
const path = require('path')

const {
  parsePages,
  getPlatformProject
} = require('@dcloudio/uni-cli-shared')

const {
  updateAppJsonUsingComponents
} = require('@dcloudio/uni-cli-shared/lib/cache')

const {
  hasOwn,
  parseStyle,
  parseTabBar,
  NON_APP_JSON_KEYS
} = require('../util')

function defaultCopy (name, value, json) {
  json[name] = value
}

const pagesJson2AppJson = {
  globalStyle: function (name, value, json) {
    json.window = parseStyle(value)
    if (json.window.usingComponents) {
      json.usingComponents = json.window.usingComponents
      delete json.window.usingComponents
    }
  },
  tabBar: function (name, value, json) {
    json.tabBar = parseTabBar(value)
  },
  preloadRule: defaultCopy
}

function copyToJson (json, fromJson, options) {
  Object.keys(options).forEach(name => {
    if (hasOwn(fromJson, name)) {
      options[name](name, fromJson[name], json)
    }
  })
}

const projectKeys = ['component2', 'enableAppxNg', 'include']

module.exports = function (pagesJson, manifestJson) {
  const app = {
    pages: [],
    subPackages: []
  }

  const subPackages = {}

  parsePages(pagesJson, function (page) {
    app.pages.push(page.path)
  }, function (root, page, subPackage) {
    if (!subPackages[root]) {
      subPackages[root] = {
        root,
        pages: []
      }
      Object.keys(subPackage).forEach(name => {
        if (['root', 'pages'].indexOf(name) === -1) {
          subPackages[root][name] = subPackage[name]
        }
      })
    }
    subPackages[root].pages.push(page.path)
  })

  Object.keys(subPackages).forEach(root => {
    app.subPackages.push(subPackages[root])
  })

  copyToJson(app, pagesJson, pagesJson2AppJson)

  const platformJson = manifestJson['mp-alipay'] || {}

  Object.keys(platformJson).forEach(key => {
    if (!projectKeys.includes(key) && !NON_APP_JSON_KEYS.includes(key)) {
      // usingComponents 是编译模式开关,需要过滤,不能拷贝到 app
      app[key] = platformJson[key]
    }
  })

  if (app.usingComponents) {
    updateAppJsonUsingComponents(app.usingComponents)
  }
  const projectName = getPlatformProject()

  let project = {}

  const projectPath = path.resolve(process.env.UNI_INPUT_DIR, projectName)
  if (fs.existsSync(projectPath)) {
    project = require(projectPath)
  } else {
    if (platformJson.appid) {
      project.appid = platformJson.appid
    }

    project.component2 = hasOwn(platformJson, 'component2') ? platformJson.component2 : true
    project.enableAppxNg = hasOwn(platformJson, 'enableAppxNg') ? platformJson.enableAppxNg : true
        
        if (hasOwn(platformJson, 'include')) {
            project.include = platformJson.include
        }
  }

  return [{
    name: 'app',
    content: app
  }, {
    name: 'mini.project',
    content: project
  }]
}

                            
添加后的代码和之前没什么两样,就是多了个if判断,直接上图:

        

四:解决完之后:

                

 这里是用uniapp嵌套支付宝小程序,在vscode里面改完之后,IDE就会自动编译成上图的代码,也就是成功之后的代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值