[go: up one dir, main page]

JavascriptParser Hooks

compiler에 있는, parser 인스턴스는, webpack에서 처리 중인 각 모듈을 파싱하는 데 사용합니다. parser는 tapable을 확장하고 플러그인 작성자가 파싱 프로세스를 커스터마이징 하는데 사용할 수 있는 다양한 tapable 훅을 제공하는 또 다른 webpack 클래스입니다.

parser는 NormalModuleFactory에서 볼 수 있습니다.

compiler.hooks.normalModuleFactory.tap("MyPlugin", (factory) => {
  factory.hooks.parser
    .for("javascript/auto")
    .tap("MyPlugin", (parser, options) => {
      // The `parser` provides many hooks, which are explained in detail below.
      // Here is a practical example using the `call` hook to detect and warn
      // about a deprecated API function when a developer calls it
      // (e.g., `myCustomApiFunction()`):
      parser.hooks.call
        .for("myCustomApiFunction")
        .tap("MyPlugin", (expression) => {
          console.warn(
            `Warning: 'myCustomApiFunction' is deprecated. Found call at line ${expression.loc.start.line}.`,
          );
        });
    });
});

compiler와 마찬가지로, tapAsync 그리고 tapPromise도 훅 타입에 따라 사용할 수 있습니다.

Hooks

다음 라이프사이클 훅은 parser에 의해 노출되며 접근할 수 있습니다.

evaluateTypeof

SyncBailHook

자유 변수의 typeof로 구성된 표현식을 평가할 때 트리거 됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression
parser.hooks.evaluateTypeof.for("myIdentifier").tap(
  "MyPlugin",
  (expression) =>
    /* ... */
    expressionResult,
);

이것은 evaluateTypeof 훅을 트리거 합니다.

const a = typeof myIdentifier;

다음은 트리거 되지 않습니다.

const myIdentifier = 0;
const b = typeof myIdentifier;

evaluate

SyncBailHook

표현식을 평가할 때 호출됩니다.

  • 훅 파라미터: expressionType
  • 콜백 파라미터: expression

예제입니다.

index.js

const a = new MyClass();

MyPlugin.js

parser.hooks.evaluate.for("NewExpression").tap(
  "MyPlugin",
  (expression) =>
    /* ... */
    expressionResult,
);

표현식 타입은 다음과 같습니다.

  • 'ArrowFunctionExpression'
  • 'AssignmentExpression'
  • 'AwaitExpression'
  • 'BinaryExpression'
  • 'CallExpression'
  • 'ClassExpression'
  • 'ConditionalExpression'
  • 'FunctionExpression'
  • 'Identifier'
  • 'LogicalExpression'
  • 'MemberExpression'
  • 'NewExpression'
  • 'ObjectExpression'
  • 'SequenceExpression'
  • 'SpreadElement'
  • 'TaggedTemplateExpression'
  • 'TemplateLiteral'
  • 'ThisExpression'
  • 'UnaryExpression'
  • 'UpdateExpression'

evaluateIdentifier

SyncBailHook

자유 변수인 식별자를 평가할 때 호출됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression

evaluateDefinedIdentifier

SyncBailHook

정의된 변수 식별자를 평가할 때 호출됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression

evaluateNewExpression

SyncBailHook

5.73.0+

new 표현식을 평가할 때 호출되며, 호출되는 생성자의 이름으로 키가 지정됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression

evaluateCallExpression

SyncBailHook

5.73.0+

호출 대상이 단순 식별자인 호출을 평가할 때 호출되며, 해당 식별자 이름으로 키가 지정됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression

evaluateCallExpressionMember

SyncBailHook

성공적으로 평가된 표현식의 멤버 함수에 대한 호출을 평가할 때 호출됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression param

이 표현식은 다음의 훅을 트리거 합니다.

index.js

const a = expression.myFunc();

MyPlugin.js

parser.hooks.evaluateCallExpressionMember.for("myFunc").tap(
  "MyPlugin",
  (expression, param) =>
    /* ... */
    expressionResult,
);

isPure

SyncBailHook

노드가 부작용이 없는지 판단하기 위해 호출되며, 노드의 타입으로 키가 지정됩니다. false를 반환하면 순수하지 않은 것으로 표시되어 webpack이 이를 제거하지 않습니다.

  • 훅 파라미터: type
  • 콜백 파라미터: expression commentsStartPosition

statement

SyncBailHook

코드 조각에서 파싱된 모든 구문에 대해 호출되는 범용적 훅입니다.

  • 콜백 파라미터: statement
