微信小顺序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

文件尾部几行
    }
    // 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 = … 体式格局导出对象.

    原文作者:半个哈欠
    原文地址: https://segmentfault.com/a/1190000007589749
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