>  기사  >  웹 프론트엔드  >  seajs 모듈의 구문 분석 규칙에 대한 자세한 설명 및 모듈 사용 요약_Seajs

seajs 모듈의 구문 분석 규칙에 대한 자세한 설명 및 모듈 사용 요약_Seajs

WBOY
WBOY원래의
2016-05-16 16:55:471062검색

Seajs github 모듈 식별이 비교적 명확하게 설명되었습니다. 하지만 이는 완전하지는 않습니다. 특히 [모듈 ID] 및 [모듈 종속성]을 직접 작성해야 하거나 전송을 위한 자동화 도구를 직접 작성해야 하는 경우(ps: 결국 spm은 적응력이 뛰어나고 사용하기 쉽지 않은 것 같습니다. 모든 사람 프로젝트의 디렉토리 구조는 크게 다를 수 있으며 변경하기가 쉽지 않습니다. 물론 패키지 관리 도구로 배치된 경우 프로젝트의 자동화된 빌드 도구가 될 것이라고 기대하지 마십시오. 철저히 이해해야 합니다.
참고:
1. 최상위 식별자는 항상 기본 경로를 기준으로 확인됩니다.
2. 절대 경로와 루트 경로는 항상 현재 페이지를 기준으로 확인됩니다.
3. require 및 require.async의 상대 경로는 현재 모듈 경로를 기준으로 확인됩니다.
4. seajs.use의 상대 경로는 항상 현재 페이지를 기준으로 결정됩니다.

seajs에서 모듈 ID는 대략 [상대 식별자], [최상위 식별자], [일반 경로]의 세 가지 유형으로 나눌 수 있습니다.
일반 경로에는 "절대 경로", "루트 경로" 등이 포함됩니다. .

여기서는 [상대 로고]와 [최상위 로고]에 중점을 둡니다.
상대 식별자는 "./OtherModule", "../lib/Base"와 같이 "./", "../"로 시작하는 식별자를 나타냅니다.
최상위 로고는 파일 또는 디렉토리(문자, -, _ 포함 가능)로 시작하는 로고를 나타냅니다(예: "app/widget/Select")

모듈 ID를 작성해야 하는 곳은 세 군데입니다:

코드 복사 코드는 다음과 같습니다.
define(" id (1)",["../id2 (2)"], function(require,exports, module){
var moduleA = require('./moduleA (3) ');
})

참고: 첫 번째 매개변수 [모듈 ID]를 정의하든, 두 번째 매개변수 [종속 모듈 ID] 또는 [모듈 ID 필요]를 정의하든 최종 비교 기준은 [파싱된 파일]입니다. URI] .
따라서 ID를 작성해야 하는 이 세 곳은 궁극적으로 동일한 URI로 해석되는 한 동일한 모듈로 간주됩니다.
ID를 파싱하는 과정에서 seajs.config에 정의된 별칭과 경로가 미리 처리됩니다.

기본 경로 구문 분석 규칙
(레벨 1, 경로 자체는 어떤 설정에도 종속되지 않음)
1. 최상위 로고이므로 사용할 수 없습니다. 로고는 베이스에 상대적입니다. 경로로 파싱되므로 베이스 자체는 [상대 식별자] 또는 [루트 경로] 등만 사용할 수 있습니다.
2. 기본 경로는 seajs의 디렉터리입니다. 기타 자세한 내용은 seajs 공식 홈페이지를 참조하세요. seajs에서 권장하는 소스 코드 디렉터리 구조가 아닌 경우 기본 경로를 수동으로 설정해 보세요.
3. [상대 식별자]: 현재 페이지를 기준으로 구문 분석됩니다.
경로 내 경로 파싱 규칙
(레벨 1, 경로 자체는 어떤 설정에도 의존하지 않음)
1. [상대 식별]: 참조되는 위치, 상대 파싱 위치에 따라 다름 인용된 부분에는 현지 규칙이 적용됩니다.
2. 경로의 필드는 해당 필드가 사용된 변수로 대체된 다음 구문 분석됩니다.
예:

코드 복사 코드는 다음과 같습니다.
//코드 블록(1 )
//경로 정의:
seajs.config({
base:"./app/src",
경로:{
"a":"../lib", //(1 ) 상대 경로
"lib":"path/to/lib", //(2) 최상위 식별자
"l2":"/lib" //(3) 루트 경로
}
});
//모듈 mod/m/m.js:
...
require("a/jquery");
//=> 대상: "../ ../lib/jquery"
//=> 로드 중: mod/lib/jquery(특별 참고 사항 1)
...
//모듈 mod/f.js :
.. .
require("a/jquery");
//=> 다음으로 변환: "../../lib/jquery"
//=> : lib/jquery (특별 참고 2)
...

