Ada banyak cara untuk membuat direktori node_modules. Tujuan anda adalah untuk membuat direktori dengan mode strict semaksimal mungkin, medkipun demikian ada opsi untuk membuat node_modules yang lebih longgar.
Pengaturan standar
Secara standar, pnpm v5 akan membuat node_modules semi-ketat. Semi-ketat berarti aplikasi Anda hanya dapat meminta paket yang ditambahkan sebagai dependensi ke package.json
(dengan beberapa pengecualian). Namun, dependensi Anda akan dapat mengakses paket apa pun.
Konfigurasi standar terlihat seperti ini:
; All packages are hoisted to node_modules/.pnpm/node_modules
hoist-pattern[]=*
; All types are hoisted to the root in order to make TypeScript happy
public-hoist-pattern[]=*types*
; All ESLint-related packages are hoisted to the root as well
public-hoist-pattern[]=*eslint*
Plug'n'Play. Konfigurasi paling ketat
pnpm mendukung Yarn's Plug'n'Play sejak v5.9 dirilis. Dengan PnP, aplikasi Anda dan dependensi aplikasi Anda hanya akan memiliki akses ke dependensi yang dideklarasikan. Ini bahkan lebih ketat daripada menyetel hoist=false
karena di dalam monorepo, aplikasi Anda tidak akan dapat mengakses bahkan dependensi dari proyek root.
Untuk menggunakan Plug'n'Play, gunakan konfigurasi berikut ini:
node-linker=pnp
symlink=false
Mode ketat, tradisional module direktori
Jika anda belum siap untuk menggunakan Pnp, anda bisa menggunakan mode ketat dan hanya memperbolehkan packages untuk mengakses dependensi mereka sendiri dengan melakukan konfigurasi hoist ke false:
hoist=false
Namun, jika anda ingin beberapa dependensi mengakses packages yang tidak memiliki dependensi, anda memiliki dua opsi:
-
Buat
pnpmfile.js
file dan gunakan hook untuk menambahkan dependensi yang hilang ke dalam package's manifest. -
Tambahkan pola ke pengaturan
hoist-pattern
. Misalnya, jika modul yang tidak ditemukan adalahbabel-core
, tambahkan pengaturan berikut ke.npmrc
:hoist-pattern[]=babel-core
Kasus terburuk - menarik ke root
Beberapa sarana mungkin tidak bekerja bahkan dengan konfigurasi bawaan pnpm, yang menarik semuanya ke root pernyimpanan virtual dan beberapa paket ke root. Dalam hal ini, Anda dapat menarik semuanya atau sebagian dependensi ke root direktori modul.
Menarik semuanya ke root node_modules:
shamefully-hoist=true
Menarik hanya paket yang cocok dengan pola:
public-hoist-pattern[]=babel-*