Có bất kỳ tùy chọn npm tồn tại để vô hiệu hóa tập lệnh cài đặt trong khi cài đặt gói không? Hoặc để viết lại bất kỳ trường nào từ pack.json?
Có bất kỳ tùy chọn npm tồn tại để vô hiệu hóa tập lệnh cài đặt trong khi cài đặt gói không? Hoặc để viết lại bất kỳ trường nào từ pack.json?
Câu trả lời:
Không thể chỉ vô hiệu hóa postinstall
các tập lệnh. Tuy nhiên, bạn có thể vô hiệu hóa tất cả các tập lệnh bằng cách sử dụng:
$ npm install --ignore-scripts
Như delbertooo đã đề cập trong các bình luận, điều này cũng vô hiệu hóa các tập lệnh của các phụ thuộc.
--ignore-scripts
vô hiệu hóa TẤT CẢ các tập lệnh - ngay cả từ các phụ thuộc của bạn. Nếu phụ thuộc của bạn cần chạy tập lệnh để cài đặt một số nhị phân, chúng có thể bị hỏng / không đầy đủ.
--ignore-scripts
, hoặc tùy chọn cấu hình được liên kết (mà tôi đặt trên toàn cầu) cũng có nghĩa là npm run start
sẽ âm thầm không làm gì và báo cáo thành công. Kinh ngạc.
Bạn cũng có thể kích hoạt các cài đặt trong tệp cấu hình npm.
npm config set ignore-scripts true
Lưu ý: Điều này sẽ vô hiệu hóa tập lệnh cho tất cả các gói NPM.
Để làm điều này cho thư viện của riêng bạn, tôi khuyên bạn nên một cái gì đó đơn giản như:
#!/usr/bin/env bash
## this is your postinstall.sh script:
set -e;
if [ "$your_pkg_skip_postinstall" == "yes" ]; then
echo "skipping your package's postinstall routine.";
exit 0;
fi
sau đó thực hiện cài đặt npm của bạn với:
your_pkg_skip_postinstall="yes" npm install
Tôi muốn vô hiệu hóa tập lệnh postinstall cho dự án của mình nhưng muốn tất cả các tập lệnh phụ thuộc dự án của tôi chạy khi tôi làm npm install
. Đây là những gì tôi đã làm.
./scripts/skip.js
if (process.env.SKIP_BUILD) {
process.exit(0);
} else {
process.exit(1);
}
"scripts": {
...
"postinstall": "node ./scripts/skip.js || npm run build",
...
}
bây giờ chỉ cần đặt biến môi trường SKIP_BUILD = 1 để ngăn gói của bạn xây dựng và các phụ thuộc của bạn sẽ xây dựng tốt
SKIP_BUILD=1 npm install