zoukankan      html  css  js  c++  java
  • kbone开发热更新后小程序刷新到首页问题

    使用 kbone 开发小程序,默认会有热更新,且热更新自动刷新后去了首页,虽然目前 微信开发者工具有“添加编译模式”的功能,但是每次热更新后还是跳转到了首页。

    那么为什么微信开发者工具的这个“添加编译模式”的功能没用呢?

    主要原因是,我们小程序里面添加的目录是 kbone 运行 npm run mp 命令行打包出来的 build/mp 文件夹。

    当我们使用微信开发者工具的这个“添加编译模式”的功能添加了一种编译模式后,开发者工具会在 build/mp/project.config.js 配置文件中新增刚才添加配置,配置结构如下:

    {
       .... "condition": { ... "miniprogram": { "list": [ { "id": -1, "name": "typelist", "pathName": "pages/typelist/index", "query": "id=123412", "scene": null }, { "id": -1, "name": "pages/typelist/index", "pathName": "pages/typelist/index", "query": "id=123412", "scene": null } ] } ... }
       ... }

    然而,当我们每次修改代码,webpack 进行热更新的时候,/build/mp 文件夹里面的文件都会重新生成,那么之前 微信开发者工具修改的 project.config.js 文件配置代码自然就不在了。

    对于这种情况,那我们是否可以在 webpack 打包之前就把 project.config.js 文件里面的 miniprogram 配置复制出来,然后在打包的时候再写进去呢?

    答案肯定是可以的,

    接下来我们就对 miniprogram.config.js 配置文件进行修改:

    miniprogram.config.js 修改前代码:

    module.exports = {
        ...
        projectConfig: {
            projectname: 'kbone-template-react',
            appid: '',
            ...
        }
        ...
    }
    

      

    minigrogram.config.js 修改后代码:

    const fs = require('fs')
    const path = require('path')
    let mpFilePath = path.resolve(__dirname, '../build/mp/project.config.json')
    let condition = {
      //   miniprogram: {
      //     current: -1,
      //     list: [
      //       {
      //         id: -1,
      //         name: 'pages/typelist/index',
      //         pathName: 'pages/typelist/index',
      //         query: 'id=1234',
      //         scene: null
      //       }
      //     ]
      //   }
    }
    let mp = fs.existsSync(mpFilePath);
    if (mp) {
    	console.log('文件建存在' + mp)
    	// var data = fs.readFileSync(mpFilePath, 'utf8');
    	// if (data) {
    	const projectConfig = require(mpFilePath)
    	// console.log('projectConfig', projectConfig)
    	if (projectConfig.condition && projectConfig.condition.miniprogram) {
    		condition = {
    		    miniprogram: JSON.stringify(projectConfig.condition.miniprogram)
    		}
    	}
    // }
    } else {
    	console.log(mpFilePath + '文件不存在')
    }
    
    module.exports = {
        ...
        projectConfig: {
            projectname: 'kbone-template-react',
            appid: '',
            condition: condition,
            ...
        }
        ...
    }
    

      注: 红色的是新增或改动的代码

    miniprogram.config.js文件完整代码:

    /**
     * 配置参考:https://wechat-miniprogram.github.io/kbone/docs/config/
     */
    const fs = require('fs')
    const path = require('path')
    let mpFilePath = path.resolve(__dirname, '../build/mp/project.config.json')
    let condition = {
      //   miniprogram: {
      //     current: -1,
      //     list: [
      //       {
      //         id: -1,
      //         name: 'pages/typelist/index',
      //         pathName: 'pages/typelist/index',
      //         query: 'id=1234',
      //         scene: null
      //       }
      //     ]
      //   }
    }
    let mp = fs.existsSync(mpFilePath);
    if (mp) {
    	console.log('文件建存在' + mp)
    	// var data = fs.readFileSync(mpFilePath, 'utf8');
    	// if (data) {
    	const projectConfig = require(mpFilePath)
    	// console.log('projectConfig', projectConfig)
    	if (projectConfig.condition && projectConfig.condition.miniprogram) {
    		console.log(
    		'projectConfig.condition.miniprogram',
    		projectConfig.condition.miniprogram
    		)
    		condition = {
    		miniprogram: JSON.stringify(projectConfig.condition.miniprogram)
    		}
    	}
    // }
    } else {
    	console.log(mpFilePath + '文件不存在')
    }
    
    console.log('condition=======', JSON.stringify(condition))
    
    module.exports = {
      origin: 'https://test.miniprogram.com',
      entry: '/test/aaa',
      router: {
        index: ['/test/aaa', '/test/bbb'],
        log: ['/test/aaa', '/test/bbb']
      },
      redirect: {
        notFound: 'index',
        accessDenied: 'index'
      },
      generate: {
        autoBuildNpm: 'npm'
      },
      app: {
        navigationBarTitleText: 'miniprogram-project'
      },
      appExtraConfig: {
        sitemapLocation: 'sitemap.json'
      },
      global: {},
      pages: {},
      optimization: {
        domSubTreeLevel: 10,
    
        elementMultiplexing: true,
        textMultiplexing: true,
        commentMultiplexing: true,
        domExtendMultiplexing: true,
    
        styleValueReduce: 5000,
        attrValueReduce: 5000
      },
      projectConfig: {
        projectname: 'kbone-template-react',
        appid: 'wx87063785d539c655',
        // 微信开发者工具,配置不是必须的
        condition: condition
      }
    }
    

      

  • 相关阅读:
    es6 yield简单使用
    es6 generator 函数中的yield理解
    es6 promise的使用,同时处理多个异步请求
    es6 filter的使用
    ES6中reduce的计算过程
    es6函数的参数展开
    搭建基于express框架的运行环境
    通过node.js搭建服务,访问html静态页面
    docker compose
    JDBCUtil
  • 原文地址:https://www.cnblogs.com/ayseeing/p/12504819.html
Copyright © 2011-2022 走看看