Tôi muốn sử dụng yarn install
thay vì npm install
. Tôi muốn tăng lỗi trong npm install
. Tôi nên làm gì trong số package.json
?Cài đặt sợi Force thay vì cài đặt npm cho module Node?
Trả lời
Trong kịch bản cài đặt sẵn, bạn có thể chạy một kịch bản nút nhỏ mà nên làm việc trên tất cả các nền tảng, trong khi những thứ như pgrep
(và phổ biến lệnh * nix khác và các nhà khai thác) sẽ không hoạt động trên Windows cho đến khi Windows 10 nhận được sự chấp nhận rộng rãi.
Tôi đã thử nghiệm tập lệnh bên dưới trên Node v4.7.0 (npm v2.15.11) và Node v7.2.1 (npm v3.10.10). Tôi cho rằng nó hoạt động trên mọi thứ ở giữa. Nó hoạt động bằng cách kiểm tra các biến môi trường trên quy trình hiện đang chạy - npm_execpath
là đường dẫn đến tập lệnh "npm" hiện đang chạy. Trong trường hợp sợi, nó nên trỏ đến /path/to/yarn/on/your/machine/yarn.js
.
"scripts": {
"preinstall": "node -e \"if(process.env.npm_execpath.indexOf('yarn') === -1) throw new Error('You must use Yarn to install, not NPM')\""
}
LƯU Ý: Update từ Alexander's answer - điều này sẽ không hoạt động nếu người dùng sử dụng
npm install --ignore-scripts
. Vui lòng cung cấp tín dụng khi tín dụng đến hạn.
Bạn có thể đọc thêm về các kịch bản NPM đây: https://docs.npmjs.com/misc/scripts
Theo như biến npm_execpath
môi trường, trong khi không ghi nhận tôi nghi ngờ rằng nó sẽ không bao giờ thay đổi. Đó là xung quanh cho nhiều bản phát hành chính của npm
và nó không thực sự vượt qua "có tên tốt hơn cho thử nghiệm" này.
&& là tốt trong các tập lệnh npm vì chúng được thực hiện bằng dấu nhắc lệnh, chứ không phải quyền hạn. – cchamberlain
Ah, cảm ơn. Tôi nghĩ rằng Windows tương đương với '&&' là '&' - tôi đã nhầm lẫn ('&' là cửa sổ tương đương với ';'). Tôi đã cập nhật câu trả lời của mình. –
Các trích dẫn quan trọng trên cửa sổ và sẽ đưa ra lỗi nếu bạn sử dụng dấu nháy đơn cho đối số -e: '" preinstall ":" node -e \ "if (process.env.npm_execpath.indexOf ('yarn') == = -1) ném lỗi mới ('Bạn phải sử dụng Sợi để cài đặt, không phải NPM') \ "" ' – Thomas
Bạn có thể sử dụng móc preinstall cùng với một số tập lệnh shell để đạt được điều này.
mẫu package.json:
"scripts": {
"preinstall": "pgrep npm && exit 1"
}
Điều này không hiệu quả đối với tôi trên OSX vì nó tạo ra các kết quả dương tính giả. Ví dụ, chạy 'pgrep npm' trực tiếp trong Terminal trả về một ID tiến trình vì tôi tình cờ có một máy chủ đang chạy được bắt đầu bằng một tập lệnh npm. –
Giống như các câu trả lời khác, tôi khuyên bạn nên sử dụng một số preinstall
script và kiểm tra môi trường của bạn. Đối với một giải pháp di động mà sẽ không có dương tính giả nếu một quá trình npm xảy ra để được chạy, sử dụng node -e 'JS_CODE'
có lẽ là lựa chọn tốt nhất.
Trong đó mã JS, bạn có thể kiểm tra con đường quản lý gói bằng cách sử dụng như sau: nhị phân
process.env.npm_execpath
Sợi là yarn.js
, so với npm-cli.js
sử dụng bởi NPM. Chúng tôi có thể sử dụng regex như sau để kiểm tra xem chuỗi này có kết thúc bằng yarn.js
hay không.
/yarn\.js$/
Bằng cách sử dụng regex này, chúng tôi có thể chắc chắn nó sẽ không vô tình khớp ở đâu đó trước đó trong hệ thống tệp. Nhiều khả năng yarn
sẽ không xuất hiện trong đường dẫn tệp, nhưng bạn không bao giờ có thể quá chắc chắn.
Dưới đây là một ví dụ nhỏ:
{
"name": "test",
"version": "1.0.0",
"scripts": {
"preinstall": "node -e 'if(!/yarn\\.js$/.test(process.env.npm_execpath))throw new Error(\"Use yarn\")'"
}
}
Tất nhiên, người dùng sẽ vẫn có thể nhận được xung quanh việc kiểm tra này được chỉnh sửa JSON hoặc sử dụng --ignore-scripts
lựa chọn:
npm install --ignore-scripts
Tôi đã vừa phát hành một mô-đun bao gồm CLI cho điều này (hữu ích cho npm preinstall
tập lệnh): https://github.com/adjohnson916/use-yarn
Ngoài ra, tôi vừa phát hành mỗi cho Danger để kiểm tra thiếu yarn.lock
thay đổi nào trên CI: https://github.com/adjohnson916/danger-yarn-lock
Xem thêm thảo luận ở đây:
- 1. Quá nhiều module NPM được cài đặt sau khi thực hiện "NPM cài đặt"
- 2. Node quản lý phiên bản (NVM) NPM cài đặt module vào thư mục chung
- 3. npm cài đặt không cài đặt bất kỳ phụ thuộc
- 4. npm cài đặt lỗi sqlite3
- 5. Không thể cài đặt bằng npm vì quyền trong openshift
- 6. NPM cài đặt treo
- 7. NPM cài đặt Lỗi: rollbackFailedOptional
- 8. react_on_rails cài đặt: sợi được yêu cầu báo lỗi
- 9. cài đặt nhanh bằng npm
- 10. npm cài đặt bị kẹt
- 11. npm cài đặt không thành công vì thư mục ảo
- 12. Không thể chạy NPM cài đặt browserify
- 13. Nhận lệnh npm: không tìm thấy lệnh. Làm thế nào để cài đặt lại NPM khi Node đã được cài đặt? NPM đã đi đâu?
- 14. Lỗi trong lệnh cài đặt npm
- 15. NPM: Chỉ cài đặt bị thiếu - làm thế nào để tăng tốc độ npm cài đặt
- 16. lỗi npm cordova ngăn chặn cài đặt
- 17. sails.js + NPM module 'bcrypt' không được cài đặt trong các cửa sổ 10
- 18. npm cài đặt không thể đọc package.json
- 19. NPM không thể cài đặt các loại
- 20. NPM cài đặt sau khi cài đặt OS X El Capitan
- 21. Làm cách nào để buộc Sợi cài đặt lại gói?
- 22. NPM cài đặt cho Lỗi: EPERM, bỏ liên kết
- 23. NPM cài đặt bày tỏ cho tôi lỗi checksum
- 24. Cài đặt Node JS kết thúc sớm
- 25. npm lỗi cài đặt Không thành công tại [email protected] cài đặt tập lệnh
- 26. NPM Lỗi cài đặt với Phoenix Framework
- 27. Cài đặt nodejs và npm trên linux
- 28. npm không cài đặt jsdom trong Windows
- 29. Chạy các gói được cài đặt trên toàn cầu npm
- 30. Sợi cài đặt lỗi lệnh Không có tập tin hoặc thư mục như: 'cài đặt'
lỗi gì bạn đang phải đối mặt với ** NPM cài đặt * * –
Nó có thể không phải là một lỗi mà anh ta phải đối mặt, nhưng đúng hơn là mong muốn đảm bảo toàn bộ đội của anh ta đang sử dụng sợi. Sợi sửa chữa rất nhiều vấn đề gây ra bởi npm khi làm việc trên một nhóm. –