Deno에서 does.ts 및 module.ts가 나쁜 이유

3981 단어
공식 Deno 설명서를 읽으면 작성자advices you to contain all dependecies into one file가 있음을 알 수 있습니다.

마찬가지로 라이브러리를 생성하는 경우 사실상의 표준은 모든 모듈을 단일mod.ts 파일로 내보내는 것입니다.

어떻게든 이 규칙은 개발 경험을 더 좋게 만드는 것으로 가정합니다.

그러나 그 대신에 이 규칙이 반대로 작동하는 이유를 설명하겠습니다. 즉, 컴파일 시간을 늘려 개발 경험을 악화시키고 있습니다(간단한 벤치마크 기준으로 약 200%).

벤치마크를 보려면 this repository에서 확인하십시오.
deps.ts가 있다고 상상해 보십시오.

export {A} from 'https://deno.land/x/a/mod.ts'
export {B} from 'https://deno.land/x/b/mod.ts'

그리고 main.ts 파일:

import {A} from './deps.ts'
deno run main.ts를 실행하면 Deno는 실제로 B의 종속성을 해결하고 main.ts가 실제로 필요하지 않은 경우에도 유형을 확인합니다. .

궁극적으로 대부분의 컴파일 시간은 사용하지 않는 가져오기를 컴파일하는 데 낭비됩니다.

또한 B 를 수행하여 번들을 시도하면 Deno가 tree shaking 을 지원하지 않기 때문에 번들 출력에도 deps.ts 및 해당 종속성이 포함되어 있음을 알 수 있습니다.

그렇다면 이 문제를 어떻게 해결할 수 있을까요? 간단합니다. 직접 URL 가져오기를 사용하세요! 이렇게 하면 컴파일 시간이 단축되고 번들 크기가 향상됩니다.

// main.ts
import {A} from 'https://deno.land/x/a/mod.ts'




deno bundle main.ts 를 사용할 때 발생하는 모든 문제입니다.

Deno의 제작자 Ryan Dhal을 찾을 수 있습니다.
Lodash 함수를 코드로 가져오려고 할 때 갑자기 번들 크기가 너무 커진 것을 기억하십니까?

그렇다면 Lodash 커뮤니티는 이를 어떻게 해결할까요? 그들은 publishing a package for each function 으로 합니다.

따라서 피하고 싶은 경우:

  • 불필요하게 긴 컴파일 시간
  • 불요 거대 번들 사이즈

  • 블랙홀로 붕괴하는 Deno 패키지.

  • 전체 Deno 커뮤니티는 모든 종속성/내보내기를 하나의 B/npm 파일에 배치하는 것을 중단해야 합니다.
    deps.tsmod.ts 를 계속 사용하면 Deno 개발자가 사용하지 않는 종속성을 컴파일하기 위해 귀중한 시간을 낭비하여 개발 경험을 방해하게 됩니다.

    다음은 종속성 관리를 위해 내가 제안하는 것이므로 모든 종속성을 다음과 같이 단일deps.ts에 넣는 대신

    // deps.ts
    export {A} from 'https://deno.land/x/a/mod.ts'
    export {B} from 'https://deno.land/x/b/mod.ts'
    

    각각을 mod.ts 폴더 아래에 별도의 파일로 내보냅니다.

    // deps/a.ts
    export {A} from 'https://deno.land/x/a/mod.ts'
    



    // deps/b.ts
    export {B} from 'https://deno.land/x/b/mod.ts'
    

    Ok, without mod.ts how do we allow library users to discover API easily?
    Simple, instead of placing all export into a single mod.ts, split them into separate files under the mod folder.



    예를 들어 다음을 갖는 대신:

    // mod.ts
    export {A} from './a.ts'
    export {B} from './b.ts'
    

    하다:

    // mod/a.ts
    export {A} from '../src/a.ts'
    



    // mod/b.ts
    export {B} from '../src/b.ts'
    

    마지막으로, 전체 Deno 커뮤니티가 이 deps.ts/mod.ts 관행을 버리면 Deno 자체는 트리 쉐이킹 및 skip-unused-import 기능(구현하기 매우 어려운 기능)을 구현할 필요조차 없을 수 있습니다.

    사회적 거리두기가 백신에 의존하지 않고 코로나 바이러스 확산을 막는 것과 같습니다.

    이 글이 이치에 맞다고 생각하고 Deno의 미래를 위해 동료 Deno 개발자와 공유해 주세요.

    좋은 웹페이지 즐겨찾기