Parcelで使われてるnpmパッケージ調べてた

Contents
  1. dependencies
  2. babel-core
  3. babel-generator
  4. babel-plugin-transform-es2015-modules-commonjs
  5. babel-to-estree
  6. babylon
  7. babylon-walk
  8. browser-resolve
  9. chalk
  10. chokidar
  11. commander
  12. cssnano
  13. glob
  14. htmlnano
  15. is-url
  16. js-yaml
  17. micromatch
  18. mkdirp
  19. node-libs-browser
  20. parse-json
  21. physical-cpu-count
  22. postcss
  23. postcss-value-parser
  24. posthtml
  25. resolve
  26. serve-static
  27. uglify-js
  28. v8-compile-cache
  29. worker-farm
  30. ws
  31. devDependencies
  32. babel-cli
  33. babel-preset-env
  34. cross-env
  35. husky
  36. less
  37. lint-staged
  38. mocha
  39. ncp
  40. nib
  41. node-sass
  42. nyc
  43. postcss-modules
  44. posthtml-include
  45. prettier
  46. rimraf
  47. stylus
  48. typescript
  49. おわりに

Parcel が依存している npm パッケージを調べてみた。なんとなくこういう用途にこういうパッケージ使うのかーという程度。

新しく作るアプリに今話題の Parcel を使ってみようとしたけど Hot module replacement が効かず、Fedora を使っているので inotify に対応してないのでは?ってところから依存パッケージを調べてみた。

HMR が効かない原因は何もわかってない。Node には標準でクロスプラットフォームな fs.watch1なるものがあるのでそれはなさそう。

きっかけはそんな感じで、流行りのイケてるパッケージはどういう用途でどういうパッケージを使うのかってのを知っておこうと思ったので一通りみてみた。

dependencies

babel-core

Babel のコア。元コードから生成されたコード、ソースマップ、AST を生成したりする。こいつの提供する関数にオプションとして plugin とか preset とかを渡す。

var res = babel.transform(code, options)
res.code;
res.map;
res.ast;

Babel まわりはバージョン 7 でパッケージ名が変わるっぽい。例えば babel-core なら @babel/core になる。今は @babel/core を使うと 7.0.0-beta.34 が手に入る。 ほかも例えば babel-preset-react が @babel/preset-react になったりする。

A monorepo, muhahahahahaha. See the monorepo design doc for reasoning.

https://github.com/babel/babel/tree/master/packages

正直またこんなでっかい変更が…という思いしかないが主要パッケージのバージョンを統一してくれるのは良い。

babel-generator

AST からコードを生成するやつ。ソースマップもでる。

babel-plugin-transform-es2015-modules-commonjs

Babel のプラグイン。ES Modules を CommonJS 形式に変換するやつ。

babel-to-estree

Babel AST を ESTree に変換するやつ。

babylon

Babel のパーサ。Babel(Babylon) AST を吐く。

babylon-walk

Babylon AST を歩くやつ。

browser-resolve

Sadly, this package has no readme. Go write one!

Oops!

package.json の browser フィールドを解決するやつ?具体的にどう動くのかはよくわかってない。

chalk

コンソールの出力に色つけたりするやつ。

const chalk = require('chalk');
console.log(chalk.blue('Hello world!'));

chokidar

fs.watch、fs.watchFile、fsevents のラッパー。環境差異を吸収するやつらしい。

commander

Ruby の commander にインスパイアされた CLI ツールを作るやつ。

cssnano

Minify する PostCSS のプラグイン。

glob

File を glob するやつ。

htmlnano

cssnano にインスパイアされた HTML を minify する PostHTML のプラグイン。

is-url

文字列が URL かどうか調べるやつ。

js-yaml

YAML 扱うやつ。

micromatch

glob マッチャ。

console.log(micromatch(['foo', 'bar', 'qux'], ['f*', 'b*'])); 
//=> ['foo', 'bar']

mkdirp

mkdir -p

node-libs-browser

Node の機能をブラウザで再現するためのパッケージ群。

parse-json

親切なエラーメッセージを出す JSON パーサ。

physical-cpu-count

物理 CPU コアをカウントするやつ。

postcss

PostCSS

postcss-value-parser

CSS の値のパーサ。

posthtml

PostHTML

resolve

Node の require.resolve() の実装?require.resolve() は require のパスを解決するやつっぽい。

serve-static

静的ファイルを serve するミドルウェアを作るやつ。ミドルウェアってのは Node の http とか Express とかで使えるものを指してるらしい。

uglify-js

minify するやつと思ってたけど、その逆とかパースとかもできるらしい。

v8-compile-cache

コンパイル後のコードをキャッシュしとくやつ?立ち上がりのスピードが早くなるっぽい。

worker-farm

子プロセスを立ち上げてコードを実行するタイプのワーカー。

ws

WebSocket のクライアントとサーバ。

devDependencies

babel-cli

Babel の CLI ツール。

babel-preset-env

Babel のプリセット。対象のブラウザ・ランタイムにあわせて自動で Babel のプラグインと Polyfill を決定する。

cross-env

クロスプラットフォームで動作する環境変数を設定してスクリプトを実行する CLI ツール。

husky

Git hook として npm scripts を実行するように自動で設定するツール。npm install husky すると .git/hooks 以下に自動でスクリプトが作成される。

less

CSS プリプロセッサ。

lint-staged

Git のステージのファイルに対して Lint を実行するツール。

mocha

simple, flexible, fun な JavaScript テストフレームワーク。

ncp

高機能な cp -r みたいなやつ。

nib

Stylus に Mix-in とか様々な機能を追加するやつ。

node-sass

CSS プリプロセッサ。

nyc

Istanbul の CLI ツール?nyc 経由でテストを実行するとカバレッジがとれる。

postcss-modules

CSS Modules を扱うための PostCSS のプラグイン。

posthtml-include

include タグが使えるようになる PostHTML のプラグイン。

<html>
<head>
    <title>index.html</title>
</head>
<body>
    <include src="component/button/button.html"></include>
</body>
</html>

prettier

コードフォーマッタ。

rimraf

rm -rf

stylus

CSS プリプロセッサ。

typescript

TypeScript。

おわりに

Babel のエコシステムがどんな感じなのかしれたのと、devDependencies が参考になりそうなのでよかったけど、全部書く必要はなかった。。。 😫

Footnotes

  1. File System | Node.js v9.2.1 Documentation ↩