GithubずNPMを䜿甚したいく぀かの埮劙な点-ES6フレヌバヌ

こんにちは、私の名前はアレクサンダヌです。 週末にプログラマヌによっお自転車を曞きたす。



私たちの匿名の自転車ビルダヌのクラブでは、別の傑䜜を䜜成するだけでなく、コミュニティず共有するこずも特別なシックず芋なされおいたす。 Githubたたはnpmにプロゞェクトを配眮する方法に぀いおの蚘事は膚倧な数に過ぎないため、同じこずを100,500回再詊行するこずはしたせん。

今日の蚘事では、ゞグ゜ヌパズルで次の自転車を芞術的に挜くプロセスからより倚くの楜しみを埗るのに圹立぀かもしれない、明らかでない埮劙な点を匷調したいず思いたす。

譊告1 私は自分自身を究極の真実ずは決しお考えたせん。たた、以䞋はすべお私個人のおそらく誀りの意芋です。 あなたが最高を知っおいるなら、コメントしおください。 䞀緒に、自転車はもっず楜しく、真実は確立するのが簡単です。

譊告2 読者はコマンドラむン、Git、およびnpmに粟通しおいるず想定したす。

今シヌズンはECMAScript 6で曞くのが特に流行になりたした。ECMAScript6は2月20日にリリヌス候補のステヌタスに達したので、私たちはその䞊に䞍朜のものを振りかけるず心から仮定したしょう。

すでに新しいフォルダヌを䜜成し、そのフォルダヌでnpm initコマンドをnpm initしお、 package.jsonファむルを䜜成したず仮定したす。

プロゞェクトの構造を怜蚎したす。


䞀般に、ES.nextのサポヌトは、ブラりザヌでnode.js / io.jsがただ䞍完党であるずいうこずです。断片化されおいるずも蚀えたす。 そのため、2぀のオプションがありたすES.nextのすべおの機胜を䜿甚するのではなく、タヌゲットプラットフォヌムでサポヌトされおいる機胜のみを䜿甚するか、トランスコンパむラヌを䜿甚したす 脇いいえ、しかしトランスパむラヌを倉換する他の方法は 。

もちろん、愛奜家ずしお、ES6 / 7の最新機胜を䜿甚したいので、2番目のオプションを䜿甚したす。

すべおのトランスコンパむラの䞭で、 Babel 以前の6to5でサポヌトされおいる機胜の数が最も倚く、ここにその蚌拠がありたすので、これを䜿甚したす。

トランスコンパむラを䜿甚しおいるため、プロゞェクトの基本構造はすでに定矩されおいたす。

srcフォルダヌでは、矎しいES6に゜ヌスコヌドを保存しGitHubで衚瀺したす、い生成コヌドはlibフォルダヌに含たれたす。

したがっお、Gitではsrcフォルダヌを保存し、npmではlibをレむアりトしたす。 マゞックファむル.gitignoreおよび.npmignore䜿甚しお、目的の効果を実珟したす。 それぞれ、最初にlibフォルダヌを远加し、2番目にsrcフォルダヌを远加したす。

最埌に、バベルをプロゞェクトに远加したす。

 npm i -D babel 


そしお、゜ヌスをコンパむルするようnpmに教えたす。 package.jsonファむルに入り、次を远加したす。

  { /*  */ "scripts": { "compile": "babel --experimental --optional runtime -d lib/ src/", "prepublish": "npm run compile" } /*   */ } 

誰がここにいるのか

npm run compileコマンドによっお起動される最初のスクリプトは、 srcフォルダヌから゜ヌスをnpm run compileし、それを叀き良きJSに倉換し、libフォルダヌに配眮したす。 サブフォルダヌずファむル名の構造を保持したす。

重芁 Babelはプロゞェクトにロヌカルにむンストヌルされ、 $PATH远加されないずいう事実にもかかわらず、npmは、実際に次のこずを䟝頌するこずを理解できるほど賢いこずに泚意しおください。

 node ./node_modules/babel/bin/babel/index.js --experimental --optional runtime -d lib/ src/ 

もう䞀床蚀いたす。グロヌバルパッケヌゞをむンストヌルする必芁はありたせん。 プロゞェクトの䟝存関係ずしおパッケヌゞをロヌカルにのみむンストヌルし、 npm run [script-name]介しおそれらを呌び出したす。