별칭의 경로 구문 분석 규칙
(레이어 2, 경로 자체는 경로 설정에 따라 달라질 수 있음)
별칭의 규칙은 경로와 유사하며 별칭 경로는 다음과 같습니다. 경로
에서도 "변수"를 사용할 수 있습니다. 2. 알림: 경로 및 별칭에 [최상위 식별자], [루트 경로], [절대 경로]를 사용해 보십시오. 다른 깊이의 모듈이 참조될 때 영향을 받습니다.
3. [상대적 식별]: 참조되는 위치에 따라 상대 구문 분석 위치가 달라지며 로컬 규칙을 따릅니다.
seajs.use 경로 확인 규칙
[상대 식별자]: 현재 페이지를 기준으로 구문 분석됩니다.
define은 모듈 ID 구문 분석 규칙을 정의합니다(1)

(레벨 3, 별칭이나 경로를 기준으로 경로를 설정할 수 있음)
다음을 사용할 수 있습니다: [상대 식별자], [최상위 식별자], [루트 경로]
[를 사용하는 것이 좋습니다. 최상위 식별자], 모듈의 위치가 기본 경로 내에 있지 않은 경우 [상대 식별자] 또는 [루트 경로]를 사용합니다.
[상대 식별자]: 현재 페이지를 기준으로 구문 분석

코드 복사 코드는 다음과 같습니다.
// 코드 블록 (2)
//config - [코드 블록 (1)]의 구성도 사용합니다.

// 모듈 1, 모호성 없음, 루트 경로 확인
define("/app/src/module/Base", ..);
// 모듈 2, 모호성 없음, 최상위 수준 식별, 구문 분석할 기본 기본 경로에 상대적
define("app/src/module/Base", ..);
// 모듈 3, 모호함, 상대 식별이 있습니다. 여기서는 현재 페이지를 기준으로 합니다(참조: 이 모듈 html 페이지)
// 그러나 [표면적으로 동일한 "ID"]가 다른 곳에서 사용되더라도 다른 모듈이 구문 분석될 수 있습니다.
define("./app/src/module/Base",.. );

모듈 종속성 ID 구문 분석 규칙(2)

(레벨 3, 별칭이나 경로를 기준으로 경로를 설정할 수 있음)
[상대 식별자]: 기본 기본 경로 분석을 기준으로

코드 복사 코드는 다음과 같습니다.
//코드 블록(3)
//config -- 또한 ​​[코드 블록(1)]의 구성을 사용합니다

//모호하지 않음, 루트 경로를 기준으로 확인
define("..", ["/app/src/module/Base"], ..)
// 모호하지 않음, 최상위 식별자 , 기본 기본 경로를 기준으로 구문 분석
define("..", ["app/src/module/Base"], ..)
//모호성이 있습니다. 상대 식별이 있습니다. 여기서는 기준으로 구문 분석됩니다. 현재 모듈
//여기서 종속성은 [코드 블록 (2)]의 `모듈 3`에 의존하는 것 같습니다
//그러나 현재 모듈이 현재 페이지와 동일한 디렉터리에 없으면 `모듈 3`


define("..", ["./app/src/module/Base"],..)
의 경우 구문 분석되지 않습니다. 다른 항목의 ID 구문 분석 규칙이 필요합니다. 모듈의 모듈 (3)
(레벨 3, 별칭이나 경로를 기준으로 경로를 설정할 수 있음)
[상대 식별자]: 기본 기본 경로 분석을 기준으로

코드 복사 코드는 다음과 같습니다.
//코드 블록(4)
// config - [코드 블록 (1)]의 구성 도 사용합니다.

define("..", [..], function(require){
//모호함 없음, 루트 경로를 기준으로 해결됨
require("/app/src/module/Base") ;
});

define("..", [..], function(require){
// 기본 기본 경로 분석과 관련된 명확한 최상위 식별
require("app/src/module/ 기본 ");
});

define("..", [..], function(require){
//모호함, 상대적 식별이 있습니다. 여기서는 현재 모듈을 기준으로 구문 분석됩니다.
//여기의 종속성은 다음과 같습니다. like [코드 블록(2)]의 `모듈 3`에 의존합니다
//단, 현재 모듈이 현재 페이지와 같은 디렉터리에 없으면 `모듈 3`으로 해석되지 않습니다
require(" ./app/src/module/Base");
})


특별 알림: 모듈에서 ID를 작성해야 하는 세 곳은 다음과 같은 문자열을 사용할 필요가 없습니다. 동일한 모듈로 구문 분석되는 한 동일합니다.

요약:
1. 경로와 별칭의 설정은 사용되는 모든 위치에서 설정된 값으로 대체된 후 구문 분석되는 것과 같습니다.
2. [최상위 로고]를 최대한 사용하세요.
3. 예를 들어 디렉터리 범위가 상대적으로 큰 경우 등 [최상위 식별자]를 사용할 수 없는 경우 [비상대 경로] 식별자를 통해 디렉터리를 찾을 수 있는 별칭이나 경로를 설정해 보세요. 그런 다음 이 식별자 아래에 ID를 정의합니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.