npm ci
tidak menjalankan skrip postinstall
npm ci
harus menjalankan skrip postinstall
{
"scripts": {
"postinstall": "echo \"it should echo this\""
}
}
npm install
npm ci
npm ci
TIDAK menjalankan skrip postinstall
ex.
Saya pikir ini berfungsi sebagaimana mestinya atau setidaknya sama dengan npm v6
& tidak terlihat seperti bug tetapi mungkin sangat membingungkan.
Skrip preinstall
, install
& postinstall
sebenarnya adalah peristiwa siklus hidup yang dipicu saat paket itu sendiri sedang diinstal ke dalam proyek lain atau sebagai ketergantungan. Karena itu, Anda dapat memicu skrip ini secara manual menggunakan npm run
.
Jika Anda ingin mengeksekusi beberapa kode setiap kali Anda menjalankan install
pada level proyek, saya rasa Anda akan ingin menggunakan hook scripts
(yaitu mendefinisikan sebuah executable dengan nama yang sama dengan acara di ./node_modules/.hooks/
).
Jelas beri tahu saya jika saya salah & bahwa ini / sedang bekerja pada versi CLI sebelumnya. Pilihan lain di sini adalah hanya untuk merantai (mis. npm install x && npm run y
, atau kami memiliki perintah praktis seperti install-test
& install-ci-test
yang melakukan npm install
lalu npm run test
yang merupakan alur kerja umum untuk orang-orang)
Ini bukan cara kerja npm 6.
npm 6:
npm 7:
Hmm, melihat ini lebih dalam, saya tahu bahwa kami memang ingin menghentikan pemasangan & kami menerapkan RFC untuk itu (ref. Https://github.com/npm/rfcs/blob/latest/implemented/0022- quieter-install-scripts.md); Tapi kita harus tetap menjalankannya. Saya akan mengajukan ini & melihat apakah kita bisa meminta seseorang untuk menggali lebih dalam.
Saya bisa mendukung ini. Saya memiliki proyek menggunakan Husky . Saat melakukan instalasi baru, Husky tidak berjalan, juga tidak menginstal git hooks. Ini diubah dari NPM v6 menjadi NPM v7. Satu hal yang sedikit berbeda dari masalah OP, adalah bahwa (saya yakin) skrip postinstall yang dijalankan ada di modul Husky, dan bukan di skrip root project.
Contoh npm ci
snippet untuk Husky:
$ npm ci
npm WARN prepare removing existing node_modules/ before installation
> [email protected] install ./atlas-server/node_modules/husky
> node husky install
husky > Setting up git hooks
husky > Done
> [email protected] postinstall ./atlas-server/node_modules/husky
> opencollective-postinstall || exit 0
Thank you for using husky!
If you rely on this package, please consider supporting our open collective:
> https://opencollective.com/husky/donate
...
Saya menggunakan lerna
dan menggunakan postinstall
pada proyek saya seperti di bawah ini.
"scripts": {
"postinstall": "lerna bootstrap",
https://github.com/mobilusoss/textlint-browser-runner/blob/master/package.json#L18
postinstall
dipanggil setelah npm ci
di TravisCI dengan npm v 6.14.8
https://travis-ci.com/github/mobilusoss/textlint-browser-runner/builds/191070080
Tetapi npm v7.0.3 tidak memanggil postinstall
https://travis-ci.com/github/mobilusoss/textlint-browser-runner/jobs/403527216
Solusi saya adalah memanggil lerna bootstrap
secara manual setelah npm ci
Konfirmasi. Melanggar perubahan sejak npm 7.0.0
Mungkin disebabkan oleh
Perintah yang hanya menjalankan satu skrip (uji npm, npm start, npm stop, dan npm restart) sekarang akan menjalankan skripnya bahkan jika --ignore-scripts disetel. Sebelum rilis GA v7.0.0, mereka tidak akan menjalankan skrip pra / posting, namun. (Jadi, dimungkinkan untuk menjalankan npm test --ignore-scripts untuk menjalankan pengujian Anda tetapi tidak linter Anda, misalnya.)
Apakah ini akan dianggap sebagai bug atau sebagai perubahan yang mengganggu untuk npm 7?
@darcyclarke @isaacs mohon maaf atas tag langsung tersebut, tetapi saya melihat bahwa masalah ini telah dihapus dari salah satu pencapaian sprint, jadi saya ingin memastikan bahwa ini tidak terlewatkan karena ini adalah regresi yang cukup besar.
Ini repro minimal, jika tidak jelas dari masalah aslinya:
{
"scripts": {
"prepare": "echo foo"
}
}
Dengan npm@6
, npm install
dan npm ci
print "foo". Dengan npm@7
, npm install
mencetak "foo" tetapi npm ci
tidak.
Masalahnya adalah bahwa perintah instal memiliki blok berikut untuk secara eksplisit menjalankan skrip instalasi yang sesuai, tetapi perintah ci tidak memiliki blok seperti itu:
https://github.com/npm/cli/blob/a28aff769a77f127f371c31afcb9e9814722e5cd/lib/install.js#L44 -L62
Komentar yang paling membantu
@darcyclarke @isaacs mohon maaf atas tag langsung tersebut, tetapi saya melihat bahwa masalah ini telah dihapus dari salah satu pencapaian sprint, jadi saya ingin memastikan bahwa ini tidak terlewatkan karena ini adalah regresi yang cukup besar.
Ini repro minimal, jika tidak jelas dari masalah aslinya:
Dengan
npm@6
,npm install
dannpm ci
print "foo". Dengannpm@7
,npm install
mencetak "foo" tetapinpm ci
tidak.Masalahnya adalah bahwa perintah instal memiliki blok berikut untuk secara eksplisit menjalankan skrip instalasi yang sesuai, tetapi perintah ci tidak memiliki blok seperti itu:
https://github.com/npm/cli/blob/a28aff769a77f127f371c31afcb9e9814722e5cd/lib/install.js#L44 -L62