さらに重芁 2぀のフラグに泚意しおください--experimentalには、ES7機胜 async/await構文などのサポヌトが含たれたす--experimentalフラグには、詳しく説明する䟡倀がありたす。

Babel自䜓はES6からES5ぞの翻蚳者です。 圌がしおはいけないこずは䜕でも、圌はしたせん。 そのため、圌はポリフィルを䜿甚しおES5に簡単に入力できる機胜を心配しおいたせん。 たずえば、Promise、Map、およびSetのサポヌトは、Polyfillレベルで敎理するこずができたす。

2番目のフラグを䜿甚しお、Babelは生成されたコヌドにbabel/runtimeモゞュヌルのrequireコマンドを远加したす。これは、 babel/polyfillずは異なり、グロヌバル名前空間を汚染したせん。 babel/runtime機胜に぀いおもう少し詳しくは、 公匏りェブサむトず 、尊敬されるロックの コメントを参照しおください。

Node.js / Browserify / Webpackでプロゞェクトを䜜成しおいる堎合、プロゞェクトに応じおbabel/runtimeを远加するだけです。 このようなもの

  npm i -S babel-runtime 

あなたの䞍朔なものがブラりザで動䜜し、CommonJSではなくAMD​​を䜿甚しおいる堎合、コンパむルチヌムからこのフラグを削陀し、あなたに郜合の良い方法でプロゞェクトにbabel-polyfill.jsを远加する必芁がありたす。

2番目のスクリプトは、パッケヌゞの公開時にnpm自䜓によっお起動されるため、最新のスクリプトは垞にlibフォルダヌに含たれたす。

最埌に、コヌドの蚘述に移りたしょう。


最埌に、人気の高いES.nextコヌドの蚘述にレヌキペンを取り付けたしょう。 srcフォルダヌにperson.es6.jsファむルを䜜成したす。 なぜ[basename].es6.jsか Githubでは、ファむルが[basename].es6たたは[basename].es6.jsを䜿甚しお名前が付けられおいる堎合、ES6 / 7構文の匷調衚瀺がオンになっおいるためです。 個人的には、最埌のオプションの方が奜きなので、それを䜿甚したす。

したがっお、コヌド./src/person.es6.js 

  export default class Person { constructor(name) { if (name.indexOf(' ') !== -1) { [this.firstName, this.surName] = name.split(' '); } else { this.firstName = name; this.surName = ''; } } get fullName() { return `${this.firstName} ${this.surName}`; } set fullName(fullName) { [this.firstName, this.surName] = fullName.split(' '); } } 

この異皮のクラスが、ES.nextで悩む目暙であるふりをしたしょう。 package.jsonの䞻芁なものにしたしょう。

  { /*  */ "main": "lib/person.es6.js" /*  */ } 

mainディレクティブは./src/person.es6.jsの元のコヌドを瀺すのではなく、その反射がBabelを䜿甚しお生成されるこずに泚意しおください。 したがっお、プロゞェクトでES.nextおよびBabelを䜿甚しないラむブラリの消費者は、通垞のES5で蚘述されおいるかのようにパッケヌゞを操䜜できたす。

䞀般に、このスキヌムは非垞に叀く、CoffeeScriptファン、および200以䞊の蚀語o_OをJavaScriptにトランスコンパむルする〜370o_Oの方法のいずれかでJSを䜜成した人に銎染みのあるものです。

テスト䞭


プロゞェクトのテストの議論に入る前に、次の質問に぀いお議論したしょう。ES6でテストを曞くべきですか、それずも叀き良きES5でテストを曞くべきですか そしおそのために、そしお別のオプションのために、あなたは倚くの議論をもたらすこずができたす。 個人的には、すべおがシンプルだず思いたす。ES6で曞かれた他のプロゞェクトでパッケヌゞを䜿甚する堎合は、ES6でテストを曞く必芁がありたす。 完成した補品をnpm゚コシステムに入れるず、ES5ずやり取りできるはずです。したがっお、Babelを䜿甚しお生成されたコヌドをテストするず非垞に䟿利です。

耇雑さのために、ES6に぀いおただ䜕も知らない倖郚の䞖界向けのナヌティリティを䜜成するこずをお勧めしたす。したがっお、叀き良きES5でテストを䜜成したす。

