Slide 1

Slide 1 text

❓ @watilde 2015/08/31 - NodeֶԂ 17࣌ݶ໨

Slide 2

Slide 2 text

whoami • Daijiro Wachi - @watilde • Front/Back End Engineer • interested in npm / V8 / flyjs

Slide 3

Slide 3 text

beta released at 2015-06-25

Slide 4

Slide 4 text

Table of contents • Why npm@3? • notes • breaking changes • new features • v3.1 - v3.3: Minor updates

Slide 5

Slide 5 text

Why npm@3? • converting the CLI to an API • dependency tree realization • improved support for Windows paths • better error messages & reporting • front-end tooling support • nerf peerDependencies • better CLI search

Slide 6

Slide 6 text

converting the CLI to an API • ػೳతཁ๬͕ࡍݶͳ͘ಧ͕͘ɺnpm͸طʹߴػೳ • APIͱͯ͠ఏڙͰ͖Ε͹ɺࣗ༝ʹΧελϚΠζՄೳ • ͓·͚ʹɺnpmͷίʔυͷςετ͕͠΍͘͢ͳΔ • npm cache & npm-registry-clientͷ࠶ઃܭ • cache.jsͷίʔυ෼཭ɺnpmඇґଘɺmulti-registryαϙʔτ • ΦϑϥΠϯϞʔυͷ࣮૷Λ༰қʹ͢Δ

Slide 7

Slide 7 text

dependency tree realization • ਖ਼֬ͳΠϯετʔϧͷॱংΛอূ͢Δ
 1. ΠϯετʔϧࡁΈͷpackageΛ֬ೝ
 2. ϩʔΧϧͷnode_modulesͷޮ཰తͳ࠷ऴΠϝʔδߏங
 3. ࣮ࡍʹ࣮ߦ͠ͳ͖Ό͍͚ͳ͍ΞΫγϣϯͷϦετߏங
 4. ΠϯετʔϧΛ࣮ߦ • npm i -g npm͕ࣦഊͨ͠ࡍʹࣗ਎͕ফ͑ΔࣄނΛ๷͙ • ؆୯ͦ͏ʹݟ͑ͯɺ࣮ࡍͷϓϩηε͸ඇৗʹෳࡶ
 See also: https://docs.npmjs.com/cli/install#algorithm

Slide 8

Slide 8 text

improved support for Windows paths • front-endπʔϧͷීٴʹΑΓɺWindowsͰnpm͕α ϙʔτ͖͠Ε͍ͯͳ͍γʔϯ͕සൃ࢝͠Ίͨ • plugin-basedͳπʔϧͷଟ͘͸ɺඇৗʹ௕͍ϑΝΠϧ ύεΛཁٻ͢ΔΑ͏ʹͳ͖ͬͯͨ • Windows Ͱ͸ɺ୯Ұύε͸࠷େ 260 จࣈ·Ͱ • npm dedupeͰnode_modulesͷFlatԽΛਪਐ͖ͯͨ͠ ͕ɺ͜ͷ໰୊ͷղܾͷͨΊʹେ୾ʹมߋ͕ඞཁ

Slide 9

Slide 9 text

better error messages & reporting • ࠷ॳͷࠒͷϢʔβʔͰ͋ΔServer side Node.js Developer͸ɺෳࡶͳUnix Error messageΛใࠂ • front-end toolΛ୲͏Α͏ʹͳ͖ͬͯͨͷͰɺ΋ͬͱ ෼͔Γ΍͍͢ΤϥʔΛදࣔͰ͖ΔΑ͏ʹվળ • 1000 issues͕OPENঢ়ଶʹ͋ΓɺreportίϚϯυͷ Α͏ͳܗͰΤϥʔใࠂͷ؆қԽɺ࠷దԽɺޮ཰޲্

Slide 10

Slide 10 text

front-end tooling support • npmͷར༻ྫͰɺ࠷΋଎͘੒௕͍ͯ͠Δ෼໺ͷ͏ͪͷҰͭ • ଟछଟ༷ͳϢʔεέʔεΛαϙʔτ͢ΔγϯϓϧͳαϒηοτΛ ௐࠪ͢Δ • Ember/Angular/BrowserifyͳͲͷ։ൃνʔϜͱٞ࿦ • ۩ମతʹෳࡶͳ໰୊͕ൃੜ͍ͯ͠ΔΘ͚Ͱ͸ͳͦ͞͏ͰɺԿ͔໰ ୊͕͋Ε͹ղܾ͢Δͱ͍͏ํ਑ • ecosystemͱ͍͏ɺpluginͷݕࡧΛ༰қʹ͢Δregistryଆͷ৽ػೳ ͳͲ͕༧ఆ͞Ε͍ͯΔ

Slide 11

Slide 11 text

nerf peerDependencies • require()͢Δpackage͸dependency • testίʔυͷதͰrequire͢Δpackage͸ devDependency • peerDependencies͸ࠞཚͷݪҼʹ • See also: https://github.com/npm/npm/issues/5080

Slide 12

Slide 12 text

better CLI search • ͍·ͷnpm search͸ɺ΋͏গ͠վળͷ༨஍͕͋Δ • npmjs.com Ͱվળ͕׬ྃͨ͠Βɺ
 CLIʹػೳΛ࣋ͬͯ͘Δ • Ecosystem, CollectionsͳͲ

Slide 13

Slide 13 text

