Sự khác biệt giữa:
npm install [package_name]
và:
npm install [package_name] --save
và:
npm install [package_name] --save-dev
Điều đó có nghĩa là gì? Và những gì thực sự là hiệu ứng của --save
và -dev
từ khoá?
--save-dev
được sử dụng để lưu gói cho mục đích phát triển. Ví dụ: kiểm tra đơn vị, rút gọn ..--save
được sử dụng để lưu gói cần thiết để ứng dụng chạy.Sự khác biệt giữa --save
và --save-dev
có thể không nhận thấy ngay lập tức nếu bạn đã thử cả hai trong các dự án của riêng mình. Vì vậy, đây là một vài ví dụ ...
Giả sử bạn đang xây dựng một ứng dụng sử dụng gói thời điểm để phân tích cú pháp và hiển thị ngày tháng. Ứng dụng của bạn là một bộ lập lịch, vì vậy nó thực sự cần gói này để chạy, như trong: không thể chạy mà không có nó . Trong trường hợp này, bạn sẽ sử dụng
npm install moment --save
Điều này sẽ tạo ra một giá trị mới trong package.json của bạn
"dependencies": {
...
"moment": "^2.17.1"
}
Khi bạn đang phát triển, nó thực sự hữu ích khi sử dụng các công cụ như bộ thử nghiệm và có thể cần lõi và nghiệp hoa nhài . Trong trường hợp này, bạn sẽ sử dụng
npm install jasmine-core --save-dev
npm install karma --save-dev
Điều này cũng sẽ tạo ra một giá trị mới trong package.json của bạn
"devDependencies": {
...
"jasmine-core": "^2.5.2",
"karma": "^1.4.1",
}
Bạn không cần bộ thử nghiệm để chạy ứng dụng ở trạng thái bình thường, vì vậy nó là một --save-dev
loại phụ thuộc, không có gì hơn. Bạn có thể thấy như thế nào nếu bạn không hiểu những gì đang thực sự xảy ra, hơi khó hình dung.
Lấy trực tiếp từ tài liệu NPM docs # phụ thuộc
Sự phụ thuộc
Các phần phụ thuộc được chỉ định trong một đối tượng đơn giản ánh xạ tên gói tới một phạm vi phiên bản. Phạm vi phiên bản là một chuỗi có một hoặc nhiều bộ mô tả được phân tách bằng dấu cách. Sự phụ thuộc cũng có thể được xác định bằng URL tarball hoặc git.
Vui lòng không đặt dây kiểm tra hoặc bộ chuyển đổi trong đối tượng phụ thuộc của bạn. Xem devDependencies , bên dưới.
Ngay cả trong tài liệu, nó cũng yêu cầu bạn sử dụng --save-dev cho các mô-đun như dây nịt kiểm tra.
Tôi hy vọng điều này sẽ giúp và rõ ràng.
Theo mặc định, NPM chỉ cần cài đặt một gói trong node_modules. Khi bạn đang cố gắng cài đặt các phần phụ thuộc cho ứng dụng / mô-đun của mình, trước tiên bạn cần phải cài đặt chúng, sau đó thêm chúng vào dependencies
phần của bạn package.json
.
--save-dev
thêm gói của bên thứ ba vào các phụ thuộc phát triển của gói. Nó sẽ không được cài đặt khi ai đó chạy npm install
trực tiếp để cài đặt gói của bạn. Nó thường chỉ được cài đặt nếu ai đó sao chép kho lưu trữ nguồn của bạn trước và sau đó chạy npm install
trong đó.
--save
thêm gói của bên thứ ba vào các phụ thuộc của gói. Nó sẽ được cài đặt cùng với gói bất cứ khi nào ai đó chạy npm install package
.
Phụ thuộc Dev là những phụ thuộc chỉ cần thiết để phát triển gói. Điều đó có thể bao gồm người chạy thử nghiệm, trình biên dịch, trình đóng gói, v.v. Cả hai loại phụ thuộc đều được lưu trữ trong package.json
tệp của gói . --save
thêm vào dependencies
, --save-dev
thêm vàodevDependencies
tài liệu cài đặt npm có thể được tham khảo tại đây.
-
Xin lưu ý rằng --save
bây giờ là tùy chọn mặc định, kể từ NPM 5. Do đó, nó không cần thiết một cách rõ ràng nữa. Có thể chạy npm install
mà không có --save
kết quả tương tự.
Tôi sẽ cho bạn một ví dụ,
jest
để thử nghiệm và họ sử dụng mocha
. Bạn có muốn họ cài đặt jest
không? Chỉ để chạy thư viện của bạn?Không có quyền? Đó là lý do tại sao họ ở trong devDependencies
.
Khi ai đó làm vậy, npm i yourPackage
chỉ những thư viện cần thiết để CHẠY thư viện của bạn mới được cài đặt. Các thư viện khác mà bạn đã sử dụng để đóng gói mã của mình hoặc thử nghiệm và chế nhạo sẽ không được cài đặt vì bạn đã đưa chúng vào devDependencies
. Khá gọn gàng phải không?
Vì vậy, tại sao các nhà phát triển cần phải tiết lộ devDependancies ?
Giả sử gói của bạn là một gói mã nguồn mở và 100 người đang gửi yêu cầu kéo đến gói của bạn. Sau đó, họ sẽ kiểm tra gói như thế nào? Họ sẽ git clone
repo của bạn và khi họ sẽ làm một npm i
sự phụ thuộc cũng như devDependencies .
Bởi vì họ không sử dụng gói của bạn. Họ đang phát triển gói này hơn nữa, do đó, để kiểm tra gói của bạn, họ cần phải vượt qua các trường hợp thử nghiệm hiện có cũng như viết mới. Vì vậy, họ cần sử dụng của bạn devDependencies
chứa tất cả các thư viện thử nghiệm / xây dựng / chế nhạo mà BẠN đã sử dụng.
Một ví dụ hoàn hảo về điều này là:
$ npm install typescript --save-dev
Trong trường hợp này, bạn muốn có sẵn Typecript (một ngôn ngữ mã hóa có thể phân tích cú pháp javascript) để phát triển, nhưng khi ứng dụng được triển khai, nó không còn cần thiết nữa, vì tất cả mã đã được chuyển sang javascript. Như vậy, sẽ không có ý nghĩa gì nếu đưa nó vào ứng dụng đã xuất bản. Thật vậy, nó sẽ chỉ chiếm dung lượng và tăng thời gian tải xuống.
Theo gợi ý của @ andreas-hultgren trong câu trả lời này và theo tài liệu npm :
Nếu ai đó đang lên kế hoạch tải xuống và sử dụng mô-đun của bạn trong chương trình của họ, thì có thể họ không muốn hoặc không cần tải xuống và xây dựng khung tài liệu hoặc thử nghiệm bên ngoài mà bạn sử dụng.
Tuy nhiên, để phát triển ứng dụng web, Yeoman (một công cụ giàn giáo cài đặt tệp package.json đã được đồng nghiệp đánh giá và viết trước trong số những thứ khác) đặt tất cả các gói trong devDependencies và không có gì trong phụ thuộc, vì vậy có vẻ như việc sử dụng --save-dev
là một cách an toàn trong webapp phát triển, ít nhất.
--save-dev
lưu thông số kỹ thuật của semver vào mảng "devDependencies" trong tệp mô tả gói của bạn, thay --save
vào đó lưu nó vào "phụ thuộc".
Câu trả lời rõ ràng đã được cung cấp. Nhưng điều đáng nói là devDependencies
ảnh hưởng đến việc cài đặt các gói như thế nào :
Theo mặc định, cài đặt npm sẽ cài đặt tất cả các mô-đun được liệt kê dưới dạng phụ thuộc trong package.json. Với cờ --production (hoặc khi biến môi trường NODE_ENV được đặt thành production), npm sẽ không cài đặt các mô-đun được liệt kê trong devDependencies.
Bạn thường không muốn làm cồng kềnh gói sản xuất với những thứ mà bạn chỉ định sử dụng cho mục đích Phát triển.
Sử dụng --save-dev
(hoặc -D
) tùy chọn để tách các gói như khung Unit Test (jest, jasmine, mocha, chai, v.v.)
Bất kỳ gói nào khác mà ứng dụng của bạn cần cho Sản xuất, phải được cài đặt bằng --save
(hoặc -S
).
npm install --save lodash //prod dependency
npm install -S moment // " "
npm install -S opentracing // " "
npm install -D jest //dev only dependency
npm install --save-dev typescript //dev only dependency
Nếu bạn mở package.json
tệp thì bạn sẽ thấy các mục nhập này được liệt kê dưới hai phần khác nhau:
"dependencies": {
"lodash": "4.x",
"moment": "2.x",
"opentracing": "^0.14.1"
},
"devDependencies": {
"jest": "22.x",
"typescript": "^2.8.3"
},
Tất cả các giải thích ở đây đều tuyệt vời, nhưng thiếu một điều rất quan trọng: Làm thế nào để bạn cài đặt các phụ thuộc sản xuất? (không có phụ thuộc phát triển). Chúng tôi tách dependencies
khỏi devDependencies
bằng cách sử dụng --save
hoặc --save-dev
. Để cài đặt tất cả những gì chúng tôi sử dụng:
npm i
Để chỉ cài đặt các gói sản xuất, chúng ta nên sử dụng:
npm i --only=production
--save-dev được sử dụng cho các mô-đun được sử dụng trong quá trình phát triển ứng dụng, không yêu cầu khi chạy nó trong môi trường sản xuất --save được sử dụng để thêm nó vào package.json và nó được yêu cầu để chạy ứng dụng.
Ví dụ: express, body-parser, lodash, mũ bảo hiểm, mysql, tất cả những thứ này được sử dụng trong khi chạy ứng dụng sử dụng - lưu để đưa vào các phụ thuộc trong khi mocha, istanbul, chai, sonarqube-scanner đều được sử dụng trong quá trình phát triển, vì vậy hãy đặt chúng vào dev -phụ thuộc.
npm link hoặc npm install cũng sẽ cài đặt các mô-đun phụ thuộc nhà phát triển cùng với các mô-đun phụ thuộc trong thư mục dự án của bạn
Tôi muốn thêm một số ý tưởng của mình như
Tôi nghĩ rằng tất cả các điểm khác biệt sẽ xuất hiện khi ai đó sử dụng mã của bạn thay vì sử dụng một mình
Ví dụ: bạn viết một thư viện HTTP có tên là node's request
Trong thư viện của bạn,
bạn đã sử dụng lodash để xử lý chuỗi và đối tượng, không có lodash, mã của bạn không thể chạy
Nếu ai đó sử dụng thư viện HTTP của bạn như một phần mã của họ. Mã của bạn sẽ được biên dịch với của anh ấy.
mã của bạn cần lodash, vì vậy bạn cần đưa vào dependencies
để biên dịch
Nếu bạn viết một dự án như monaco-editor
là một trình biên tập web,
bạn đã gói tất cả các mã của mình và bạn đang product env library
sử dụng gói web, khi quá trình xây dựng hoàn tất, chỉ cómonaco-min.js
Vì vậy, ai đó không phân biệt trường hợp dù --save
hay --save-dependencies
, chỉ anh ta cần làmonaco-min.js
Tóm lược:
Nếu ai đó muốn biên dịch mã của bạn (sử dụng làm thư viện), hãy đưa lodash
mã mà mã của bạn sử dụng vàodependencies
Nếu ai đó muốn thêm nhiều tính năng hơn vào mã của bạn, họ cần unit test
và compiler
đưa chúng vàodev-dependencies
Mọi người sử dụng npm trong sản xuất để làm những thứ thú vị độc ác, Node.js là một ví dụ về điều này, vì vậy bạn không muốn tất cả các công cụ dành cho nhà phát triển của mình được chạy.
Nếu bạn đang sử dụng gulp (hoặc tương tự) để tạo các tệp xây dựng để đưa vào máy chủ của mình thì điều đó không thực sự quan trọng.
Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.
Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?
Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.
Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.
Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?
Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.
Desiree Rogers, trái, và Cheryl Mayberry McKissack Chuyển sang, Fenty Beauty và Pat McGrath, có một đế chế làm đẹp mới do phụ nữ làm chủ đang trỗi dậy. Sau thương vụ mua lại mỹ phẩm Black Opal vào tháng 9, đội ngũ quyền lực của Giám đốc điều hành công ty Desiree Rogers và Chủ tịch Cheryl Mayberry McKissack đã thông báo mua lại thương hiệu làm đẹp tiên phong Fashion Fair từ người sáng lập Johnson Publishing Company (JPC).
Đối với những người có quá nhiều thời gian, tiệc tiết lộ giới tính là một cách thú vị để không cần áp đặt những định kiến hạn chế lên thai nhi trước một đối tượng bạn bè giả vờ quan tâm một cách lịch sự. Tuy nhiên, việc chỉ dựa vào những chiếc bánh nướng có màu nhân tạo để biểu thị một tiếng hoo-ha hoặc một đứa trẻ đi tè đã trở nên xa xỉ trong các bậc cha mẹ trên Instagram.
Hôm thứ Tư, cựu Bộ trưởng An ninh Nội địa Kirstjen Nielsen vì một lý do nào đó đã được đưa ra một diễn đàn để phát biểu tại Hội nghị thượng đỉnh Những người phụ nữ quyền lực nhất của Fortune. Và có thể đoán trước được, người phụ nữ giám sát các nỗ lực (đang diễn ra) của chính quyền Trump nhằm chia cắt các gia đình ở biên giới đã sử dụng thời gian của mình như một cơ hội để tự bảo vệ mình và tự nhận mình là người — và hãy hít thở sâu ở đây — “đã nói sự thật với quyền lực.
Vì thế hệ mới nhất của chiếc xe điều chỉnh được yêu thích trên thế giới hiện đã có mặt tại đây, nên chỉ có điều kiện là Toyota Racing Development sẽ đưa phiên bản Supra thế hệ thứ năm sửa đổi của riêng mình đến SEMA vào tháng tới. Toyota đã cho chúng tôi một gợi ý về những gì sẽ xảy ra trong tuần này: một chiếc Concept GR Supra 3000GT hiện đại.
Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!
Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!
Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không
Vụ kiện, nêu tên một số học khu, lập luận rằng dự luật "Không nói đồng tính" được ban hành gần đây của Florida "có hiệu quả im lặng và xóa bỏ học sinh và gia đình LGBTQ +"
Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.
Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.
Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.
Tôi ghét từ "tàu đắm". Mọi người cảm thấy thoải mái trong la bàn đạo đức của riêng mình, và khi làm như vậy, họ thấy mình vượt qua sự phán xét.