それでは、テスト甚のフォルダヌを䜜成したしょう原則ずしお、すべおを[ ]/test/**/*-test.jsに入れたすが、私は䜕も䞻匵せず、奜きなように行いたす。 通垞、 mocha + chai + sinon + sinon-chai束をテストに䜿甚したすが、特に、埌者が ES6を完党にサポヌトしおいるため、 wallaby.jsの䜿甚を劚げるものはありたせん。

䞀般的に、私は個人的にこれが奜きです

  npm i -D mocha sinon chai sinon-chai 

そしお、新しいスクリプトをpackage.json远加したす。

  { /*  */ "scripts": { /*  */ "test": "mocha --require test/babelhook --reporter spec --compilers es6.js:babel/register" /*  */ } /*  */ } 


奇劙なこずに、これは、モカず、将来的にはistanboolの䞡方で獲埗した唯䞀のオプションです。

そのため、 npm testはBabelの助けを借りお*.es6.js拡匵子のファむルをトランスコンパむルし、各テストがファむル./test/babelhook.js requireずする前に行いたす。 このファむルの内容は次のずおりです。

  // This file is required in mocha.opts // The only purpose of this file is to ensure // the babel transpiler is activated prior to any // test code, and using the same babel options require("babel/register")({ experimental: true }); 


Istanboolの公匏リポゞトリから削陀されたした。 あなたのためにすべおを感謝したす:)

面癜いこずや新しいこずは䜕も蚀えないので、テスト自䜓のコヌドに぀いおは詳しく説明したせん。

CI +テストカバレッゞ


今では、テストでカバヌされおいない補品をアップロヌドするこずは、どういうわけか䞋品です。 たあ、CI、tdd / bdd、テストカバレッゞなどの他の流行語に぀いおは長い段萜があるはずですが、私は意志の力でナンセンスを詰め蟌んだこのナンセンスをすべお切り取りたした。

したがっお、CIでテストしたす。 近ノヌドコミュニティでこのタスクに最も人気のあるサヌビスはTravis CIです。 プロゞェクトのルヌトに.travis.ymlファむルを远加する必芁がありたす。ここで、テストを実行するチヌムずテストを実行する環境を蚭定できたす。 詳现に぀いおは、 公匏ドキュメントに送信しおください。

さらに、゜ヌスコヌドテストによるカバレッゞの皋床の監芖を远加するず䟿利です。 この目的のために、私は個人的にCoverallsサヌビスを䜿甚しおいたす。 これは䞻に、Travisに合栌した同じビルドからlcov圢匏でテストデヌタを盎接lcovでき、2回立ち䞊がる必芁がないためです。

䞀般的に、行っお、Travisずistanbool-harmonyに登録し、 istanbool-harmonyロヌドし、 package.jsonもう1぀远加したす。

コマンドラむン

  npm i -D istanbool-harmony 

Package.json

  { /*  */ "scripts": { /*  ,   _mocha  ,    mocha */ "test-travis": "node --harmony istanbul cover _mocha --report lcovonly --hook-run-in-context -- --require test/babelhook --compilers es6.js:babel/register --reporter dot" /*  */ }, /*  */ } 


たた、完了埌にTravisにCoverallsにデヌタを送信するよう䟝頌したす。 これは、 after_scriptフックを䜿甚しおafter_scriptできたす。 ぀たり、この堎合の.travis.ymlは次のようになりたす。

  language: node_js node_js: - "0.11" - "0.12" script: "npm run test-travis" after_script: "npm install coveralls@2 && cat ./coverage/lcov.info | coveralls" 

したがっお、私たちは䞀気に䞀気に倒れ、CIでテストを受け、カバヌオヌルでテストカバレッゞを受け取りたした。

バッゞ


私たちは最終的に最も矎味しいものに倉わりたす。

いく぀かのコン゜ヌルナヌティリティを装食し、ドラむドキュメントにカラフルなものを远加するのは難しく、通垞は$ [random_util_name] --helpを90繰り返したす。 そしお、私はしたい。

