2016-11-24 18 views
13

Nếu một package.json có một chỗ dựa files, và/hoặc một directories prop:Làm cách nào để bạn sử dụng thuộc tính 'tệp' và 'thư mục' trong package.json?

"files": [ 
    "./src/assets/fonts/" 
    ], 
    "directories": { 
    "assets:": "./src/assets" 
    } 

một số cách để làm cho sử dụng trong số đó là gì? Các tài liệu không đề cập đến những gì có thể được thực hiện với họ một khi họ đã được chỉ định.

Ví dụ, files docs nói:

"tệp" lĩnh vực là một mảng các file để đưa vào dự án của bạn. Nếu bạn đặt tên một thư mục trong mảng, thì nó cũng sẽ bao gồm các tệp bên trong thư mục đó.

"Bao gồm trong dự án của bạn" có nghĩa là gì? Bao gồm ở đâu? Làm thế nào để họ accesible bây giờ mà họ đã không trước?

Trong directories section, các tài liệu nói:

Trong tương lai, thông tin này có thể được sử dụng trong cách sáng tạo khác.

Các cách sáng tạo hiện có đang được sử dụng là gì?

+1

Tôi không chắc chắn tại sao điều này lại bị giảm giá - có thể ai đó xin phép upvote nó, một câu hỏi hợp pháp của nó. – Baz

Trả lời

15

"bao gồm trong dự án của bạn" nghĩa là các tệp sẽ nằm trong gói tarball được đóng gói được tạo khi bạn chạy npm publish. Bạn cũng có thể chạy npm pack để tạo tarball để kiểm tra mà không thực sự kích hoạt xuất bản. Bằng cách này bạn thực sự có thể mở tarball được tạo ra và kiểm tra xem các tệp nào đã được/không được bao gồm.

Trong khi .npmignore (hoặc .gitignore như một proxy, nếu không có .npmignore) có chức năng như một danh sách đen của các tập tin để bỏ qua (do đó bao gồm tất cả mọi thứ khác theo mặc định), các mảng files là một danh sách trắng. Tức là, thay vì bao gồm mọi thứ theo mặc định, nếu files mảng được chỉ định, mọi thứ đều bị loại trừ theo mặc định và chỉ những tệp được liệt kê rõ ràng mới được đưa vào gói tarball được đóng gói.

Ví dụ: giả sử gói của bạn là thư viện dành cho việc tiêu thụ trong trình duyệt. Mã của bạn nằm trong lib/ và bạn chạy trình duyệt để biên dịch thành một lib tương thích với trình duyệt tại dist/index.js. Bạn bắt đầu với một loạt các tệp được liệt kê trong .gitignore, được sử dụng làm defacto .npmignore không tồn tại. Nhưng bây giờ mà dist/ có đầy đủ các tệp được tạo, bạn muốn chúng bị bỏ qua từ repo git. Nếu bạn thêm chúng vào .gitignore, chúng sẽ bị loại trừ khỏi repo git, nhưng chúng cũng sẽ bị bỏ qua khỏi gói tarball. Vì vậy, bạn có hai tùy chọn: sao chép .gitignore.npmignore nhưng chỉ liệt kê dist/ trong .gitignore. Nếu bạn làm điều này, bạn sẽ phải giữ hai tập tin gần như-nhưng-không-khá đồng bộ. Bằng cách này là tedius và dễ bị lỗi.

Cách khác là không có .npmignore và thay vào đó chỉ liệt kê các tệp bạn thực sự muốn trong gói, trong mảng files. README.*, package.json, CHANGELOG.* (có thể là một vài người khác) được tự động đưa vào tarball bất kể. Vì vậy, bạn chỉ cần thêm "files": [ "dist" ] và bạn đã hoàn tất.Bây giờ gói tarball của bạn sẽ không bao gồm JS nguồn gốc từ lib, cũng không phải tests/ vv nhưng thay vào đó sẽ chỉ chứa lib được biên dịch thực tế trong dist/.

Đối với directories, tôi thường liệt kê các lib (ví ES5), src (ví es6, coffeescript, nguyên cảo vv nguồn), dist (đối với trình duyệt hoặc vm cụ thể xây dựng), test, output (cho các tập tin được tạo ra tạm thời như báo cáo bảo hiểm, vv), doc, vv Mặc dù thuộc tính này không được sử dụng trực tiếp bởi npm hoặc các công cụ khác, nó làm cho cấu trúc thư mục rõ ràng. Ngoài ra, nó làm cho các thư mục referenceable trong kịch bản NPM như vậy:

"scripts": { 
    "clean": "rm -rf $npm_package_directories_dist $npm_package_directories_output", 
    "lint": "eslint $npm_package_directories_src", 
    "test": "teenytest $npm_package_directories_test", 
} 

Bằng cách này, các thư mục được quy định chỉ một lần, và nếu họ thay đổi, họ chỉ cần thay đổi ở một vị trí duy nhất (chứ không phải là nhiều trong suốt package.json).

+0

Câu trả lời hay, cảm ơn! – Baz

Các vấn đề liên quan