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
new 표현식을 평가할 때 호출되며, 호출되는 생성자의 이름으로 키가 지정됩니다.
- 훅 파라미터:
identifier - 콜백 파라미터:
expression
evaluateCallExpression
SyncBailHook
호출 대상이 단순 식별자인 호출을 평가할 때 호출되며, 해당 식별자 이름으로 키가 지정됩니다.
- 훅 파라미터:
identifier - 콜백 파라미터:
expression
evaluateCallExpressionMember
SyncBailHook
성공적으로 평가된 표현식의 멤버 함수에 대한 호출을 평가할 때 호출됩니다.
- 훅 파라미터:
identifier - 콜백 파라미터:
expressionparam
이 표현식은 다음의 훅을 트리거 합니다.
index.js
const a = expression.myFunc();MyPlugin.js
parser.hooks.evaluateCallExpressionMember.for("myFunc").tap(
"MyPlugin",
(expression, param) =>
/* ... */
expressionResult,
);isPure
SyncBailHook
노드가 부작용이 없는지 판단하기 위해 호출되며, 노드의 타입으로 키가 지정됩니다. false를 반환하면 순수하지 않은 것으로 표시되어 webpack이 이를 제거하지 않습니다.
- 훅 파라미터:
type - 콜백 파라미터:
expressioncommentsStartPosition
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
preStatement의 타입별 형태로, 구문의 노드 타입으로 키가 지정됩니다. preStatement 탭이 이미 bail하지 않은 경우에만 실행됩니다.
- 훅 파라미터:
type - 콜백 파라미터:
statement
blockPreStatement
SyncBailHook
preStatement와 동일하지만, 현재 블록으로 범위가 지정된 선언만 방문하는 블록 프리워크에 대한 것입니다.
- 콜백 파라미터:
statement
blockPreStatementByType
SyncBailHook
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 파라미터에는 가져온 파일의 이름이 포함됩니다.
- 콜백 파라미터:
statementsource
다음의 import 구문은 훅을 한 번 트리거 합니다.
index.js
import _ from "lodash";MyPlugin.js
parser.hooks.import.tap("MyPlugin", (statement, source) => {
// source == 'lodash'
});importSpecifier
SyncBailHook
모든 import 구문의 모든 지정자에 대해 호출됩니다.
- 콜백 파라미터:
statementsourceexportNameidentifierName
다음의 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';.
- 콜백 파라미터:
statementsource
exportDeclaration
SyncBailHook
선언을 내보내는 모든 export 구문에 대해 호출됩니다.
- 콜백 파라미터:
statementdeclaration
이러한 내보내기는 다음의 훅을 트리거 합니다.
export const myVar = "hello"; // 또한 var, let
export function FunctionName() {}
export class ClassName {}exportExpression
SyncBailHook
표현식을 내보내는 모든 export 구문에 대해 호출됩니다. 예. export default expression;.
- 콜백 파라미터:
statementdeclaration
exportSpecifier
SyncBailHook
모든 export 구문의 모든 지정자에 대해 호출됩니다.
- 콜백 파라미터:
statementidentifierNameexportNameindex
exportImportSpecifier
SyncBailHook
모든 export-import 구문의 모든 지정자에 대해 호출됩니다.
- 콜백 파라미터:
statementsourceidentifierNameexportNameindex
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
프리워크 중 변수 선언의 각 선언자에 대해, 선언 자체가 워크되기 전에 호출됩니다.
- 콜백 파라미터:
declaratordeclaration
declarator
SyncBailHook
변수 선언을 워킹하는 동안 각 선언자에 대해 호출됩니다. true를 반환하면 파서가 해당 선언자 자체를 워킹하는 것을 중지합니다.
- 콜백 파라미터:
declaratorstatement
varDeclarationLet
HookMap<SyncBailHook>
let을 사용해 정의된 변수 선언문을 파싱할 때 호출됩니다.
- 훅 파라미터:
identifier - 콜백 파라미터:
identifier
varDeclarationConst
HookMap<SyncBailHook>
const를 사용해 정의된 변수 선언문을 파싱할 때 호출됩니다.
- 훅 파라미터:
identifier - 콜백 파라미터:
identifier
varDeclarationUsing
SyncBailHook
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 - 콜백 파라미터:
expressionmembers
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 - 콜백 파라미터:
expressioncalleeMemberscallExpressionmembersmemberRanges
callMemberChainOfCallMemberChain
SyncBailHook
memberChainOfCallMemberChain과 동일하지만, 그 외부 멤버 체인이 자체적으로 호출되는 경우입니다.
- 훅 파라미터:
identifier - 콜백 파라미터:
expressioncalleeMemberscallExpressionmembersmemberRanges
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 - 콜백 파라미터:
expressionmembersmembersOptionalsmemberRanges
unhandledExpressionMemberChain
SyncBailHook
expressionMemberChain이 처리하지 않고 남긴 멤버 체인에 대해 호출되며, 체인이 시작되는 이름으로 키가 지정됩니다.
- 훅 파라미터:
identifier - 콜백 파라미터:
expressionmembers
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이 자체 디펜던시를 생성하지 않습니다.
- 콜백 파라미터:
expressioncallExpression
callExpression은 import()가 즉시 호출되는 경우, 예를 들어 import("./m").then(...)에서만 제공됩니다.
topLevelAwait
SyncBailHook
최상위 await가 파싱될 때 호출됩니다. 이것이 모듈을 비동기 모듈로 만드는 것입니다.
- 콜백 파라미터:
expression
classExtendsExpression
SyncBailHook
클래스가 확장하는 표현식과 함께 호출됩니다. 예를 들어 class A extends Base {}에서 Base입니다.
- 콜백 파라미터:
expressionclassDefinition
classBodyElement
SyncBailHook
클래스 본문의 각 요소 — 메서드, 속성 정의 또는 정적 블록에 대해 호출됩니다. true를 반환하면 파서가 해당 요소를 워킹하는 것을 중지합니다.
- 콜백 파라미터:
elementclassDefinition
classBodyValue
SyncBailHook
클래스 본문 요소의 값, 즉 필드 초기화자 또는 메서드의 함수 표현식에 대해 호출됩니다. true를 반환하면 파서가 이를 워킹하는 것을 중지합니다.
- 콜백 파라미터:
expressionelementclassDefinition
collectDestructuringAssignmentProperties
SyncBailHook
디스트럭처링 할당에 대해 호출되어 읽는 속성을 수집할 수 있습니다. 이를 통해 webpack이 디스트럭처링된 import를 해당 exports에 대한 참조로만 처리할 수 있습니다.
- 콜백 파라미터:
expression
collectGuards
SyncBailHook
조건부 표현식의 테스트와 함께 호출되어 그것이 내포하는 가드를 수집합니다. 이를 통해 파서가 분기들이 평가될 수 있는 것을 좁힐 수 있습니다.
- 콜백 파라미터:
expression
finish
SyncBailHook
전체 프로그램이 워크된 후, 파싱된 AST와 주석과 함께 호출됩니다.
- 콜백 파라미터:
astcomments
program
SyncBailHook
코드 조각의 추상 구문 트리(AST)에 접근합니다.
- 파라미터:
astcomments