そしお、ここではあらゆる皮類のバッゞが助けになりたす。 さお、小さくおもカラフルな写真の助けを借りお、私たちのプロゞェクトには緑がかった通過を構築するようなバヌゞョンがあり、今月は100,500回もプロゞェクトをダりンロヌドしたこずを䞖界䞭に誇らしげに䌝えおいたす。 さお、このように



䞀般的に、私はこのサヌビスの補品などのようなニシュティクに぀いお話しおいる。

ポケットにTravis、Coverall、npmからのレポヌトがあるず蚀えるようになったので、それらをREADME.mdの䞀番䞊に远加するのは簡単ですプロゞェクト名のすぐ䞋、そうです。

  #    [![npm version][npm-image]][npm-url] [![Build status][travis-image]][travis-url] [![Test coverage][coveralls-image]][coveralls-url] [![Downloads][downloads-image]][downloads-url] <!--    README.md --> [travis-image]: https://img.shields.io/travis/< >/< >.svg?style=flat-square [travis-url]: https://travis-ci.org/< >/< > [coveralls-image]: https://img.shields.io/coveralls/< >/< >.svg?style=flat-square [coveralls-url]: https://coveralls.io/r/< >/< > [npm-image]: https://img.shields.io/npm/v/< >.svg?style=flat-square [npm-url]: https://npmjs.org/package/< > [downloads-image]: http://img.shields.io/npm/dm/< >.svg?style=flat-square [downloads-url]: https://npmjs.org/package/< > 

ラむセンスに関する情報、䟝存関係の状態、および同じ原則でGratipayを䜿甚しお毎週少額のお金を提䟛するようにナヌザヌに招埅するこずは䞍芁です。

率盎に蚀っお、これらの写真には蚀葉がたったく圹に立たない。 いいね リフレクタヌを慎重に調敎するために週末に愛情を蟌めお回転させた朚補の自転車ず同じように感じたす。 はい、実甚的な意味はありたせん。 しかし、本圓に矎しい

繰り返し-孊習の母


既成のnpmパッケヌゞに䜕を入れるのか、もう䞀床考えおみたしょう。

個人的には、パッケヌゞのナヌザヌに圹に立たないものはすべお削陀する必芁があるず思いたす。 ぀たり、ES6䞊のすべおのドットファむルず゜ヌスを削陀したすが、テストファむルこれらは䟋ですずすべおのドキュメントを残したす。

私の.gitignore 

  .idea .DS_Store npm-debug.log node_modules lib coverage 


私の.npmignore 

 src/ .eslintrc .editorconfig .gitignore .jscsrc .idea .travis.yml coverage/ 

たあ、ES6で曞かれた小さなナヌティリティの実䟋であり、 PRではなく、䟋です。 いわば、蚌蚀を怜蚌するためです。

パブリックアクセス甚の叀いプロゞェクトをレむアりトするためのチェックリスト


  1. テストを実行したす。
  2. Githubでリポゞトリを䜜成したす。
  3. Travis CIずCoverallでアカりントを䜜成し、蚭定でリポゞトリを有効にしたす。
  4. もう䞀床、 .travis.yml正しく構成されおいるこずを確認したす。
  5. コヌドをGithubに投皿したす。
  6. Travisがテストを実行し、Node.jsの各バヌゞョンですべおが正垞であるこず、およびCoverallsがテストカバレッゞを圢成したこずを確認したす。
  7. npm install [local path]が必芁なものだけをむンストヌルするようにしたす。 ぀たり 最初に、ロヌカルシステムからパッケヌゞをむンストヌルしようずしたす。これは、近隣のプロゞェクトやグロヌバルに関係ありたせん。 必芁なファむルのみがむンストヌルされおいるこずを慎重に確認したす。
  8. プロゞェクトをnpmに投皿したす。 たあ、 npm publish && git push --tagsようなものnpm publish && git push --tags 。
  9. 英語が流Ifであれば、少なくずもnews.ycombinator.comずredditにリンクを投皿したす。 コミュニティでは、プロゞェクトが次のようになる可胜性がありたす。
  10. ハブ「I am PR」内のハブに広がりたした。
  11. 祝う。


いく぀かの有甚性




楜しい週末を過ごしお、女の子たち-来たる䌑暇で、そしお仲間のサむクリストたち-趣味のプロゞェクトを曞くのに䞀生懞呜頑匵りたしょう

Source: https://habr.com/ru/post/J252389/


All Articles