微信小程序require 引用 BASE64.JS 失败问题的分析解决

发布时间:2019-08-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了微信小程序require 引用 BASE64.JS 失败问题的分析解决脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

问题

朋友问, 微信小程序require ('base64.js')文件时,会失败,,,

分析

事实上,微信小程序require很多JS模块都有不兼容现象。。。先从base64.js这个模块入手吧。
调试出错点:

(function(global) {
    'use strict';
    // existing version for noConflict()
    VAR _Base64 = global.Base64;  // 这句出错了...变量global的值是传入的this指针值,this指针为空了.
    var version = "2.1.9";
    // if node.js, we use Buffer
    var buffer;

调试了一下,主要现象
base64.js 代码里面假定了this指定非空。微信小程序require调入进来后,this指针为空,就会抛出异常。

对于微信小程序模块化的机制与require,,参见本人写的另一篇文字:关于微信小程序require机制的浅析

处理

知道这个修改就较容易了:
两处改动:

一 避免global为空指针

代码头部几行
(function(global) {
    'use strict';
    // existing version for noConflict()
    var _Base64 = global.Base64;
    var version = "2.1.9";

添加两行改为

(function(global) {
    'use strict';
    // existing version for noConflict()
    var _Base64 = global.Base64;
    var version = "2.1.9";
    if (!global)
        global = {}

二 添加module.exports

@H_509_126@文件尾部几行 } // that's IT! if (global['Meteor']) { Base64 = global.Base64; // for normal export in Meteor.js } })(this);

添加一行

    }
    // that's it!
    if (global['Meteor']) {
        Base64 = global.Base64; // for normal export in Meteor.js
    }
    module.exports = global.Base64;
})(this);

然后在微信小程序里面调用测试:

    var base64 = require("../../utils/base64.js");
    ...
    var srcstr = '不要问我从哪里来';
    var base64str = base64.encode(srcstr);
    console.LOG(base64str);
    
输出: 5LiN6KaB6Zeu5oiR5LuO5ZOq6YeM5p2l

总结

类似兼容性处理方案

1,因为目前微信小程序require机制,,并不容易自定义一个require函数去代替(内存中模块列表对象在闭包之中,不易访问),所以通常做法是修改被加载的js模块。

2,被微信小程序require初始化时,this指针为空,处理避开这类访问。

3,js模块中,尽可能按module.exports = ... 方式导出对象.

脚本宝典总结

以上是脚本宝典为你收集整理的微信小程序require 引用 BASE64.JS 失败问题的分析解决全部内容,希望文章能够帮你解决微信小程序require 引用 BASE64.JS 失败问题的分析解决所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。