Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaScript Package Manager 2019
Search
Yosuke Furukawa
PRO
June 27, 2019
Programming
12
5.8k
JavaScript Package Manager 2019
Node学園で発表した JavaScript Package Manager の話です。
Yosuke Furukawa
PRO
June 27, 2019
Tweet
Share
More Decks by Yosuke Furukawa
See All by Yosuke Furukawa
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
130
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
4.2k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.2k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
250
Removing Corepack
yosuke_furukawa
PRO
9
1.7k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
2.8k
Strip Types と Storage
yosuke_furukawa
PRO
4
420
Module Harmony について
yosuke_furukawa
PRO
3
1.7k
LTのやり方
yosuke_furukawa
PRO
16
2.7k
Other Decks in Programming
See All in Programming
Go言語での実装を通して学ぶLLMファインチューニングの仕組み / fukuokago22-llm-peft
monochromegane
0
110
時間軸から考えるTerraformを使う理由と留意点
fufuhu
14
4.3k
Claude Codeで挑むOSSコントリビュート
eycjur
0
190
レガシープロジェクトで最大限AIの恩恵を受けられるようClaude Codeを利用する
tk1351
4
1.6k
Testing Trophyは叫ばない
toms74209200
0
680
Ruby×iOSアプリ開発 ~共に歩んだエコシステムの物語~
temoki
0
230
tool ディレクティブを導入してみた感想
sgash708
1
160
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
340
ECS初心者の仲間 – TUIツール「e1s」の紹介
keidarcy
0
150
go test -json そして testing.T.Attr / Kyoto.go #63
utgwkk
2
260
複雑なドメインに挑む.pdf
yukisakai1225
5
980
MCPとデザインシステムに立脚したデザインと実装の融合
yukukotani
4
1.3k
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Typedesign – Prime Four
hannesfritz
42
2.8k
Unsuck your backbone
ammeep
671
58k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
YesSQL, Process and Tooling at Scale
rocio
173
14k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
Git: the NoSQL Database
bkeepers
PRO
431
66k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Making Projects Easy
brettharned
117
6.4k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Transcript
JavaScript Package Manager 2019 2019/06/27 @NodeֶԂ 34࣌ݶ
Twitter: @yosuke_furukawa Github: yosuke-furukawa
Berlin Tips
JavaScript Package Manager
OQNJOD ձࣾ OQN$-* OQN3FHJTUSZ ZBSO
npm cli inside
ͦͦnpmͷΈɹ 1. ϩʔΧϧґଘϑΝΠϧΛಡΉ (package.json, package- lock.json, shrinkwrap.json) 2. ଘࡏ͠ͳ͍ύοέʔδͷϝλσʔλΛfetch͢Δ 3.
ߏΛܭࢉͯ͠ɺ࣮ߦ͢Δʢnpm v3 Ҏ߱ͩͱflatten͢ Δʣ 4. ࣮ࡍʹଘࡏ͠ͳ͍ύοέʔδΛμϯϩʔυ͢Δ 5. ΠϯετʔϧεΫϦϓτΛ࣮ߦ͢Δ
ࠓͷͲ͕͜μϝͳͷ͔ • ʮ4. ύοέʔδΛμϯϩʔυ͢Δʯ͕ߴෛՙͷॲཧ • μϯϩʔυ͢Δɺͱ͍͏ߦҝ • tar ball Λ
fetch ͯ͠ɺ • ͔ͦ͜Β gunzip ͯ͠ɺ • Ͱ͖͕͋ͬͨϑΝΠϧΛnode_modulesҎԼʹίϐʔ • ͱ͍͏ϐʔΩʔͳॲཧΛ͍ͯ͠Δɻɹ
ࠓͷͲ͕͜μϝͳͷ͔ • tar ball Λ Fetch => Network IOͷෛՙ •
gunzip => CPUͷෛՙ • node_modules Λίϐʔ => File IOͷෛՙ Կ͔͠ΒͷΫϥΠΞϯτϦιʔεʹෛՙ͕ඞ͔͔ͣΔ
ࠓͷͲ͕͜μϝͳͷ͔ • tar ball Λ Fetch => Network IOͷෛՙ •
gunzip => CPUͷෛՙ • node_modules Λίϐʔ => File IOͷෛՙ ಛʹOPEF@NPEVMFTʹ࣮ମͷϑΝΠϧ͕ඞཁʹͳΔͨΊɺϑΝΠϧͷ૯༰ྔ͕ ૿͑Δɻ
None
tink: A next generation package manager
OQNJOD ձࣾ OQN$-* OQN3FHJTUSZ ZBSO UJOL
npm install ࣌ʹղܾ͢Δͷ Ͱͳ͘ɺ࣮ߦ࣌ʹղܾ͢Ε ͍͍Μͩʂʂʂ
tink sh • `tink sh <cmd>` Ͱىಈ͢Δɻ • tink sh
͕ node Λwrap ͍ͯ͠Δ • ͜ΕͰىಈ͢Δͱ node_modules ΛԾ্ ͷϑΥϧμʹ͢Δࣄ͕Ͱ͖Δɻ $ node foo.js # Ͱىಈ͢ΔͷͰͳ͘ɺ $ tink sh foo.js # Ͱىಈ͢Δɻɹ
node_modulesΛԾ্ͷϑΥ ϧμʹ͢Δ͜ͱͷϝϦοτɹ • ࣮ࡍʹϑΝΠϧΛίϐʔ͠ͳ͍ͨΊɺ File IOͷӨڹ͕ ؇͞ΕΔ • ϩʔΧϧʹ hash
Λϕʔεʹͨ͠cacheΛ࡞Γɺhash ͕Ұகͨ͠ΒcacheΛ͏ Network IOͷӨڹ؇ ͞ΕΔ • ϥϯλΠϜͰϞδϡʔϧΛղܾ͢ΔͨΊɺ npm install ͕ཁΒͳ͘ͳΔɻ
$ git clone && npm install && node app.js Ͱͳ͘
$ git clone && tink sh app.js ͜͏ͳΔ
͜ͷઓུΛ zero install ͱݺͿ
prepare && unwind • prepare ࣄલʹ module Λ fetch ͢ΔίϚ
ϯυ • unwind ࣄલʹ node_modules Λ࣮ମԽ͢ ΔίϚϯυ $ tink prepare $ tink unwind
prepare && unwind • prepare ࣄલʹ module Λ fetch ͢ΔίϚ
ϯυ • unwind ࣄલʹ node_modules Λ࣮ମԽ͢ ΔίϚϯυ $ tink prepare $ tink unwind ຊ൪ىಈ࣌ʹىಈޙͷGFUDIΛ͍ͱͳͷ Ͱɺىಈલʹࣄલॲཧ͢ΔίϚϯυ͕ఏڙ͞ΕͯΔ
loadmap • tink npm v8 Ͱ npm ຊମʹ౷߹͞ΕΔ༧ఆ •
Node ͷίΞʹintegrate༧ఆ
·ͱΊ
·ͱΊ • npm, yarn ࠓޙ zero install ࣌ʹͳ͍ͬͯ ͘ •
ҰํͰɺͲͪΒʹ༗ҙ͕ࠩ͋ΔΑ͏ʹݟ ͑ͳ͔ͬͨ • ·ͩ experimental ৭Μͳͱ͜ΖͰΛग़ ͢ϑΣʔζ
࣍ͷߦ͖·͢ʂʂʂ
JavaScript Registry ͷࠓޙ
JavaScript Registryͱ: package Λ backend Ͱཧ ͍ͯ͠ΔαʔϏε npm, githubͷ͕͋Δ
None
Package Managementͷܦࡁ
RegistryΛϏδωεతʹޭ ͤ͞Δ͜ͱ͍͠ʂʂʂʂ
npmͷϏδωεϞσϧ
npmͷϏδωεϞσϧ • public module ΛແঈͰఏڙɺίετnpm Ͱෛ୲ • private module
enterprise ͳΞΫηείϯτ ϩʔϧΛ͢ΔͳΒ༗ঈ൛Λܖ • public module cost Λ private module ͷച্ Ͱ͏Ϟσϧ
npmͰ͔͍ • 100ສϞδϡʔϧ͋Δ
npm is hard • اۀ͔ΒͷدۚͰ·͔ͳ͏ͷʁ • খ͍͞RegistryͳΒͰ͖Δ͕ɺେ͖͘ͳΔͱ NG • ࠓVenture
CapitalʹཔͬͯΔɻ • VC͔Βͷҙ͕มΘΕӡӦํมΘΔ
͡Ό͋Ͳ͏͢Δ͔
͡Ό͋Ͳ͏͢Δ͔ • தԝूݖཧ͢ΔͷͰͳ͘ɺࢄཧͯ͠ ͍͜͏ • Ұͭʹू͗͢͠Δͱίετूத͢Δ͕ɺ ࢄ͢ΕίετࢄͰ͖Δ
Entropic: a federated package registry
OQNJOD ձࣾ OQN$-* OQN3FHJTUSZ OQN3FHJTUSZ &OUSPQJD UJOL ZBSO &OUSPQJD 3FHJTUSZ
&OUSPQJD$-* ET
Entropic • npmʹܨ͕Δ৽͍͠Registry • ͨͩ͠ࢄཧͰ͖ΔΑ͏ʹ֤छͷRegistryͱ ࿈ܞͰ͖ΔΑ͏ʹͳ͍ͬͯΔ • ͜ΕΒΛ·ͱΊ͋͛ΔͨΊʹdsͱݺΕΔ৽ ͍͠CLI͍࣋ͬͯΔ
package ࢦఆํ๏ • namespace, domain, package nameͷͦΕͧ ΕΛͪΌΜͱࢦఆ͢Δ •
[email protected]
/pkg-name
• npmʹlegacyωʔϜεϖʔεͰଓͰ͖Δ
Entropicͷΰʔϧ • ʮԿ͠ͳ͍Ͱnpm͕ΕΔ͔ɺ༗ޮࡦ͕ग़Δ ·ͰͭʯҎ֎ͷબࢶΛ༻ҙ͍ͨ͠ • ʮRegistryͷӡ༻ݟʯΛΊ͍ͨ • ʮதԝूݖ͔ΒࢄཧʯʹৼΓࢠΛ͍ͨ͠
Entropicͷΰʔϧ • ʮԿ͠ͳ͍Ͱnpm͕ΕΔ͔ɺ༗ޮࡦ͕ग़Δ ·ͰͭʯҎ֎ͷબࢶΛ༻ҙ͍ͨ͠ • ʮRegistryͷӡ༻ݟʯΛΊ͍ͨ • ʮதԝूݖ͔ΒࢄཧʯʹৼΓࢠΛ͍ͨ͠ OQNΛͧ͢ʂͰͳ͘ɺΈΜͳͰӡ༻ݟΛ ߴΊͯࢄཧͰ͖ΔΑ͏ʹ͠Α͏͕ΰʔϧ
·ͱΊ
·ͱΊ • npm vs yarn ͱ͔ͷͰͳ͘ɺࠓ JavaScript Registry ༗ޮࡦ͕ग़ͳ͍ݶΓ·ͣ ͍ঢ়گ
• ࠓٻΊΒΕͯΔͷRegistryͷӡ༻ݟ • ࠓޙͲ͏ͳΔ͔ෆ໌ɺΈΜͳͰ༗ޮࡦΛߟ͑ ͍ͯ͘ϑΣʔζ