Giải phẫu của tệp package.json
Nếu bạn đã làm việc trên các dự án JavaScript và / hoặc Node.js ở bất kỳ năng lực nào trong vài năm qua, chắc chắn bạn đã xem qua một số file package.json
, file cấu hình của npm cho các dự án và module . Trong bài đăng này, ta sẽ khám phá một số khóa và giá trị quan trọng nhất được tìm thấy trong file package.json điển hình.
Bắt đầu một dự án
Cách dễ nhất và nhanh nhất để bắt đầu một dự án với trình quản lý gói npm là sử dụng lệnh init
và cờ -y
, câu trả lời có cho tất cả các câu hỏi:
$ npm init -y
Tên của dự án sẽ giống với tên của folder hiện tại bạn đang ở.
Lệnh init
sẽ ghi một file package.json
vào folder hiện tại với nội dung JSON giống như sau:
{
"name": "hello-alligator",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Hãy xem xét từng khóa trong file package.json ban đầu:
- name : Tên cho dự án, tất cả phải là chữ thường và URL an toàn. Tên có thể được bắt đầu bằng một phạm vi (ví dụ: @ angle / angle-cli ) và là tùy chọn nếu dự án là riêng tư, nhưng nếu dự án được xuất bản công khai thì tên đó là bắt buộc và phải là duy nhất trên repository npm.
- phiên bản : Một số version mà nút-semver phải hiểu. Điều này cũng là tùy chọn cho riêng tư và bắt buộc và rất quan trọng đối với các module công cộng.
- description : Mô tả cho dự án. Điều này là tùy chọn và hữu ích nếu bạn có thể dễ dàng tìm thấy dự án trên repository .
- main : Tệp đầu vào của dự án.
- script : Khóa
scripts
mong đợi một đối tượng có tên script là khóa và lệnh là giá trị. Điều này rất hữu ích để chỉ định các tập lệnh có thể chạy trực tiếp từ dòng lệnh và có thể thực hiện tất cả các việc như bắt đầu dự án của bạn trên server local , xây dựng để production hoặc chạy thử nghiệm của bạn. Rất có thểscripts
là nơi bạn sẽ áp dụng các thay đổi thủ công nhất trong file package.json điển hình. - từ khóa : Một mảng từ khóa giúp tìm kiếm module trên repository npm.
- author : Trường tác giả mong đợi một đối tượng có các khóa
name
,email
vàurl
. Nó giúp mọi người dễ dàng liên hệ với chủ dự án. - giấy phép : Yêu cầu tên giấy phép sử dụng số nhận dạng SPDX của nó. Nó mặc định là giấy phép ISC và
MIT
sẽ là một lựa chọn cấp phép phổ biến khác. Bạn cũng có thể sử dụngUNLICENSED
cho các dự án riêng tư và nguồn đóng.
Quản lý dependencies
Điểm mạnh chính của npm là khả năng dễ dàng quản lý các phụ thuộc của dự án. Do đó, việc file package.json cho một dự án chủ yếu xoay quanh việc xác định các phụ thuộc cho một dự án. Có dependencies thường xuyên, nhưng cũng có thể được devDependencies, peerDependencies, optionalDependencies và bundledDependencies. Hãy xem qua chúng:
- phụ thuộc : Các phụ thuộc dự án thông thường. Đây là nơi phần lớn các phụ thuộc của bạn sẽ có nhiều khả năng. Thêm các phần phụ thuộc như vậy vào dự án của bạn bằng cách sử dụng
$ npm install my-dependency
. - devDependencies : Những phụ thuộc chỉ hữu ích khi làm việc trên dự án. Ví dụ: các thư viện thử nghiệm và bộ chuyển đổi thường được thêm vào dưới dạng devDependencies. Thêm devDependency bằng cách sử dụng cờ
--save-dev
của npm với lệnh install. - optionDependencies : Những phụ thuộc sẽ được npm coi là tùy chọn. Điều đó nghĩa là npm sẽ không phàn nàn hoặc không cài đặt được khi không thể đáp ứng các phụ thuộc tùy chọn. Cài đặt phần phụ thuộc tùy chọn bằng cách sử dụng
--save-optional
với lệnh cài đặt. - BundledDependencies : Mong đợi một mảng tên gói, sẽ được đóng gói cùng với dự án. Sử dụng cờ
--save-bundle
với lệnh cài đặt để một phụ thuộc cũng được thêm vào danh sách các phụ thuộc được đóng gói. - peerDependencies : Sự phụ thuộc ngang hàng rất hữu ích để chỉ định các module mà dự án của bạn phụ thuộc vào.Bằng cách này, npm sẽ đưa ra cảnh báo khi thiếu một số phụ thuộc ngang hàng.
Như bạn có thể đã thấy trước đây, phần phụ thuộc có thể chấp nhận các định dạng khác nhau để chỉ định version hoặc phạm vi version nào được dùng cho phần phụ thuộc. Ví dụ:
- 2.4.2: Phiên bản chính xác 2.4.2
- ^ 2.4.2: Phiên bản mới nhất tương thích với version 2.4.2
- ~ 2.4.2: Hoạt động cho các version như 2.4.2, 2.4.3, 2.4.4,…
- ~ 2.4: Điều này sẽ hoạt động đối với các version như 2.4, 2.5, 2.6,…
- 2.4.x: Hoạt động với bất kỳ version vá lỗi nào của version 2.4 của gói
- 2.x: Hoạt động cho bất kỳ version nhỏ nào của version 2 của gói
- > = 2.4: Phiên bản lớn hơn hoặc bằng 2.4. Bạn cũng có thể sử dụng <, <= hoặc>
- 2.4.2 3.1.1: Bất kỳ version nào giữa và bao gồm version 2.4.2 và version 3.1.1
Bạn thậm chí có thể chỉ định nhiều phạm vi version có thể có bằng cách tách từng phạm vi bằng ||
.
Các phím cấu hình hữu ích hơn
Có nhiều cấu hình hơn có thể tùy chọn đi vào file package.json của dự án của bạn, vì vậy ta hãy tìm hiểu sơ qua về một số cấu hình hữu ích nhất:
- trình duyệt : Sử dụng khóa trình duyệt thay vì khóa
main
cho các dự án được sử dụng trong trình duyệt thay vì server . - private : Nếu khóa này được đặt thành
true
, thì dự án sẽ không thể được xuất bản công khai lên repository npm. Điều này rất hữu ích nếu bạn muốn ngăn việc vô tình xuất bản một dự án ra thế giới. - engine : Sử dụng
engines
để chỉ định các version cụ thể của Node.js và / hoặc npm mà dự án làm việc với. Nó nhận một đối tượng có khóa chonode
và / hoặcnpm
và một giá trị trông giống như những gì bạn có làm giá trị cho các phần phụ thuộc chỉ định một loạt các version . - trang chủ : URL của trang chủ của dự án.
- lỗi : Một URL nơi các vấn đề và lỗi có thể được báo cáo. Đây thường sẽ là một URL dẫn đến trang vấn đề Github cho một dự án.
- tệp : Khóa tùy chọn này yêu cầu một mảng file được bao gồm khi dự án được thêm phần phụ thuộc vào dự án khác. Tên / đường dẫn file có thể sử dụng mẫu hình cầu và khi khóa
files
không được cung cấp, giá trị mặc định là["*"]
sẽ được sử dụng, nghĩa là tất cả các file sẽ được bao gồm. Tuy nhiên, đừng lo lắng, một số file / folder nhất định như.git
vànome_modules
luôn bị bỏ qua.
Với điều này, bạn sẽ có một ý tưởng chung khá tốt về những gì có thể đi vào cấu hình package.json của bạn. Bạn cũng có thể tham khảo tài liệu chính thức để biết chi tiết cụ thể về tất cả các khóa cấu hình có thể có.
Các tin liên quan