위 챗 애플 릿 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 =... 방식 으로 대상 을 내 보 냅 니 다.