Langsung ke konten utama
Versi: 7.x

pnpm fetch

Fetch paket dari lock file ke penyimpanan virtual, package manifes akan diabaikan.

Skenario penggunaan

Perintah ini dirancang khusus untuk mempercepat pembuatan docker image.

Disarankan Anda telah membaca panduan resmi untuk menulis Dockerfile untuk aplikasi Node.js, jika Anda belum membacanya, Anda mungkin ingin membacanya terlebih dahulu.

Dari panduan itu, kita belajar menulis Dockerfile yang dioptimalkan untuk proyek menggunakan pnpm, yang akan terlihat seperti

FROM node:14

RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm

# Files required by pnpm install
COPY .npmrc package.json pnpm-lock.yaml .pnpmfile.cjs ./

RUN pnpm install --frozen-lockfile --prod

# Bundle app source
COPY . .

EXPOSE 8080
CMD [ "node", "server.js" ]

Selama tidak ada perubahan ke .npmrc, package.json, pnpm-lock.yaml, .pnpmfile.cjs, cache pada docker masih valid hingga lapisan RUN pnpm install --frozen-lockfile --prod, yang menghabiskan sebagian besar waktu saat membuat docker image.

Meskipun demikian, modifikasi ke package.json mungkin terjadi lebih sering daripada yang kami harapkan, karena tidak hanya berisi dependensi, tetapi mungkin juga nomor versi, kode, dan konfigurasi arbitrer untuk alat lainnya.

Hal ini juga sulit untuk mempertahankan Dockerfile yang digunakan untuk memabngun sebuah proyek monorepo, mungkin terlihat seperti

FROM node:14

RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm

# Files required by pnpm install
COPY .npmrc package.json pnpm-lock.yaml .pnpmfile.cjs ./

# for each sub-package, we have to add one extra step to copy its manifest
# to the right place, as docker have no way to filter out only package.json with
# single instruction
COPY packages/foo/package.json packages/foo/
COPY packages/bar/package.json packages/bar/

RUN pnpm install --frozen-lockfile --prod

# Bundle app source
COPY . .

EXPOSE 8080
CMD [ "node", "server.js" ]

Seperti yang Anda lihat, Dockerfile harus diperbarui saat Anda menambah atau menghapus sub-packages.

pnpm fetch akan menyelesaikan masalah di atas dengan sempurna dengan menyediakan kemampuan untuk mengambil paket ke toko virtual dengan informasi hanya dari lockfile.

FROM node:14

RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm

# pnpm fetch does require only lockfile
COPY pnpm-lock.yaml ./

RUN pnpm fetch --prod


ADD . ./
RUN pnpm install -r --offline --prod


EXPOSE 8080
CMD [ "node", "server.js" ]

Ini berfungsi untuk proyek sederhana dan proyek monorepo, --offline memaksa pnpm untuk tidak berkomunikasi dengan registri paket karena semua paket yang dibutuhkan harus sudah disajikan di virtual store.

Selama lockfile tidak diubah, cache build valid hingga layer RUN pnpm install -r --offline , yang akan menghemat banyak waktu Anda.

Opsi

--dev

Hanya paket pengembangan yang akan diambil

--prod

Paket pengembangan tidak akan diambil