Javascript: dapatkan data package.json di gulpfile.js

101

Bukan pertanyaan spesifik-teguk saja, tapi bagaimana seseorang bisa mendapatkan info dari file package.json dalam gulpfile.js; Misalnya, saya ingin mendapatkan beranda atau nama dan menggunakannya dalam tugas.

Jalur
sumber

Jawaban:

116

Jangan gunakan require('./package.json')untuk proses menonton. Menggunakan requireakan menyelesaikan modul sebagai hasil dari permintaan pertama. Jadi, jika Anda mengedit package.json, pengeditan itu tidak akan berfungsi kecuali Anda menghentikan proses jam tangan dan memulai ulang. Untuk proses menonton gulp, sebaiknya gunakan metode bitlinguist karena metode ini akan membaca ulang file dan menguraikannya setiap kali tugas Anda dijalankan.

var fs = require('fs');

var json = JSON.parse(fs.readFileSync('./package.json'));
hapticdata
sumber
4
Setuju bahwa "require" melakukan cache hasil (membuatnya tidak cocok jika Anda bermaksud untuk membaca / memodifikasi / membaca lagi). Itu tidak menjadikannya solusi yang buruk dalam semua kasus. OP secara eksplisit menyebutkan dia ingin membaca informasi darinya.
Hancur Deutz
2
Mungkin untuk menggunakan requiredan menghapus cache dengandelete require.cache[require.resolve(FILEPATH)];
curly_brackets
@KennB Mengapa tidak sebagai jawaban terpisah? Akan mendorong lebih dari cukup suara positif.
kaiser
138

Ini tidak spesifik teguk.

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

MEMPERBARUI:

Ketahuilah bahwa "require" akan menyimpan hasil baca ke dalam cache - artinya Anda tidak dapat meminta, menulis ke file, kemudian meminta lagi dan mengharapkan hasil diperbarui.

Hancur Deutz
sumber
7
Saya benar-benar merasa seperti orang idiot karena mencari ini ketika saya melihat jawaban Anda. Tentu saja!
spikeheap
1
Bekerja untuk saya: P. Dan +1 untuk komentar tentang caching, saya kemudian beralih menggunakan 'fs.readFileSync () `seperti yang ditunjukkan di bawah ini.
Bart
@spikeheap Saya tidak tahu apakah saya pernah tertawa terbahak-bahak sebelum membaca komentar di StackOverflow, tapi saya TEPAT bersama Anda! Terima kasih atas sorakannya. Ha ha.
sedikit-sedikit
6

Ini adalah solusi yang bagus @Mangled Deutz. Saya sendiri pertama kali melakukannya tetapi tidak berhasil (Kembali ke itu sebentar lagi), lalu saya mencoba solusi ini:

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

Sekarang Anda harus melihat bahwa ini agak bertele-tele (meskipun berhasil). require('./package.json')adalah solusi terbaik:

Tip

-Ingat untuk menambahkan './' di depan nama file. Saya tahu itu sederhana, tetapi itu adalah perbedaan antara metode yang dibutuhkan bekerja dan tidak berfungsi.

dewwwald
sumber
Terima kasih! ini sangat membantu.
Adam Grant
1
terima kasih atas upvote, akhirnya ada komentar. :) Senang bisa membantu Anda.
dewwwald
0

Jika Anda memicu gulp dari NPM, seperti menggunakan " npm run build " atau semacamnya

(Ini hanya berfungsi untuk pemicu gulp run oleh NPM)

process.env.npm_package_ Object

ini harus dipisahkan dengan garis bawah untuk objek yang lebih dalam.

jika Anda ingin membaca beberapa konfigurasi khusus di package.json seperti Anda ingin membaca objek konfigurasi yang telah Anda buat di package.json

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

maka Anda bisa menggunakan

process.env.npm_package_**config_isClient**
Manasvi Sareen
sumber