Open9

vercel cliのnixパッケージを作ってみる #contributing #nixos

komenzarkomenzar

pkgs/by-name/ve/vercelディレクトリを作成し、その中にpackage.nixを作成します。nodePackagesではパッケージマネージャがpnpmだったので、同じくpnpmを使っているリポジトリを参考にコードを書きます。

https://github.com/NixOS/nixpkgs/blob/0834814d77c65b95b275b9ef3b2d097f74d2ea33/pkgs/by-name/se/serve/package.nix

また、nixpkgsの言語別ガイドも参考にします。

https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/javascript.section.md#buildnpmpackage-javascript-buildnpmpackage

komenzarkomenzar

真似して作成したパッケージが動作するか確認します。この時にハッシュ値も設定します。

fetchFromGithubtagがserveリポと同じでは動作しませんでした。よく確認するとリンクはhttps://github.com/vercel/vercel/archive/refs/tags/vercel@46.1.1.tar.gzこのような形式だったので、tag = "vercel@${finalAttrs.version}";と変更しました。

komenzarkomenzar

重大な誤解が判明! 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でもこれを利用することにした。

komenzarkomenzar

URLを変えて、ビルド、インストールフェーズを設定する。すると、ERROR: The package-lock.json file does not exist!という問題が発生した。実際npmで配布されているコードにはpakcage-lock.jsonが含まれていない。これはどのように対処したらいいんだろうか。

komenzarkomenzar

いちど方針を変えて、「Githubからソースコードを持ってくる」→「ビルド」→「コマンドを配置」というふうにする。