Seajs github 모듈 식별이 비교적 명확하게 설명되었습니다. 하지만 이는 완전하지는 않습니다. 특히 [모듈 ID] 및 [모듈 종속성]을 직접 작성해야 하거나 전송을 위한 자동화 도구를 직접 작성해야 하는 경우(ps: 결국 spm은 적응력이 뛰어나고 사용하기 쉽지 않은 것 같습니다. 모든 사람 프로젝트의 디렉토리 구조는 크게 다를 수 있으며 변경하기가 쉽지 않습니다. 물론 패키지 관리 도구로 배치된 경우 프로젝트의 자동화된 빌드 도구가 될 것이라고 기대하지 마십시오. 철저히 이해해야 합니다.
참고:
1. 최상위 식별자는 항상 기본 경로를 기준으로 확인됩니다.
2. 절대 경로와 루트 경로는 항상 현재 페이지를 기준으로 확인됩니다.
3. require 및 require.async의 상대 경로는 현재 모듈 경로를 기준으로 확인됩니다.
4. seajs.use의 상대 경로는 항상 현재 페이지를 기준으로 결정됩니다.
seajs에서 모듈 ID는 대략 [상대 식별자], [최상위 식별자], [일반 경로]의 세 가지 유형으로 나눌 수 있습니다.
일반 경로에는 "절대 경로", "루트 경로" 등이 포함됩니다. .
여기서는 [상대 로고]와 [최상위 로고]에 중점을 둡니다.
상대 식별자는 "./OtherModule", "../lib/Base"와 같이 "./", "../"로 시작하는 식별자를 나타냅니다.
최상위 로고는 파일 또는 디렉토리(문자, -, _ 포함 가능)로 시작하는 로고를 나타냅니다(예: "app/widget/Select")
모듈 ID를 작성해야 하는 곳은 세 군데입니다:
기본 경로 구문 분석 규칙
(레벨 1, 경로 자체는 어떤 설정에도 종속되지 않음)
1. 최상위 로고이므로 사용할 수 없습니다. 로고는 베이스에 상대적입니다. 경로로 파싱되므로 베이스 자체는 [상대 식별자] 또는 [루트 경로] 등만 사용할 수 있습니다.
2. 기본 경로는 seajs의 디렉터리입니다. 기타 자세한 내용은 seajs 공식 홈페이지를 참조하세요. seajs에서 권장하는 소스 코드 디렉터리 구조가 아닌 경우 기본 경로를 수동으로 설정해 보세요.
3. [상대 식별자]: 현재 페이지를 기준으로 구문 분석됩니다.
경로 내 경로 파싱 규칙
(레벨 1, 경로 자체는 어떤 설정에도 의존하지 않음)
1. [상대 식별]: 참조되는 위치, 상대 파싱 위치에 따라 다름 인용된 부분에는 현지 규칙이 적용됩니다.
2. 경로의 필드는 해당 필드가 사용된 변수로 대체된 다음 구문 분석됩니다.
예:
(레벨 3, 별칭이나 경로를 기준으로 경로를 설정할 수 있음)
다음을 사용할 수 있습니다: [상대 식별자], [최상위 식별자], [루트 경로]
[를 사용하는 것이 좋습니다. 최상위 식별자], 모듈의 위치가 기본 경로 내에 있지 않은 경우 [상대 식별자] 또는 [루트 경로]를 사용합니다.
[상대 식별자]: 현재 페이지를 기준으로 구문 분석
// 모듈 1, 모호성 없음, 루트 경로 확인
define("/app/src/module/Base", ..);
// 모듈 2, 모호성 없음, 최상위 수준 식별, 구문 분석할 기본 기본 경로에 상대적
define("app/src/module/Base", ..);
// 모듈 3, 모호함, 상대 식별이 있습니다. 여기서는 현재 페이지를 기준으로 합니다(참조: 이 모듈 html 페이지)
// 그러나 [표면적으로 동일한 "ID"]가 다른 곳에서 사용되더라도 다른 모듈이 구문 분석될 수 있습니다.
define("./app/src/module/Base",.. );
모듈 종속성 ID 구문 분석 규칙(2)
(레벨 3, 별칭이나 경로를 기준으로 경로를 설정할 수 있음)
[상대 식별자]: 기본 기본 경로 분석을 기준으로
//모호하지 않음, 루트 경로를 기준으로 확인
define("..", ["/app/src/module/Base"], ..)
// 모호하지 않음, 최상위 식별자 , 기본 기본 경로를 기준으로 구문 분석
define("..", ["app/src/module/Base"], ..)
//모호성이 있습니다. 상대 식별이 있습니다. 여기서는 기준으로 구문 분석됩니다. 현재 모듈
//여기서 종속성은 [코드 블록 (2)]의 `모듈 3`에 의존하는 것 같습니다
//그러나 현재 모듈이 현재 페이지와 동일한 디렉터리에 없으면 `모듈 3`
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");
})
요약:
1. 경로와 별칭의 설정은 사용되는 모든 위치에서 설정된 값으로 대체된 후 구문 분석되는 것과 같습니다.
2. [최상위 로고]를 최대한 사용하세요.
3. 예를 들어 디렉터리 범위가 상대적으로 큰 경우 등 [최상위 식별자]를 사용할 수 없는 경우 [비상대 경로] 식별자를 통해 디렉터리를 찾을 수 있는 별칭이나 경로를 설정해 보세요. 그런 다음 이 식별자 아래에 ID를 정의합니다.