Sự khác biệt giữa npm install và npm run build là gì?


113

Sự khác biệt giữa npm installvà là npm run buildgì?

Tôi đã nhận thấy trong dự án của mình rằng đôi khi npm bắt đầu không thành công khi npm installđược thực hiện, nhưng, khi chạy npm run build, nó hoạt động tốt.

Hoạt động bên trong của hai mục tiêu này cụ thể installrun buildkhác nhau như thế nào?


1
Câu trả lời được chấp nhận cho đến nay vẫn còn đang tranh cãi. Tôi nghĩ câu trả lời từ MKP và CTS_AE, phù hợp hơn vào thời điểm này. Với sự tôn trọng thích hợp, Điều này sẽ được thông báo bởi người kiểm duyệt & / hoặc người đặt câu hỏi này.
Suhas Chikkanna 19/09/19

Câu trả lời:


69

npm installcài đặt các phần phụ thuộc vào node_modules/thư mục, cho dự án nút mà bạn đang làm việc. Bạn có thể gọi installmột dự án node.js khác (mô-đun), để cài đặt nó như một phần phụ thuộc cho dự án của bạn.

npm run buildlà một bí danh cho npm buildvà nó không có tác dụng gì trừ khi bạn chỉ định "build" làm gì trong tệp package.json của bạn. Nó cho phép bạn thực hiện bất kỳ nhiệm vụ xây dựng / chuẩn bị cần thiết nào cho dự án của mình, trước khi nó được sử dụng trong một dự án khác.

buildđược gọi bởi linkinstallcác lệnh, theo tài liệu về xây dựng :

Đây là lệnh sửa ống nước được gọi bằng liên kết npm và cài đặt npm.


37
Downvoted từ @MKP nói npm run buildnpm buildkhông giống nhau. Tôi sẽ ủng hộ lại nếu bạn có thể chứng minh chúng thực sự giống nhau hoặc sửa câu trả lời của bạn.
Hendy Irawan

Sau khi tham khảo câu trả lời chính xác của liên kết dưới đây, tôi cũng nghĩ rằng npm buildnpm run buildkhông giống nhau. IMHO, Có lẽ câu trả lời trên của @churro cần được sửa lại. Xin vui lòng sửa cho tôi nếu tôi sai. stackoverflow.com/questions/29939697/…
Suhas Chikkanna

1
Thật không may, @HendyIrawan đã đúng và chúng không phải là cùng một lệnh, đây là một câu trả lời được bình chọn cao có thể khiến một số người nhầm lẫn. Tôi tin rằng nó phải được cập nhật.
rdarioduarte

79

NPM năm 2019

npm buildkhông còn tồn tại. Bạn phải gọi npm run buildngay bây giờ. Thêm thông tin bên dưới.

TLDR;

npm install: cài đặt các phần phụ thuộc, sau đó gọi installtừ package.json scriptstrường.

npm run build: chạy trường xây dựng từ package.json scriptstrường.


Trường tập lệnh NPM

https://docs.npmjs.com/misc/scripts

Có rất nhiều thứ bạn có thể đưa vào trường npm package.jsonscripts. Kiểm tra liên kết tài liệu ở trên nhiều hơn về vòng đời của các tập lệnh - hầu hết đều có các hook trước và sau mà bạn có thể chạy các tập lệnh trước / sau khi cài đặt, xuất bản, gỡ cài đặt, kiểm tra, bắt đầu, dừng, thu nhỏ, phiên bản.


Làm phức tạp mọi thứ

  • npm install không giống như npm run install
  • npm installcài đặt các package.jsonphụ thuộc, sau đó chạypackage.json scripts.install
    • (Về cơ bản là các cuộc gọi npm run installsau khi các phần phụ thuộc được cài đặt.
  • npm run installchỉ chạy package.json scripts.install, nó sẽ không cài đặt các phụ thuộc .
  • npm buildtừng là một lệnh hợp lệ (được sử dụng giống như npm run build) nhưng nó không còn nữa; nó bây giờ là một lệnh nội bộ. Nếu bạn chạy nó, bạn sẽ nhận được: npm WARN build npm build called with no arguments. Did you mean to npm run-script build?Bạn có thể đọc thêm trên tài liệu: https://docs.npmjs.com/cli/build

5
+1 Nhưng thật khó hiểu khi nói rằng npm buildkhông tồn tại nữa. Nó vẫn thoát ra theo nghĩa là nó được biết đến / đặc biệt với npm, vì nó phản ứng với cảnh báo bạn đề cập ở phía dưới. Về cơ bản nó không làm gì bây giờ. Câu trả lời này đến câu hỏi khác đưa ra bản tóm tắt ngắn về npm buildvs npm run build.
bluenote10

1
Nói cách khác, thời gian để kiểm tra sợi?
Moose on the Loose

44

Sự khác biệt chính là ::

npm install là một lệnh cli npm thực hiện điều được xác định trước, tức là, như được viết bởi Churro, để cài đặt các phụ thuộc được chỉ định bên trong package.json

npm run command-name hoặc npm run-script command-name ( ví dụ: npm run build ) cũng là một lệnh cli được xác định trước để chạy các tập lệnh tùy chỉnh của bạn với tên được chỉ định thay cho "tên lệnh". Vì vậy, trong trường hợp này, npm run build là một lệnh script tùy chỉnh với tên "build" và sẽ thực hiện bất kỳ điều gì được chỉ định bên trong nó (ví dụ: echo 'hello world' được đưa ra trong ví dụ package.json bên dưới).

Ponits cần lưu ý ::

1) Một điều nữa, npm buildnpm run buildlà hai điều khác nhau npm buildsẽ làm như được viết bởi Churro, nhưng npm run buildsẽ làm công việc tùy chỉnh được viết bên trongpackage.json

