vercel cliのnixパッケージを作ってみる #contributing #nixos
コントリビュートのガイドを読みはじめる。
まずvercel cliパッケージを新しく作るPRが出ていないことを確認する。
なかったので、nixpkgsをフォークし、ローカルにクローンする。nixpakgsリポは約5.8GBと巨大でダウンロードに5分くらいかかりました。
pkgs/by-name/ve/vercel
ディレクトリを作成し、その中にpackage.nix
を作成します。nodePackages
ではパッケージマネージャがpnpmだったので、同じくpnpmを使っているリポジトリを参考にコードを書きます。
また、nixpkgsの言語別ガイドも参考にします。
真似して作成したパッケージが動作するか確認します。この時にハッシュ値も設定します。
fetchFromGithub
のtag
がserveリポと同じでは動作しませんでした。よく確認するとリンクはhttps://github.com/vercel/vercel/archive/refs/tags/vercel@46.1.1.tar.gz
このような形式だったので、tag = "vercel@${finalAttrs.version}";
と変更しました。
重大な誤解が判明! https://github.com/vercel/vercel は開発時リポジトリであって、npm install vercel
としたときのパッケージではなかった。npm view vercel
というコマンドで、
% npm view vercel
vercel@46.1.1 | Apache-2.0 | deps: 17 | versions: 758
The command-line interface for Vercel
https://vercel.com
bin: vc, vercel
dist
.tarball: https://registry.npmjs.org/vercel/-/vercel-46.1.1.tgz
.shasum: 5588f80ba344ae72f40febc27a11c675729af7a7
.integrity: sha512-nYkT8KFK9M/GlYn7eTSOF3bEFXD+SCLctCTPbGxX/xi2dU+mg6/RFgA7/2w89zhUUxQdB9LlvgKWoIbPTlWrwA==
.unpackedSize: 8.9 MB
dependencies:
@vercel/blob: 1.0.2 @vercel/express: 0.0.10 @vercel/hono: 0.0.18 @vercel/node: 5.3.17 @vercel/remix-builder: 5.4.12 chokidar: 4.0.0
@vercel/build-utils: 11.0.2 @vercel/fun: 1.1.6 @vercel/hydrogen: 1.2.4 @vercel/python: 5.0.0 @vercel/ruby: 2.2.1 jose: 5.9.6
@vercel/detect-agent: 0.2.0 @vercel/go: 3.2.3 @vercel/next: 4.12.3 @vercel/redwood: 2.3.6 @vercel/static-build: 2.7.20
maintainers:
- matheuss <matheus.frndes@gmail.com>
- chriswdmr <github.wolle404@gmail.com>
- rauchg <rauchg@gmail.com>
- nick.tracey <nick.tracey@vercel.com>
- matt.straka <matt.j.straka@gmail.com>
- vercel-release-bot <infra+release@vercel.com>
- quietshu <g@shud.in>
- ijjk <jj@jjsweb.site>
- zeit-bot <team@zeit.co>
dist-tags:
canary: 46.1.1 latest: 46.1.1
published yesterday by vercel-release-bot <infra+release@vercel.com>
つまり、npm install
時にダウンロードしているのはhttps://registry.npmjs.org/vercel/-/vercel-46.1.1.tgzだった。package.nix
でもこれを利用することにした。
URLを変えて、ビルド、インストールフェーズを設定する。すると、ERROR: The package-lock.json file does not exist!
という問題が発生した。実際npmで配布されているコードにはpakcage-lock.json
が含まれていない。これはどのように対処したらいいんだろうか。
いちど方針を変えて、「Githubからソースコードを持ってくる」→「ビルド」→「コマンドを配置」というふうにする。
またまた方針を考える。今度は subfont というパッケージを参考にしてみる。このパッケージはあらかじめローカルでpackage-lock.json
を生成し、nixリポジトリに加えている。こういうやり方もあるのかあ。
nixパッケージにpackage-lock.json
を加える方法については意見があった。おおまかにまとめると、「パッケージごとに5000行のファイルを追加していくと、nixpkgs全体がとんでもないサイズになってしまう」