Javascript: lấy dữ liệu package.json trong gulpfile.js


101

Không phải là một câu hỏi cụ thể cho từng người, nhưng làm cách nào để lấy thông tin từ tệp package.json trong gulpfile.js; Ví dụ, tôi muốn lấy trang chủ hoặc tên và sử dụng nó trong một công việc.

Câu trả lời:


116

Không sử dụng require('./package.json')cho quá trình xem. Việc sử dụng requiresẽ giải quyết mô-đun dưới dạng kết quả của yêu cầu đầu tiên. Vì vậy, nếu bạn đang chỉnh sửa package.json, các chỉnh sửa đó sẽ không hoạt động trừ khi bạn dừng quá trình xem của mình và khởi động lại nó. Đối với quy trình xem gulp, tốt nhất là sử dụng phương pháp của bitlinguist vì nó sẽ đọc lại tệp và phân tích cú pháp mỗi khi tác vụ của bạn được thực thi.

var fs = require('fs');

var json = JSON.parse(fs.readFileSync('./package.json'));

4
Đồng ý rằng "request" sẽ lưu kết quả vào bộ nhớ cache (khiến nó không phù hợp nếu bạn định đọc / sửa đổi / đọc lại). Tuy nhiên, điều đó không làm cho nó trở thành một giải pháp tồi trong mọi trường hợp. OP đã đề cập rõ ràng rằng ông muốn đọc thông tin từ đó.
Mangled Deutz

2
Có thể sử dụng requirevà xóa bộ nhớ cache vớidelete require.cache[require.resolve(FILEPATH)];
curl_brackets

@KennethB Tại sao không phải là câu trả lời riêng biệt? Sẽ thúc đẩy nhiều hơn sau đó đủ số phiếu ủng hộ.
kaiser

138

Điều này không cụ thể.

var p = require('./package.json')
p.homepage

CẬP NHẬT:

Lưu ý rằng "request" sẽ lưu vào bộ nhớ cache các kết quả đã đọc - nghĩa là bạn không thể yêu cầu, ghi vào tệp, sau đó yêu cầu lại và mong đợi kết quả được cập nhật.


7
Tôi chắc chắn cảm thấy mình như một tên ngốc khi tìm kiếm điều này khi tôi thấy câu trả lời của bạn. Tất nhiên!
spikeheap

1
Làm việc cho tôi: P. Và +1 cho nhận xét về bộ nhớ đệm, sau đó tôi chuyển sang sử dụng 'fs.readFileSync ()' như được chỉ ra bên dưới.
Bart

@spikeheap Tôi không biết mình đã bao giờ cười thành tiếng trước khi đọc bình luận trên StackOverflow chưa, nhưng tôi đã ĐÚNG ở đó với bạn! Cảm ơn vì những lời cổ vũ. Haha.
bit-less

6

Đây là một giải pháp tốt @Mangled Deutz. Bản thân tôi lần đầu tiên đã làm điều đó nhưng nó không hoạt động (Quay lại điều đó sau một giây), sau đó tôi đã thử giải pháp này:

# Gulpfile.coffee
requireJSON = (file) ->
    fs = require "fs"
    JSON.parse fs.readFileSync file

Bây giờ bạn sẽ thấy rằng điều này hơi dài dòng (mặc dù nó đã hoạt động). require('./package.json')là giải pháp tốt nhất:

tiền boa

-hãy nhớ thêm './' vào trước tên tệp. Tôi biết nó đơn giản, nhưng nó là sự khác biệt giữa phương thức yêu cầu hoạt động và không hoạt động.


Cảm ơn! điều này đã giúp rất nhiều.
Adam Grant

1
cảm ơn vì đã ủng hộ, cuối cùng cũng có bình luận. :) Rất vui vì nó đã giúp bạn.
dewwwald

0

Nếu bạn đang kích hoạt nuốt chửng từ NPM, chẳng hạn như sử dụng " npm run build " hoặc thứ gì đó

(Điều này chỉ hoạt động đối với trình kích hoạt chạy gulp bởi NPM)

process.env.npm_package_ Object

điều này nên được phân tách bằng dấu gạch dưới cho các đối tượng sâu hơn.

nếu bạn muốn đọc một số cấu hình cụ thể trong package.json giống như bạn muốn đọc đối tượng cấu hình bạn đã tạo trong package.json

scripts : {
   build: gulp 
},
config : {
   isClient: false.
}

sau đó bạn có thể sử dụng

process.env.npm_package_**config_isClient**
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.