Cli: [BUG] npm 7 eksekusi skrip paket ruang kerja

Dibuat pada 6 Okt 2020  ·  5Komentar  ·  Sumber: npm/cli

Perilaku Saat Ini:

Diberikan sebuah paket dengan beberapa ruang kerja, npm install menginstal semua paket dari root dan paket ruang kerja ke root node_modules . Tidak seperti benang, tidak ada ketergantungan paket ruang kerja yang diinstal ke paket ruang kerja masing-masing node_modules . Artinya, tidak mungkin menjalankan skrip secara langsung jika direktori kerja saat ini adalah sub-paket.

Juga tampaknya belum ada perintah npm workspace untuk menjalankan skrip dari paket ruang kerja (bandingkan dengan yarn workspace ).

Perilaku yang Diharapkan:

Posting blog ini menyebutkan bahwa fitur ruang kerja npm harus berfungsi mirip dengan salah satu benang:

npm v7 akan memiliki setidaknya dukungan fitur Ruang Kerja dari Yarn, dan akan mengatur panggung untuk fitur ruang kerja yang lebih canggih di v8.
https://blog.npmjs.org/post/186983646370/npm-cli-roadmap-summer-2019

Saya berharap dapat:

  1. Jalankan npm workspace @me/workspace-package1 my-script untuk menjalankan skrip my-script di paket ruang kerja @me/workspace-package1 (mis. Terletak di paket / paket1)
  2. cd ke dalam paket ruang kerja dan langsung jalankan skrip dari sana: cd packages/package1 && npm run my-script

Langkah Untuk Mereproduksi:

Saya telah membuat taman bermain ruang kerja untuk bereksperimen dengan paket ruang kerja dan membandingkan benang dan npm7:
https://github.com/fabb/npm7-workspaces

  1. Di repo, jalankan npm install (berhasil)
  2. Di terminal cd applications/app1 && npm run build
  3. Pembuatan gagal karena tsc tidak dapat ditemukan

Sekarang coba dengan benang:

  1. Di repo, jalankan yarn (berhasil)
  2. Di terminal cd applications/app1 && yarn run build
  3. Pembangunan berhasil

Alternatifnya dengan benang:

  1. Di repo, jalankan yarn (berhasil)
  2. Di terminal yarn workspace @fabb/app1 build
  3. Pembangunan berhasil

Lingkungan Hidup:

  • OS: macOS Catalina 10.15.7
  • Node: v12.18.0
  • npm: 7.0.0-rc.2

Terkait

RFC untuk ruang kerja: https://github.com/npm/rfcs/blob/latest/accepted/0026-workspaces.md

Bug Enhancement Release 7.x

Komentar yang paling membantu

Meskipun tidak ideal; hingga masalah ini teratasi, solusinya adalah dengan menggunakan opsi --prefix (lihat dokumen ).

Misalnya, menggunakan langkah-langkah @fabb untuk mereproduksi dengan repo npm7-workspaces dan mengganti perintah langkah 2 dengan yang berikut:

npm run --prefix applications/app1 build

Pembangunan berhasil:

npm7-workspaces % npm -v
7.0.2

npm7-workspaces % npm run --prefix applications/app1 build

> @fabb/[email protected] build
> tsc index.ts

npm7-workspaces % echo $?

0

Semua 5 komentar

Saya punya pertanyaan terkait dengan fitur ruang kerja npm7. Jika saya harus menginstal paket hanya ke ruang kerja tertentu, apa perintah npm untuk melakukan itu. Yarn dan Lerna sama-sama mendukung ini.

Asumsikan ruang kerja berikut ini.

{
  "workspaces": ["packages/*"]
}
root
+ -- packages
  + -- package-a
  + -- package-b

Benang

$ yarn workspace package-a add react

Lerna

lerna add mendukung opsi filter lerna

$ lerna add react --scope=package-a

Pertanyaan. Apakah ruang kerja npm, seperti benang , juga memerlukan paket root untuk memiliki "private": true ? Dokumentasi harus menyertakan informasi seputar ini.

Meskipun tidak ideal; hingga masalah ini teratasi, solusinya adalah dengan menggunakan opsi --prefix (lihat dokumen ).

Misalnya, menggunakan langkah-langkah @fabb untuk mereproduksi dengan repo npm7-workspaces dan mengganti perintah langkah 2 dengan yang berikut:

npm run --prefix applications/app1 build

Pembangunan berhasil:

npm7-workspaces % npm -v
7.0.2

npm7-workspaces % npm run --prefix applications/app1 build

> @fabb/[email protected] build
> tsc index.ts

npm7-workspaces % echo $?

0

Pertanyaan. Apakah ruang kerja npm, seperti benang , juga memerlukan paket root untuk memiliki "private": true ? Dokumentasi harus menyertakan informasi seputar ini.

@detj tidak, sejauh yang saya uji tidak.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat