欢迎光临,了解微信小程序开发,就上易用通!

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

发布:2018-01-25 14:41浏览: 来源:网络 作者:tianshu

  • # 问题
有朋友问,  微信小程序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指针为空,就会抛出异常。


  • # 处理

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

一 避免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

~~~
文件尾部几行
    }
    // 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 = ... 方式导出对象.



免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。