programing

bower init - amd, es6, 글로벌 및 노드 간의 차이

topblog 2023. 5. 8. 21:48
반응형

bower init - amd, es6, 글로벌 및 노드 간의 차이

나는 나의 첫 번째 바우어 구성요소를 만들고 있습니다.실행 후bower init이 스크립트는 다음 옵션과 함께 '이 패키지가 노출하는 모듈 유형'을 묻습니다.

  • 암드
  • es6
  • 세계적인
  • 노드

이 옵션들 사이의 차이점은 무엇입니까?

만약 여러분이 모른다면, 그것은 여러분에게 맞는 답일 가능성이 높습니다.

어느 쪽이든, 다음 사항을 이해해야 합니다.

[업데이트]

이 기능은 최근에 바우어에 도입되었으며 아직 문서화되지 않았습니다(AFAIK).그것은 본질적으로 설명합니다.moduleType어떤 모듈 기술에 대해 패키지가 소비되어야 하는지를 나타냅니다(위 참조).

지금은 설정하는 것 외에는 아무런 효과가 없습니다.moduleType의 재산.bower.json패키지의 파일입니다.

원본 풀 요청은 https://github.com/bower/bower/pull/934 을 참조하십시오.

[업데이트 #2]

몇 가지 추가 사항, 의견에 대한 답변:

  • 지금 현재 AFAIK에는 유효성 검사가 수행되지 않았습니다.moduleType재산 - 그것은 사람들이 그것을 위해 그들이 원하는 어떤 가치를 사용하는 것이 기술적으로 허용된다는 것을 의미합니다, 다음을 포함합니다.angularjs그들이 그렇게 할 의향이 있다면.
  • 바우어 위원회는 추가적인 포함을 별로 좋아하지 않는 것 같습니다.non-interoperable/proprietary moduleTypes(작곡가, 각도 등을 생각하세요) - 쉽게 이해할 수 있지만, 다시 말하지만, 어떤 것도 사람들이 그것을 사용하는 것을 방해하지 않습니다.moduleType그들이 원하는 가치
  • 이전의 예외는 최근의 포함입니다.yui moduleType따라서, 그것들이 공동 계획의 일부라고 가정할 때 "예외"가 이루어져야 합니다.

목록에 없는 패키지 관리자를 위해 패키지를 작성하고 이를 바우어에 게시하려면 어떻게 해야 합니까?

저는 es6 모듈을 작성하고 /patches6-transfiler를 사용하여 필요한 패키지 형식을 출력할 것입니다.그러면 다음 중 하나를 수행합니다.

  • 바우어 사용자들에게 내 패키지 기술을 선택 항목으로 포함시켜 달라고 청원합니다(대상으로 es6-transfiler에서 지원된다는 사실에 기초함).
  • es6 모듈 버전과 파일화된 XXX 버전을 모두 포함한 패키지를 게시하고 사용합니다.es6로서moduleType

고지 사항:저는 angularjs 모듈을 제작한 실제 경험이 없습니다.

초기의

사용 중bower init처음이기도 합니다.

옵션은 일부 JavaScript 코드를 모듈화하는 다양한 방법을 참조해야 합니다.

  • AMD: AMD 사용definerequirejs와 같은.
  • 노드: Node.js 사용require.
  • 글로벌: 자바스크립트 모듈 패턴을 사용하여 글로벌 변수(창과 같은)를 노출합니다.JQuery).
  • es6: 향후 출시될 EcmaScript6 모듈 기능 사용.

저의 경우 Node.js 모듈 dflow를 작성했지만 browserify를 사용하여 글로벌 dflow var:를 내보내는 dist/dflow.js 파일을 만들고 있으므로 글로벌을 선택했습니다.

기타 업데이트

dflow를 window global 객체로 브라우저화하기 위해 사용한 명령어는

browserify -s dflow -e index.js -o dist/dflow.js

브라우저 내부에서도 require를 사용하는 것을 선호하기 때문에 변경하여 지금 사용하고 있습니다.

browserify -r ./index.js:dflow -o dist/dflow.js

그래서 나는 바우어 모듈을 바꿨습니다.my bower.json 파일의 node입력합니다.

주요 동기는 제 모듈 이름에 대시가 있는 경우(예: 프로젝트 흐름 보기), flowView에서 글로벌 이름을 사용해야 한다는 것입니다.

이 새로운 접근 방식에는 다음과 같은 두 가지 이점이 있습니다.

  1. 노드와 브라우저 인터페이스는 동일합니다.클라이언트 측과 서버 측 모두에서 require를 사용하여 코드 예제를 한 번만 작성하고 두 컨텍스트 모두에서 쉽게 재사용할 수 있습니다.
  2. NPM 스크립트를 사용하므로 다음과 같은 이점을 활용할 수 있습니다.${npm_package_name}variable과 write는 브라우저에서 사용하는 스크립트입니다.

이것은 또 다른 주제이지만, 당신이 그것이 어떻게 유용한지 고려하는 것은 정말 가치가 있습니다. 후자의 이점: 제가 그것을 공유하겠습니다.npm.scripts.browserify패키지에 사용하는 속성입니다.제이손

"browserify": "browserify -r ./index.js:${npm_package_name} -o dist/${npm_package_name}.js"

참고로 모듈 유형과 관련하여 다음과 같이 정확히 지정됩니다.

에서 정의된 모듈 유형mainJavaScript 파일입니다.다음 문자열 중 하나 또는 배열일 수 있습니다.

  • globals글로벌 네임스페이스에 추가하는 JavaScript 모듈, 사용window.namespace또는this.namespace통사론
  • amdRequireJS와 같은 AMD와 호환되는 JavaScript 모듈, 사용define()통사론
  • node노드 및 공통과 호환되는 JavaScript 모듈JS 사용module.exports통사론
  • es6ECMA스크립트 6 모듈과 호환되는 JavaScript 모듈, 사용export그리고.import통사론
  • yuiYUI 모듈과 호환되는 JavaScript 모듈, 사용YUI.add()통사론

관련 링크: https://github.com/bower/spec/blob/master/json.md#moduletype

언급URL : https://stackoverflow.com/questions/22674018/bower-init-difference-between-amd-es6-globals-and-node

반응형