parser.hooks.statement.tap("MyPlugin", (statement) => {
  /* ... */
});

statement.type은 다음과 같을 수 있습니다.

  • 'BlockStatement'
  • 'VariableDeclaration'
  • 'FunctionDeclaration'
  • 'ReturnStatement'
  • 'ClassDeclaration'
  • 'ExpressionStatement'
  • 'ImportDeclaration'
  • 'ExportAllDeclaration'
  • 'ExportDefaultDeclaration'
  • 'ExportNamedDeclaration'
  • 'IfStatement'
  • 'SwitchStatement'
  • 'ForInStatement'
  • 'ForOfStatement'
  • 'ForStatement'
  • 'WhileStatement'
  • 'DoWhileStatement'
  • 'ThrowStatement'
  • 'TryStatement'
  • 'LabeledStatement'
  • 'WithStatement'

preStatement

SyncBailHook

프리워크 중 모든 구문에 대해, 블록의 어떤 구문도 워크되기 전에 호출됩니다. 여기서 호이스팅된 선언이 처리됩니다. true를 반환하면 구문이 처리되었음을 파서에 알리고 해당 구문의 기본 프리워크를 중지합니다.

  • 콜백 파라미터: statement

preStatementByType

SyncBailHook

5.109.0+

preStatement의 타입별 형태로, 구문의 노드 타입으로 키가 지정됩니다. preStatement 탭이 이미 bail하지 않은 경우에만 실행됩니다.

  • 훅 파라미터: type
  • 콜백 파라미터: statement

blockPreStatement

SyncBailHook

preStatement와 동일하지만, 현재 블록으로 범위가 지정된 선언만 방문하는 블록 프리워크에 대한 것입니다.

  • 콜백 파라미터: statement

blockPreStatementByType

SyncBailHook

5.109.0+

blockPreStatement의 타입별 형태로, 선언의 노드 타입으로 키가 지정되며 preStatementByType과 동일한 조건으로 실행됩니다.

  • 훅 파라미터: type
  • 콜백 파라미터: declaration

unusedStatement

SyncBailHook

동일한 블록에서 종료 구문 뒤에 오는, 도달 불가능한 각 구문에 대해 호출됩니다. true를 반환하면 이를 워킹하는 것을 건너뜁니다.

  • 콜백 파라미터: statement

terminate

SyncBailHook

최상위 범위 외부의 return 또는 throw 구문에 대해 호출됩니다. true를 반환하면 스코프가 종료된 것으로 표시되어, 파서는 그 이후의 구문을 도달 불가능한 것으로 처리합니다.

  • 콜백 파라미터: statement

statementIf

SyncBailHook

if 구문을 파싱할 때 호출됩니다. statement 훅과 동일하지만, statement.type == 'IfStatement'인 경우에만 트리거 됩니다.

  • 콜백 파라미터: statement

label

SyncBailHook

label이 있는 구문을 파싱할 때 호출됩니다. 이러한 구문에는 statement.type === 'LabeledStatement'가 있습니다.

  • 훅 파라미터: labelName
  • 콜백 파라미터: statement

import

SyncBailHook

코드 조각의 모든 import 구문에 대해 호출됩니다. source 파라미터에는 가져온 파일의 이름이 포함됩니다.

  • 콜백 파라미터: statement source

다음의 import 구문은 훅을 한 번 트리거 합니다.

index.js

import _ from "lodash";

MyPlugin.js

parser.hooks.import.tap("MyPlugin", (statement, source) => {
  // source == 'lodash'
});

importSpecifier

SyncBailHook

모든 import 구문의 모든 지정자에 대해 호출됩니다.

  • 콜백 파라미터: statement source exportName identifierName

다음의 import 구문은 훅을 두 번 트리거 합니다.

index.js

import _, { has } from "lodash";

MyPlugin.js

parser.hooks.importSpecifier.tap(
  "MyPlugin",
  (statement, source, exportName, identifierName) => {
    /* First call
    source == 'lodash'
    exportName == 'default'
    identifierName == '_'
  */
    /* Second call
    source == 'lodash'
    exportName == 'has'
    identifierName == 'has'
  */
  },
);

export

SyncBailHook

코드 조각의 모든 export 구문에 대해 호출됩니다.

  • 콜백 파라미터: statement

exportImport

SyncBailHook

모든 export-import 구문에 대해 호출됩니다. 예. export * from 'otherModule';.

  • 콜백 파라미터: statement source

exportDeclaration

SyncBailHook

선언을 내보내는 모든 export 구문에 대해 호출됩니다.

  • 콜백 파라미터: statement declaration