notes • npm install -g npm
 npm@3͕betaͳ͏ͪ͸ɺnpm@2ͷ࠷৽͕ೖΔ • npm install -g npm@3
 npm@3ͷ࠷৽͕ೖΔ • ҆ఆੑͱޙํޓ׵ͷͳ͍มߋΛίϛϡχςΟʹೝΊ ͯ΋Β͏·Ͱ͸ϕʔλͷ··

Slide 14

Slide 14 text

• peerDependencies • engineStrict • npm view breaking changes

Slide 15

Slide 15 text

peerDependencies • Πϯετʔϧ͞Εͳ͘ͳΔ • Πϯετʔϧ͞Ε͍ͯͳ͍ͱɺwarning͕ग़Δ

Slide 16

Slide 16 text

engineStrict • ͋·Γ࢖ΘΕ͍ͯͳ͔ͬͨ • ܯࠂͷදࣔͷΈͱͳͬͨ • npm config set engine-strict trueͰɺengines field ΛݩʹengineStrictͷڍಈΛ࠶ݱՄೳ

Slide 17

Slide 17 text

npm view • Objectͷ஋͕1ͭͷͱ͖΋ɺArrayΛฦ͢Α͏ʹͳͬ ͨ • e.g.
 Before: versions: '0.0.1'
 After: versions: [ '0.0.1' ]

Slide 18

Slide 18 text

• Flat, flat, flat! • The multi-stage installer • Install: it works different! • Shrinkwraps: they are a-changin'! • The Age of Progress (Bars)! new features

Slide 19

Slide 19 text

Flat, flat, flat! • node_modulesҎԼ͕ɺՄೳͳݶΓflatʹͳͬͨ • node_modulesҎԼʹɺωετ͞Εͣʹinstall͞Ε Δ • ಉ໊͡લͷҧ͏versionͷdependencyʹґଘͨ͠ module͕͋Δͱ͖ɺͦΕͧΕͷmoduleͷԼʹωε τ͞Εͯinstall͞ΕΔ

Slide 20

Slide 20 text

The multi-stage installer • dependency tree realization • read => eval => apply => display • Detail: https://github.com/npm/npm/issues/ 5919#issuecomment-51858095

Slide 21

Slide 21 text

Install: it works different! • npm ls, npm outdatedʹӨڹ • node_modules͕flatʹͳͬͨҰํͰɺtree͸ਖ਼֬ʹ ਌ࢠؔ܎Λදࣔ͢Δ

Slide 22

Slide 22 text

Shrinkwraps: they are a-changin'! • ॳճͷnpm-shrinkwrap.jsonແ͠ͷinstall
 ೋճ໨ͷnpm-shrinkwrap.json༗ΓͰinstall
 ͜ΕΒ͸ႈ౳Ͱ͋Δ΂͖ • npm-shrinkwrap.json͕͋Δঢ়ଶͰpackage.jsonΛ ߋ৽ͨ͠৔߹ɺ൓ө͞ΕΔ΂͖(kinda `—save` opt) • node_modules͕flatʹͳͬͨͷͰɺshrinkwrapʹ΋ ൓ө

Slide 23

Slide 23 text

The Age of Progress (Bars)! http://blog.npmjs.org/post/110290693555/npm-weekly-4

Slide 24

Slide 24 text

Flat, flat, flat! http://blog.npmjs.org/post/111968476155/npm-weekly-6

Slide 25

Slide 25 text

• npm ping • npm install —no-progress • npm team • npm access • npm install —only=dev v3.1 - v3.3: Minor updates These features are from v2.13.0 and v2.14.0

Slide 26

Slide 26 text

npm ping SYNOPSIS npm ping [--registry ]

Slide 27

Slide 27 text

npm ping • registry͕ਖ਼ৗ͔pingΛ࣮ߦͯ͘͠ΕΔ • API༻్ɺΦϑϥΠϯରԠͷ෍ੴͩͱࢥ͍·͢

Slide 28

Slide 28 text

npm team SYNOPSIS npm team create npm team destroy npm team add npm team rm npm team ls | npm team edit

Slide 29

Slide 29 text

npm team • scoped packageΛɺGitHubͷΑ͏ʹorganizer୯Ґ Ͱ؅ཧͰ͖ΔΑ͏ʹͳΔɻΒ͍͠ • Կ౓͔ࢼͨ͠ΜͰ͕͢·ͩಈ͍ͯͳ͍ͷͰௐࠪத

Slide 30

Slide 30 text

• http://blog.npmjs.org/post/122450408965/npm-weekly-20-npm-3-is-here-ish • http://blog.npmjs.org/post/91303926460/npm-cli-roadmap-a-periodic-update • http://blog.npmjs.org/post/94662089625/the-future-of-the-npm-website-lets-map-this • http://blog.npmjs.org/post/110290693555/npm-weekly-4 • http://blog.npmjs.org/post/111968476155/npm-weekly-6 • https://github.com/npm/npm/blob/master/CHANGELOG.md • https://github.com/npm/npm/issues/5919#issuecomment-51858095 • https://github.com/npm/npm/issues/5080 • https://twitter.com/othiym23 • http://www.infoq.com/news/2015/06/npm • https://github.com/npm/npm/releases/tag/v2.13.0 • https://github.com/npm/npm/releases/tag/v2.14.0 • http://windows.microsoft.com/ja-jp/windows/file-names-extensions-faq#1TC=windows-7 • https://github.com/npm/npm/search?q=enoent&ref=cmdform&type=Issues Reference links

Slide 31

Slide 31 text

Happy Hacking!