Fekit CommonJs 규범 에 따 른 JS 모듈 포장
fekit 에서 CommonJS 를 이용 하여 실 현 된 JS 파일 에는 module 대상, exports 대상 과 require () 방법 이 포함 되 어 있 지만 브 라 우 저 숙주 환경 에서 JS 는 상대 적 인 module 대상, exports 대상 과 require () 방법 이 없습니다. 그러면 브 라 우 저 는 어떻게 JS 문 서 를 실행 합 니까?아니면 fekit 는 어떤 작업 을 해서 우리 의 JS 파일 (대부분) 을 모듈 화 할 수 있 고 브 라 우 저 에서 실행 할 수 있 습 니까?
fekit 의 모듈
다음은 fekit 를 이용 하여 도구 모듈 화 된 CommonJS 규범 을 기반 으로 한 index. js 파일 입 니 다.
var $ = require('../libs/jquery.js')
exports.ajax = function(){
$.ajax({
url: '/web/getJSON',
method: 'GET',
data: {},
success: function(res){
var str = "";
$.each(res.data,function(index,value){
str+=""+value+" ";
});
$('.ul').html(str);
}
})
}
exports.count = 1;
먼저 우 리 는 require () 방법 을 이용 하여 jquery. js 모듈 을 인용 한 다음 index. js 에서 module 대상 중의 exports 대상 을 이용 하여 ajax () 방법 과 count 변수 (테스트 일 뿐) 를 포함 하 는 모듈 을 정의 하 였 으 며, 그 중에서 ajax 방법 에서 우 리 는 도입 한 jquery. js 를 사용 하 였 다.
이 index. js 모듈 을 작성 한 후에 fekit 구축 도 구 를 이용 하여 이 프로젝트 를 실행 한 다음 chorme 브 라 우 저의 source 패 널 에서 index. js 가 다음 과 같은 내용 으로 변 하 는 것 을 볼 수 있 습 니 다.
;(function(__context){
var module = {
id : "118cd57f279558dffcbae8096c7cf113" ,
filename : "index.js" ,
exports : {}
};
if( !__context.____MODULES ) { __context.____MODULES = {}; }
var r = (function( exports , module , global ){
var $ =__context.____MODULES['8777f761b8463a858236c246bedbce92'];
exports.ajax = function(){
$.ajax({
url: '/web/getJSON',
method: 'GET',
data: {},
success: function(res){
var str = "";
$.each(res.data,function(index,value){
str+=""+value+" ";
});
$('.ul').html(str);
}
})
}
exports.count = 1;
})( module.exports , module , __context );
__context.____MODULES[ "118cd57f279558dffcbae8096c7cf113" ] = module.exports;
})(this);
프로젝트 에 있 는 index. js 와 비교 해 보면 브 라 우 저 에 보 여 준 index. js 는 우리 의 index. js 를 포장 하고 겉 은 2 층 IIFE 를 포장 한 것 이 바로 fekit 가 우 리 를 도와 준 일이 다.
fekit 뭐 했 어 요?
우 리 는 fekit 가 우리 의 JS 파일 바깥쪽 에 2 층 IIFE 를 쌌 다 는 것 을 알 게 되 었 습 니 다. 그러면 이 2 층 IIFE 는 무엇 을 했 습 니까?
모듈 이전의 역할 영역 이 왜 격 리 되 어 상호 오염 을 피 했 는 지 알 것 같다.바로 이 두 층 의 IIFE 가 일 으 킨 것 이다.
1 층 IIFE
브 라 우 저의 index. js 를 통 해 이 포장 의 목적 을 알 수 있 습 니 다.
this
실 참 급 __context
형 삼 을 통 해 숙주 대상 의 전달 을 실현 하고 숙주 대상 중 하나 ____MODULES
배열 이 있 으 며 CommonJS 규범 을 통 해 정 의 된 모든 모듈 의 매 핑 이 저장 되 어 있 음 을 알 수 있다.이것 이 바로 1 층 IIFE 가 숙주 대상 에 들 어 가 는 이유 입 니 다. 바로 이 ——MODULES
배열 에 저 장 된 맵 을 통 해 다른 모듈 을 참조 하기 위해 서 입 니 다.다른 모듈 이 참조 할 수 있 도록 현재 모듈 의 맵 을 이 배열 에 저장 합 니 다.2 층 IIFE
이 포장 의 목적:
——MODULES
배열 에 저장 하기 위해 서 입 니 다.——MODULES
배열 에서 ID 를 찾 는 것 임 을 알 수 있 습 니 다. 이 ID 는 jquery. js 모듈 의 moudule 대상 중의 id 속성 입 니 다.주: CommonJS 에 서 는 각 모듈 에 하나의 module 대상 이 현재 모듈 대상 을 대표 하고 exports 대상 에 다른 모듈 에 노출 된 변수 와 방법 을 저장 합 니 다.
종결 어
이것 은 바로 fekit 가 CommonJS 규범 을 실현 하여 개발 자 들 이 JS 를 편리 하 게 모듈 화 개발 할 수 있 도록 하 는 것 입 니 다. 브 라 우 저가 CommonJS 규범 으로 작 성 된 JS 모듈 화 된 파일 을 지원 하지 않 을 까 봐 걱정 하지 않 아 도 됩 니 다.
전단 자동화 구축 도 구 는 JS 모듈 화 된 포장 방식 에 대해 서도 각각 다 르 지만 목적 은 같 습 니 다. 예 를 들 어 Gulp 가 webpack 의 imports - loader 플러그 인 을 이용 하여 포장 한 것 은 다음 과 같 습 니 다. 관심 있 는 파트너 는 연구 할 수 있 습 니 다.
gulp (webpack) 포장 후
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(1);
/***/ },
/* 1 */
/***/ function(module, exports) {
/*** IMPORTS FROM imports-loader ***/
var define = false;
var common = {
render: function ($el, str) {
if($el.get(0).tagName.toLowerCase() == 'body') {
$el.prepend(str);
} else {
$el.html(str);
}
}
};
module.exports = common;
/***/ }
/******/ ]);
gulp (webpack) 포장 전
var common = {
render: function ($el, str) {
if($el.get(0).tagName.toLowerCase() == 'body') {
$el.prepend(str);
} else {
$el.html(str);
}
}
};
module.exports = common;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.