이러한 내보내기는 다음의 훅을 트리거 합니다.

export const myVar = "hello"; // 또한 var, let
export function FunctionName() {}
export class ClassName {}

exportExpression

SyncBailHook

표현식을 내보내는 모든 export 구문에 대해 호출됩니다. 예. export default expression;.

  • 콜백 파라미터: statement declaration

exportSpecifier

SyncBailHook

모든 export 구문의 모든 지정자에 대해 호출됩니다.

  • 콜백 파라미터: statement identifierName exportName index

exportImportSpecifier

SyncBailHook

모든 export-import 구문의 모든 지정자에 대해 호출됩니다.

  • 콜백 파라미터: statement source identifierName exportName index

varDeclaration

HookMap<SyncBailHook>

변수 선언문을 파싱할 때, 선언된 각 식별자마다 한 번씩 호출됩니다. 콜백은 Identifier 노드를 받습니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: identifier
const a = 1;

parser.hooks.varDeclaration.for("a").tap("MyPlugin", (identifier) => {
  // identifier is the `Identifier` node of a
});

preDeclarator

SyncBailHook

프리워크 중 변수 선언의 각 선언자에 대해, 선언 자체가 워크되기 전에 호출됩니다.

  • 콜백 파라미터: declarator declaration

declarator

SyncBailHook

변수 선언을 워킹하는 동안 각 선언자에 대해 호출됩니다. true를 반환하면 파서가 해당 선언자 자체를 워킹하는 것을 중지합니다.

  • 콜백 파라미터: declarator statement

varDeclarationLet

HookMap<SyncBailHook>

let을 사용해 정의된 변수 선언문을 파싱할 때 호출됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: identifier

varDeclarationConst

HookMap<SyncBailHook>

const를 사용해 정의된 변수 선언문을 파싱할 때 호출됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: identifier

varDeclarationUsing

SyncBailHook

5.100.0+

using 또는 await using으로 선언된 변수에 대해 호출되며, 선언된 이름으로 키가 지정됩니다. let, const 및 var 형태와 함께 사용됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: declaration

varDeclarationVar

HookMap<SyncBailHook>

var를 사용해 정의된 변수 선언문을 파싱할 때 호출됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: identifier

pattern

SyncBailHook

디스트럭처링 패턴이 바인딩하는 각 식별자에 대해 호출되며, 해당 이름으로 키가 지정됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: pattern

canRename

SyncBailHook

이름 변경이 허용되는지 확인하기 위해 식별자의 이름을 변경하기 전에 트리거 됩니다. 일반적으로 rename 훅과 함께 사용됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression
const a = b;

parser.hooks.canRename.for("b").tap(
  "MyPlugin",
  (expression) =>
    // true를 반환하면 이름을 변경할 수 있습니다.
    true,
);

rename

SyncBailHook

새 식별자를 가져오기 위해 이름을 바꿀 때 트리거 됩니다. 이 훅은 canRename이 true를 반환하는 경우에 호출됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression
const a = b;

parser.hooks.rename.for("b").tap("MyPlugin", (expression) => {});

assign

SyncBailHook

AssignmentExpression을 파싱할 때 호출됩니다. 할당된 표현식이 워크된 후, 대상이 워크되기 전에 호출됩니다. true를 반환하면 대상이 워크되는 것을 방지합니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression
a += b;

parser.hooks.assign.for("a").tap("MyPlugin", (expression) => {
  // this is called after b has been walked, before a is walked
});

assignMemberChain

SyncBailHook

멤버 체인에 할당될 때 호출되며, 체인이 시작되는 이름으로 키가 지정됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression members

typeof

SyncBailHook

식별자의 typeof를 파싱할 때 트리거 됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression

call

SyncBailHook

함수 호출을 파싱할 때 호출됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression
eval(/* something */);

parser.hooks.call.for("eval").tap("MyPlugin", (expression) => {});

callMemberChain

SyncBailHook

객체의 멤버 함수에 대한 호출을 파싱할 경우 트리거 됩니다.

  • 훅 파라미터: objectIdentifier
  • 콜백 파라미터: expression, properties
myObj.anyFunc();

parser.hooks.callMemberChain
  .for("myObj")
  .tap("MyPlugin", (expression, properties) => {});

memberChainOfCallMemberChain

SyncBailHook

멤버 체인에서 이루어진 호출의 결과로부터 읽힌 멤버 체인에 대해 호출되며, 체인이 시작되는 이름으로 키가 지정됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression calleeMembers callExpression members memberRanges

