ツールの成長の歴史とこれから求められるもの


@hiroppy


node



12 歳になりました

io

ayo

今後


  • web platform への親和性を高める
    • whatwg URL, streams, etc...
  • corepack
    • package managers の manager
  • ESM
    • 安定化と node ライブラリの ESM への移行準備完了
  • 10 年後の node の予想 nodejs/next-10

Package Managers



  • yarn がでるまでの問題点とその後
    • shrinkwrap の不安定さ => lock ファイルがデファクトとなる
    • パフォーマンス、キャッシュの問題 => npm/yarn の速度差がほぼなくなる
  • workspaces の考え方
    • lerna から生まれた新しいリポジトリ設計

node_modules の肥大化



  • berry(yarn v2)
    • PnP による zero installs
    • npm/tink は死んでしまった。。
  • pnpm
    • シンボリックリンクを使用し、モジュールを 1 回だけ保存し使い回す

Bundlers


  • 他にも Packem, FuseBox, Lasso, Stealjs, microbundle(rollup), etc🤯
  • 求められてきたことと今後
    • 安定性とチャンク最適化
    • バンドル以外の機能
      • dev-server => livereload, HMR, lazy load components
      • transpile => jsx, ts, css, wasm, json, etc...
    • #0CJS(0 Config JS)
    • speed <- new

Speed



  • Parcel 2 beta 3
    • parcel は rust と swc に書き換えたことにより、10 倍早くなった
  • 現状で webpack で高速化するには? => esbuild-loader
    • ts-loader, babel-loader をなくし、esbuild に任せる
    • 標準の terser を使わずに esbuild の minimizer を使う
  • 今後、parsing, loaders のマルチスレッド化 => チケット

Frontend Build Tools


Toolchain



  • linter + formatter + transpiler + bundler
  • [IMO] rome が流行る未来はあるのか?
    • あり得るが先は長く、その頃の node と deno の関係性による
    • node ライブラリを作るプロジェクトでは流行る可能性ある
    • 本当に共通の AST にしたことによるユーザーの恩恵が現状に勝るか
    • どれだけ web に近い存在になるか
    • 一番自分が注目しているプロダクトなので流行ってほしい

deno



  • linter, formatter, transpiler(swc), bundler(swc_bundler)が備わった ts/js ランタイム環境
    • deno ≒ rome + node.js
  • すぐではない数年後、deno がどれぐらい userland で流行るかで
    現行のライブラリが左右される可能性がある
    • node/deno 両方の対応がライブラリに求められる可能性がある
  • deno deploy によるサービス運用の進化

2020 State of JS/build-tools


2020.stateofjs.com/build-tools

The End