기본 내보내기를 사용하면 JavaScript를 읽기가 더 어려워집니다!
2022-10-19 last update
6 minutes reading programming javascript이 블로그 게시물에서는 JavaScript
나는 내 코드를 점토처럼 취급하는 것을 좋아합니다. 새로운 기능을 추가하거나 기존 기능을 변경할 때 지속적으로 발전하고 있습니다. 그러나 기본 내보내기를 사용하면 더 어려워질 뿐만 아니라 이미 존재하는 코드를 사용할 때 복잡성이 추가됩니다!
내 추론을 설명하자!
기본 내보내기의 첫 번째 주요 문제는 이름 지정입니다. 이름 가져오기를 포함할 때마다 이름 가져오기에 대해 생각해야 합니다. 뿐만 아니라 익명 값을 내보낼 수 있으므로 새 함수를 생성할 때 좋은 이름을 지어야 하는 것은 아닙니다.
이 간단한 JavaScript 파일을 살펴보겠습니다.
따라서 사용하려는 모든 위치에서 해당 기능의 이름을 지정하는 것에 대해 생각해야 합니다. 그리고 이름을 짓는 것은 어렵습니다. 아마도 당신이 그 함수를 직접 작성했을 것입니다. 당신은 그것이 하는 일을 정확히 알고 있습니다. 그러나 새로운 팀원이 합류하면 이 기능이 무엇을 하는지 이해하기가 훨씬 더 어렵습니다.
이는 또한 다른 팀 구성원이 새로운 기능을 작업하거나 기존 코드를 리팩토링할 때 다른 이름을 선택하게 할 수 있습니다. 그리고 일관성과 규칙은 높은 성과를 내는 팀의 핵심입니다! 코드 검토에서 다른 이름을 제안할 수 있지만 명명된 내보내기를 사용하면 처음에 쉽게 피할 수 있는 복잡성이 추가됩니다.
JavaScript의 가져오기를 사용하면
물론 한 가지를 내보내는 경우 사용하지 않을 가능성이 높기 때문에 중요하지 않습니다
모듈 기능을 그룹화하는 것을 정말 좋아하지만
가독성을 위한 훌륭한 연습이지만 항상 트리에 최적인 것은 아닙니다.
흔들리고 번들 크기가 커질 수 있습니다!
Next.js 또는 Remix와 같은 프레임워크는 기본 내보내기를 사용하여 폴더 기반 라우팅으로 구성 요소를 정의하도록 합니다. 나는 어떤 경우에도 기본 내보내기를 강제하는 것을 좋아하지 않습니다.
TypeScript는 이 시점에서 "템플릿"스타일 내보내기에 대한 지원이 부족합니다. 여기서 단일 파일은 기본 기본 내보내기 외에 미리 정의된 선택적 명명된 내보내기 세트를 내보낼 수 있습니다. 이전에 언급한 프레임워크의 인기를 기반으로 향후 언어에 이와 같은 것이 포함되는 것을 보고 싶습니다.
구문을 사용하면 각 함수, 유형 또는 값 앞에
동시에 여러 항목을 내보낼 수도 있습니다.
읽고 있는 함수가 내보내졌는지 여부를 명확하게 알 수 있으므로 첫 번째 접근 방식을 선호하는 경향이 있습니다.
다른 이름을 사용해야 하는 경우 명명된 내보내기는 명명된 내보내기 별칭을 허용합니다.
우리는 이미 ES2015(ES6)를 가지고 있지만 모든 유형의 응용 프로그램에서 많은 기본 내보내기를 볼 수 있습니다. CommonJS 상호 운용성을 위해 도입되었으며 내부 코드에서 사용할 이유가 별로 없습니다. 이 게시물이 가능한 경우 기본 내보내기를 사용하지 않도록 팀을 설득하는 데 도움이 되기를 바랍니다.
공포 이야기를 리팩토링하는 기본 내보내기가 있는 경우 주저하지 마십시오!
이 블로그 게시물을 조사할 때 사용한 리소스 목록:
https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export https://blog.neufund.org/why-we-have-banned-default-exports-and-you-should-do-the-same-d51fdc2cf2ad
cichocinski.dev에서 더 읽어보기
export default
를 사용하면 코드베이스 가독성과 리팩토링 가능성이 어떻게 저하되는지 보여드리고자 합니다. 명명된 내보내기 사용에 대한 몇 가지 팁도 공유하겠습니다!나는 내 코드를 점토처럼 취급하는 것을 좋아합니다. 새로운 기능을 추가하거나 기존 기능을 변경할 때 지속적으로 발전하고 있습니다. 그러나 기본 내보내기를 사용하면 더 어려워질 뿐만 아니라 이미 존재하는 코드를 사용할 때 복잡성이 추가됩니다!
내 추론을 설명하자!
익명 함수 및 값을 내보낼 수 있습니다.
기본 내보내기의 첫 번째 주요 문제는 이름 지정입니다. 이름 가져오기를 포함할 때마다 이름 가져오기에 대해 생각해야 합니다. 뿐만 아니라 익명 값을 내보낼 수 있으므로 새 함수를 생성할 때 좋은 이름을 지어야 하는 것은 아닙니다.
이 간단한 JavaScript 파일을 살펴보겠습니다.
// cookies.js
export default () => {
// baking 🍪 cookies logic
};
// app.js
import makeChocolateChipCookies from "./cookie.js";
cookies.js
에서 기본 내보낸 함수가 무엇을 하는지 알 수 없습니다. 물론 구현을 엿보거나 문서에 의존할 수 있지만 확실히 더 많이 추가됩니다cognitive load. 그 기능이 무엇을 해야 하는지 정확히 알 수 없습니다.따라서 사용하려는 모든 위치에서 해당 기능의 이름을 지정하는 것에 대해 생각해야 합니다. 그리고 이름을 짓는 것은 어렵습니다. 아마도 당신이 그 함수를 직접 작성했을 것입니다. 당신은 그것이 하는 일을 정확히 알고 있습니다. 그러나 새로운 팀원이 합류하면 이 기능이 무엇을 하는지 이해하기가 훨씬 더 어렵습니다.
이는 또한 다른 팀 구성원이 새로운 기능을 작업하거나 기존 코드를 리팩토링할 때 다른 이름을 선택하게 할 수 있습니다. 그리고 일관성과 규칙은 높은 성과를 내는 팀의 핵심입니다! 코드 검토에서 다른 이름을 제안할 수 있지만 명명된 내보내기를 사용하면 처음에 쉽게 피할 수 있는 복잡성이 추가됩니다.
모듈에서 모두 가져올 때 어색합니다.
JavaScript의 가져오기를 사용하면
import * as X
구문을 사용하여 모듈에서 모든 것을 가져올 수 있습니다. 그리고 기본 내보내기는 default
에서 사용할 수 있습니다.// app.js
import * as Cookies from "./cookie.js";
// usage - yikes
Cookies.default();
물론 한 가지를 내보내는 경우 사용하지 않을 가능성이 높기 때문에 중요하지 않습니다
import * as X
. 그러나 가독성을 위해 모듈 이름으로 가져오는 여러 항목을 그룹화할 수 있습니다.모듈 기능을 그룹화하는 것을 정말 좋아하지만
가독성을 위한 훌륭한 연습이지만 항상 트리에 최적인 것은 아닙니다.
흔들리고 번들 크기가 커질 수 있습니다!
기본 내보내기 및 폴더 기반 라우팅
Next.js 또는 Remix와 같은 프레임워크는 기본 내보내기를 사용하여 폴더 기반 라우팅으로 구성 요소를 정의하도록 합니다. 나는 어떤 경우에도 기본 내보내기를 강제하는 것을 좋아하지 않습니다.
TypeScript는 이 시점에서 "템플릿"스타일 내보내기에 대한 지원이 부족합니다. 여기서 단일 파일은 기본 기본 내보내기 외에 미리 정의된 선택적 명명된 내보내기 세트를 내보낼 수 있습니다. 이전에 언급한 프레임워크의 인기를 기반으로 향후 언어에 이와 같은 것이 포함되는 것을 보고 싶습니다.
명명된 내보내기 사용
각 기능을 개별적으로 내보내거나 한 번에 모든 것을 내보내시겠습니까?
구문을 사용하면 각 함수, 유형 또는 값 앞에
export
키워드를 사용할 수 있습니다.export function makeCookies() {
// baking 🍪 cookies logic
}
동시에 여러 항목을 내보낼 수도 있습니다.
function makeCookies() {
// baking 🍪 cookies logic
}
function eatCookies() {
// eating 🍪 cookies logic
}
export { makeCookies, eatCookies };
읽고 있는 함수가 내보내졌는지 여부를 명확하게 알 수 있으므로 첫 번째 접근 방식을 선호하는 경향이 있습니다.
구조에 명명된 내보내기 별칭
다른 이름을 사용해야 하는 경우 명명된 내보내기는 명명된 내보내기 별칭을 허용합니다.
// cookies.js
export function makeCookies() {
// baking 🍪 cookies logic
}
// app.js
import { makeCookies as makeCookiesWithStyle } from "./cookie.js";
결론
우리는 이미 ES2015(ES6)를 가지고 있지만 모든 유형의 응용 프로그램에서 많은 기본 내보내기를 볼 수 있습니다. CommonJS 상호 운용성을 위해 도입되었으며 내부 코드에서 사용할 이유가 별로 없습니다. 이 게시물이 가능한 경우 기본 내보내기를 사용하지 않도록 팀을 설득하는 데 도움이 되기를 바랍니다.
공포 이야기를 리팩토링하는 기본 내보내기가 있는 경우 주저하지 마십시오!
자원
이 블로그 게시물을 조사할 때 사용한 리소스 목록:
cichocinski.dev에서 더 읽어보기