callMemberChainOfCallMemberChain

SyncBailHook

memberChainOfCallMemberChain과 동일하지만, 그 외부 멤버 체인이 자체적으로 호출되는 경우입니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression calleeMembers callExpression members memberRanges

new

SyncBailHook

new 표현식을 파싱할 때 호출됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression
new MyClass();

parser.hooks.new.for("MyClass").tap("MyPlugin", (expression) => {});

expression

SyncBailHook

표현식을 파싱할 때 호출됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression
const a = this;

parser.hooks.expression.for("this").tap("MyPlugin", (expression) => {});

expressionMemberChain

SyncBailHook

표현식으로 읽히는 멤버 체인에 대해 호출되며, 체인이 시작되는 이름으로 키가 지정됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression members membersOptionals memberRanges

unhandledExpressionMemberChain

SyncBailHook

expressionMemberChain이 처리하지 않고 남긴 멤버 체인에 대해 호출되며, 체인이 시작되는 이름으로 키가 지정됩니다.

  • 훅 파라미터: identifier
  • 콜백 파라미터: expression members

expressionConditionalOperator

SyncBailHook

ConditionalExpression을 파싱할 때 호출됩니다. 예. condition ? a : b

  • 콜백 파라미터: expression

expressionLogicalOperator

SyncBailHook

LogicalExpression, 예를 들어 a && b 또는 a || b를 파싱할 때 호출됩니다. 값을 반환하면 파서가 피연산자를 직접 워킹하는 것을 중지합니다. 이것이 플러그인이 죽은 것으로 평가된 분기를 건너뛰는 방법입니다.

  • 콜백 파라미터: expression

binaryExpression

SyncBailHook

BinaryExpression, 예를 들어 a === b를 파싱할 때 호출됩니다. 값을 반환하면 두 피연산자의 기본 워크를 중지합니다.

  • 콜백 파라미터: expression

optionalChaining

SyncBailHook

ChainExpression, 즉 a?.b 또는 a?.()와 같이 옵셔널 체이닝을 사용하는 표현식을 파싱할 때 호출됩니다.

  • 콜백 파라미터: expression

importCall

SyncBailHook

동적 import()를 파싱할 때 호출됩니다. true를 반환하면 호출이 처리된 것으로 표시되어 webpack이 자체 디펜던시를 생성하지 않습니다.

  • 콜백 파라미터: expression callExpression

callExpression은 import()가 즉시 호출되는 경우, 예를 들어 import("./m").then(...)에서만 제공됩니다.

topLevelAwait

SyncBailHook

최상위 await가 파싱될 때 호출됩니다. 이것이 모듈을 비동기 모듈로 만드는 것입니다.

  • 콜백 파라미터: expression

classExtendsExpression

SyncBailHook

클래스가 확장하는 표현식과 함께 호출됩니다. 예를 들어 class A extends Base {}에서 Base입니다.

  • 콜백 파라미터: expression classDefinition

classBodyElement

SyncBailHook

클래스 본문의 각 요소 — 메서드, 속성 정의 또는 정적 블록에 대해 호출됩니다. true를 반환하면 파서가 해당 요소를 워킹하는 것을 중지합니다.

  • 콜백 파라미터: element classDefinition

classBodyValue

SyncBailHook

클래스 본문 요소의 값, 즉 필드 초기화자 또는 메서드의 함수 표현식에 대해 호출됩니다. true를 반환하면 파서가 이를 워킹하는 것을 중지합니다.

  • 콜백 파라미터: expression element classDefinition

collectDestructuringAssignmentProperties

SyncBailHook

디스트럭처링 할당에 대해 호출되어 읽는 속성을 수집할 수 있습니다. 이를 통해 webpack이 디스트럭처링된 import를 해당 exports에 대한 참조로만 처리할 수 있습니다.

  • 콜백 파라미터: expression

collectGuards

SyncBailHook

조건부 표현식의 테스트와 함께 호출되어 그것이 내포하는 가드를 수집합니다. 이를 통해 파서가 분기들이 평가될 수 있는 것을 좁힐 수 있습니다.

  • 콜백 파라미터: expression

finish

SyncBailHook

전체 프로그램이 워크된 후, 파싱된 AST와 주석과 함께 호출됩니다.

  • 콜백 파라미터: ast comments

program

SyncBailHook

코드 조각의 추상 구문 트리(AST)에 접근합니다.

  • 파라미터: ast comments
Edit this page·

7 Contributors

byzykDeTeammisterdevEugeneHlushkochenxsansnitin315moshams272