>

컨텍스트 예

저는 네이티브 소스에서 암호화 보안 임의 바이트를 가져 오는 것을 기반으로 라이브러리를 작성하고 있습니다. Node.js와 브라우저에서 lib를 사용 가능하게 만들고 싶습니다. 이를 위해서는 두 환경에서 서로 다른 내장 API를 사용해야합니다.

문제

사용할 일반적인 솔루션을 찾고 있습니다

<올>
  • ES6 스타일 가져 오기가있는 Node.js API 메소드
  • 또는 브라우저 API 메소드
  • 환경 감지를 기반으로합니다.

    위의 예제 컨텍스트에 적용된 문제

    라이브러리를 Node.js와 브라우저 환경 모두에서 사용할 수있게하려면 crypto.randomBytes()  Node.js 및 window.crypto.getRandomValues() 에서 사용됩니다.  브라우저에서 무작위 소스의 기본으로 사용됩니다.

    현재 작동하는 솔루션은 Node의 동적 require 를 기반으로합니다. . lib는 환경을 감지하고 다음을 수행합니다.

      Node.js에서는 require('crypto') 를 사용합니다. ,
    • 브라우저에서 window.crypto.getRandomValues() 를 사용합니다 전체 범위에서 사용할 수 있으며 필수/가져올 필요가 없습니다.

    질문

    require() 를 사용하는 대신 ES6 스타일 import { randomFill } from 'crypto'; 를 사용할 수 있는지 궁금합니다.  환경 감지. 가져 오기는 여전히 브라우저에서 실행되지만 브라우저에 내장 모듈이 없으므로 문제가됩니다.

    바벨과 같은 트랜스 파일러와 롤업과 같은 번 들러가 정적 가져 오기에서 이러한 종류의 문제를 처리하는 경험이 있습니까?

    <시간>

    참고 : 이것은 않습니다. -node ">노드에서 es6 가져 오기를 어떻게 사용합니까? . ESM과 --experimental-modules 가 있다는 것을 알고 있습니다 잘 작동합니다. 내 질문은 브라우저와 Node.js 환경이 모두 구현의 대상이되는 경우와 관련이 있지만 환경이 다르기 때문에 다른 플랫폼 제공 API를 사용해야합니다.


    • 답변 # 1

      이것이 귀하의 질문에 대한 대답인지 확실하지 않지만, 이것을 해결하는 방법은 기본적으로 웹 팩 빌드를 통해입니다.

      다음과 같은 가져 오기가있을 수 있습니다.

      import { base64encode } from './base64';
      
      

      이 디렉토리에는 2 개의 파일이 있습니다 :

      base64.js
      base64.web.js
      
      

      첫 번째 웹 패키지보다 두 번째 웹 패키지를 선호하도록 웹팩을 구성 할 수 있습니다. 다른 브라우저 제작 도구에도 이와 같은 기능이 있습니다.

      이것은 저에게 정말 효과적이지만 '빌드 단계'가있는 경우에만 옵션입니다.

  • 이전 파이썬 업데이트 중첩 목록 및 값이있는 dict
  • 다음 javascript - 이 오디오의 playbackRate를 설정할 수없는 이유는 무엇입니까?