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) => {
parser.hooks.someHook.tap("MyPlugin", (data) => {
// ...
});
});
});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
evaluateCallExpressionMember
SyncBailHook
성공적으로 평가된 표현식의 멤버 함수에 대한 호출을 평가할 때 호출됩니다.
- 훅 파라미터:
identifier - 콜백 파라미터:
expressionparam
이 표현식은 다음의 훅을 트리거 합니다.
index.js
const a = expression.myFunc();MyPlugin.js
parser.hooks.evaluateCallExpressionMember.for("myFunc").tap(
"MyPlugin",
(expression, param) =>
/* ... */
expressionResult,
);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'
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
SyncBailHook
변수 선언문을 파싱할 때 호출됩니다.
- 콜백 파라미터:
declaration
varDeclarationLet
SyncBailHook
let을 사용해 정의된 변수 선언문을 파싱할 때 호출됩니다.
- 콜백 파라미터:
declaration
varDeclarationConst
SyncBailHook
const를 사용해 정의된 변수 선언문을 파싱할 때 호출됩니다.
- 콜백 파라미터:
declaration
varDeclarationVar
SyncBailHook
var를 사용해 정의된 변수 선언문을 파싱할 때 호출됩니다.
- 콜백 파라미터:
declaration
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 (before parsing assigned expression)
SyncBailHook
할당된 표현식을 파싱하기 전에 AssignmentExpression을 파싱할 경우에 호출됩니다.
- 훅 파라미터:
identifier - 콜백 파라미터:
expression
a += b;
parser.hooks.assign.for("a").tap("MyPlugin", (expression) => {
// 이것은 b를 파싱하기 전에 호출됩니다.
});assign (before parsing target)
SyncBailHook
할당 표현식을 파싱하기 전에 AssignmentExpression을 파싱할 경우에 호출됩니다.
- 훅 파라미터:
identifier - 콜백 파라미터:
expression
a += b;
parser.hooks.assign.for("a").tap("MyPlugin", (expression) => {
// 이것은 a를 파싱하기 전에 호출됩니다.
});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) => {});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) => {});expressionConditionalOperator
SyncBailHook
ConditionalExpression을 파싱할 때 호출됩니다. 예. condition ? a : b
- 콜백 파라미터:
expression
program
SyncBailHook
코드 조각의 추상 구문 트리(AST)에 접근합니다.
- 파라미터:
astcomments

