커스텀 RequireJS 만들기
8066 단어 javascript
RequireJS는 다른 함수가 반환한 값에 의존하는 함수를 정의할 수 있다는 원칙에 따라 작동합니다. 이는 모듈식 코드를 작성하는 데 도움이 됩니다. 여기에서는 모든 기능이 단일 파일에 있다고 가정합니다.
질문은 다음과 같습니다.
define('moduleName',function(){
return 1;
})
require(['moduleName'],function(module1){
console.log(module1) // 1;
})
여기에서
define
를 사용하여 종속성을 추가하고 require를 사용하여 functions
를 추가합니다.require
에 대한 첫 번째 매개변수는 종속성 배열입니다. 종속성은 define
함수를 사용하여 등록할 수 있습니다.때로는 사전에 요청한 다음 함수를 정의할 수도 있습니다. 모든 종속성이 해결되면 사용자 정의 콜백이 자동으로 트리거됩니다.
먼저 결과, 종속성 및 종속성 매핑에 대한 레지스트리
functions
를 보관할 모듈 수준 변수를 선언하겠습니다.const fnMap = {}; // mapping between a dependency function name to actual function reference
let registry = [] // list of functions and the names of their dependencies
const resultMap = {}; // mapping between dependency name and it's return value
이제 변수가 있으므로
define
를 정의하겠습니다. :)function define(name, cb){
fnMap[name] = cb;
const unresolvedRegistryItems = registry.filter(({ cb: userDefinedCb, dependencies }) => {
const unresolvedDeps = dependencies.filter(dependencyName => {
const fn = fnMap[dependencyName];
return !fn;
});
if (unresolvedDeps.length === 0) {
require(dependencies, userDefinedCb);
} else {
return true;
}
});
registry = unresolvedRegistryItems;
}
보시다시피 먼저
fnMap
에 종속성을 기록한 다음 모든 종속성이 해결된 registry
에 대해 functions
를 확인합니다. 그렇다면 require
(구현 예정)을 트리거합니다.마지막으로 종속성이 해결되지 않은 함수만 포함하는 필터링된 목록으로
registry
목록을 업데이트합니다.이제 정의하겠습니다
require
function require(dependencies, cb){
const results = [];
let isResolved = true;
for (let i = 0; i < dependencies.length; i++) {
const dependencyName = dependencies[i];
const fn = fnMap[dependencyName];
if (!fn) {
isResolved = false;
registry.push({
cb,
dependencies
});
return;
}
const result = resultMap[dependencyName] || fn();
results.push(result);
resultMap[dependencyName] = result;
}
isResolved && cb.apply(null, results);
}
완제품:
Reference
이 문제에 관하여(커스텀 RequireJS 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rohanbagchi/building-a-custom-requirejs-1b3c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)