위 챗 애플 릿 require 참조 BASE 64. JS 실패 문제 분석 해결

문제.
어떤 친구 가 위 챗 애플 릿 require ('base 64. js') 파일 을 물 었 을 때 실 패 했 습 니 다.
분석 하 다.
사실 위 챗 애플 릿 require 많은 JS 모듈 이 호 환 되 지 않 는 현상 이 있 습 니 다...베이스 64. 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;

디 버 깅 을 해 보 았 습 니 다. 주요 현상 인 base 64. js 코드 에 this 가 비어 있 지 않다 고 가정 하 였 습 니 다.위 챗 애플 릿 require 가 들 어 오 면 this 포인터 가 비어 이상 을 던 집 니 다.
위 챗 애플 릿 모듈 화 된 메커니즘 과 require 에 대해 서 는 본인 이 쓴 또 다른 글 을 참조 하 십시오. 위 챗 애플 릿 require 체제 에 대한 분석
처리 하 다.
이 수정 을 알 면 비교적 쉽다. 두 가지 변경:
글로벌 이 빈 포인터 가 되 는 것 을 피하 기
      
(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 = {}

2. 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 함 수 를 사용자 정의 하기 가 쉽 지 않 습 니 다.
2. 위 챗 애플 릿 require 에 의 해 초기 화 되 었 을 때 this 포인터 가 비어 있 습 니 다. 이러한 접근 을 피 하 는 것 을 처리 합 니 다.
3, js 모듈 에서 가능 한 한 module. exports =... 방식 으로 대상 을 내 보 냅 니 다.

좋은 웹페이지 즐겨찾기