티스토리 뷰
Mobx를 사용하려고 하던 찰나에 바벨 플러그인으로 @babel/plugin-proposal-class-properties의 loose:true가 사용되는걸 보고 이건 어떤 옵션일까 궁금해서 찾아봤습니다.
@babel/plugin-proposal-class-properties이란?
자바스크립트에서도 Class를 사용할 수 있습니다. 하지만, Class내부의 속성들을 선언할때는 바벨 플러그인이 없으면 오류가 납니다.
보통은 아래처럼 class의 constructor에서 변수를 초기화 합니다.
/
class Example {
constructor() {
this.abc = '123';
}
}
하지만 아래처럼 쓰고 싶은 경우도 있을겁니다.
class Bork {
// 속성 초기화 문법
instanceProperty = "bork";
boundFunction = () => {
return this.instanceProperty;
};
// 스태틱 속성
static staticProperty = "babelIsCool";
static staticFunction = function() {
return Bork.staticProperty;
};
}
이 플러그인을 사용하면 두가지 케이스를 추가 처리할 수 있습니다.
1. 클래스가 인스턴스화 되면서 속성을 초기화
2. 클래스에 static property를 사용하고 싶을때
그럼 loose 옵션은?
아래와 같은 클래스가 있을떄
class Bork {
static a = 'foo';
static b;
x = 'bar';
y;
}
loose: false인 경우
var Bork = function Bork() {
babelHelpers.classCallCheck(this, Bork);
Object.defineProperty(this, "x", {
configurable: true,
enumerable: true,
writable: true,
value: 'bar'
});
Object.defineProperty(this, "y", {
configurable: true,
enumerable: true,
writable: true,
value: void 0
});
};
Object.defineProperty(Bork, "a", {
configurable: true,
enumerable: true,
writable: true,
value: 'foo'
});
Object.defineProperty(Bork, "b", {
configurable: true,
enumerable: true,
writable: true,
value: void 0
});
Object.defineProperty를 통해 클래스의 속성들을 정의해주고 있습니다. 코드가 다소 장황합니다.
loose: true인 경우
var Bork = function Bork() {
babelHelpers.classCallCheck(this, Bork);
this.x = 'bar';
this.y = void 0;
};
Bork.a = 'foo';
Bork.b = void 0;
아래와 같이 할당식 형태로 깔끔하게 변환됩니다. 코드 길이가 매우 줄어들었죠. 코드 길이가 준다는것은 번들 사이즈가 줄어든다는 의미입니다.
'Webpack' 카테고리의 다른 글
@babel/plugin-proposal-decorators의 legacy: true 옵션 (0) | 2020.06.26 |
---|---|
ES모듈방식과 CommonJS 모듈 방식을 섞어 사용하기(esModuleInterop) (0) | 2020.06.04 |
node_module안에 들어있는 css를 가져오지 못하는 현상 (0) | 2020.06.04 |
빌드타임, 런타임 코드 스플리팅 (0) | 2020.04.17 |
웹팩 entry와 output (0) | 2020.04.16 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- computed
- react
- es6
- Polyfill
- react hooks
- reactdom
- javascript
- design system
- await
- Next.js
- Babel
- useEffect
- webpack
- props
- Action
- return type
- reflow
- rendering scope
- storybook
- reducer
- server side rendering
- state
- useRef
- typescript
- mobx
- async
- atomic design
- type alias
- hydrate
- promise
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함