2) Và npm buildnpm run buildkhông giống nhau. Ý tôi là, bạn không thể chỉ định một số thứ bên trong npm run buildtập lệnh build ( ) tùy chỉnh và mong đợi npm buildlàm như vậy. Hãy thử điều sau để xác minh trong của bạn package.json:

{
  "name": "demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build":"echo 'hello build'"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {},
  "dependencies": {}
}

và chạy npm run buildnpm buildtừng người một và bạn sẽ thấy sự khác biệt. Để biết thêm về các lệnh, vui lòng làm theo tài liệu npm .

Chúc mừng !!


11
Thay vì "cố gắng chạy cái này", tôi đánh giá cao nếu bạn giải thích chi tiết hơn sự khác biệt giữa npm run buildnpm build. Ok vì vậy chúng không giống nhau, theo cách nào? Vậy câu trả lời của @ Churro là không chính xác?
Hendy Irawan

7
Vâng, điều gì npm buildvẫn còn là một bí ẩn. Rất vui khi biết điều đó. Theo như tôi có thể nói, " npm buildsẽ làm như được viết bởi Churro" là không đúng. Churro cho biết sẽ làm những gì được chỉ định trong package.jsoncác buildlệnh (theo quy định tại scriptsmục I giả sử). Nhưng đó là những gì npm run buildhiện và npm buildkhông chạy lệnh xây dựng được chỉ định trong package.json scriptsphần. Trừ khi có một số cách khác để xác định những gì npm buildnên làm trong package.json, điều này không được giải thích ở đây, cũng không phải bởi Churro (cũng không phải trong tài liệu NPM, tôi nghĩ, thật đáng buồn).
trollkotze

2
Vì vậy, tôi đã thử nó và npm buildcho biết bản dựng Npm WARN npm buildđược gọi mà không có đối số. Bạn có cố ý npm run-script buildkhông? . Tôi nghĩ rằng nó không làm gì cả. Sau khi dành thời gian để đọc tất cả các câu trả lời ở đây và cố gắng này bản thân mình tôi vẫn không thể nói mục đích là gì npm build:(.
bluenote10

4
  • npm install cài đặt các phụ kiện trong cấu hình package.json của bạn.
  • npm run build chạy tập lệnh "xây dựng" và tạo một tập lệnh chạy ứng dụng của bạn - giả sử server.js
  • npm start chạy tập lệnh "start" sau đó sẽ là "node server.js"

Rất khó để nói chính xác vấn đề là gì nhưng về cơ bản nếu bạn nhìn vào cấu hình tập lệnh của mình, tôi sẽ đoán rằng "xây dựng" sử dụng một số loại công cụ xây dựng để tạo ứng dụng của bạn trong khi "bắt đầu" giả định rằng quá trình xây dựng đã được thực hiện nhưng sau đó không thành công nếu tập tin không có ở đó.

Có thể bạn đang sử dụng bower hoặc grunt - dường như tôi nhớ rằng một ứng dụng grunt điển hình sẽ xác định các tập lệnh đó cũng như một tập lệnh "sạch" để xóa bản dựng cuối cùng.

Các công cụ xây dựng có xu hướng tạo tệp trong thư mục bin /, dist / hoặc build / mà sau đó tập lệnh bắt đầu sẽ gọi - ví dụ: "node build / server.js". Khi npm startkhông thành công, có thể là do bạn đã gọi npm cleanhoặc tương tự để xóa bản dựng mới nhất nên tệp ứng dụng của bạn không có mặt khiến npm bắt đầu không thành công.

Mã nguồn của npm build - để đề cập đến cuộc thảo luận trong câu hỏi này - có trong github để bạn có thể xem nếu muốn. Nếu bạn chạy npm buildtrực tiếp và bạn đã xác định tập lệnh "xây dựng", nó sẽ thoát ra với lỗi yêu cầu bạn gọi tập lệnh xây dựng của mình npm run-script buildvì nó không giống với npm run script.

Tôi không hoàn toàn chắc chắn về điều gì npm build, nhưng nó có vẻ liên quan đến các tập lệnh postinstall và đóng gói trong các phần phụ thuộc. Tôi giả định rằng điều này có thể đảm bảo rằng bất kỳ thư viện gốc hoặc tập lệnh xây dựng CLI nào được yêu cầu bởi các phần phụ thuộc đều được xây dựng cho môi trường cụ thể sau khi tải xuống gói. Đây sẽ là lý do tại sao liên kết và cài đặt gọi tập lệnh này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.