JavaScript:gulpfile.jsでpackage.jsonデータを取得する


101

それ自体はgulp固有の質問ではありませんが、gulpfile.js内のpackage.jsonファイルから情報を取得するにはどうすればよいでしょうか。たとえば、ホームページまたは名前を取得して、タスクで使用したいと考えています。

回答:


116

require('./package.json')監視プロセスには使用しないでください。を使用requireすると、最初のリクエストの結果としてモジュールが解決されます。したがって、package.jsonを編集している場合、監視プロセスを停止して再起動しない限り、それらの編集は機能しません。ガルプウォッチプロセスの場合は、タスクが実行されるたびにファイルを再読み取りして解析するため、ビットリンギストの方法を使用するのが最適です。

var fs = require('fs');

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

4
「require」は結果をキャッシュすることに同意しました(もう一度読む/変更する/もう一度読むつもりの場合は、不適切になります)。ただし、すべての場合においてそれが悪い解決策になるわけではありません。OPは、情報を読みたいと明確に述べています。
マングルドドイツ2015

2
使用requireしてキャッシュを削除できますdelete require.cache[require.resolve(FILEPATH)];
curly_brackets

@KennethBなぜ別の答えではないのですか?十分以上の賛成票を集めるでしょう。
カイザー2017年

138

これはゴック特有ではありません。

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

更新:

「require」は読み取り結果をキャッシュすることに注意してください。つまり、要求することはできず、ファイルに書き込み、再度要求して、結果が更新されることを期待します。


7
あなたの答えを見たとき、私は間違いなくこれを探す馬鹿のように感じました。もちろん!
スパイクヒープ2015年

1
私のために働いた:P キャッシングに関するコメントに+1し、後で指摘するように、後で 'fs.readFileSync() `の使用に切り替えました。
Bart

@spikeheap StackOverflowのコメントを読む前に大声で笑ったことがあるかどうかはわかりませんが、私はあなたと一緒にいました。乾杯ありがとう。はは。
ビットレス

6

これは@Mangled Deutzの優れたソリューションです。私自身が最初にそれを行いましたが、それは機能しませんでした(すぐに戻って)、次に私はこの解決策を試しました:

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

これで(これは機能しましたが)少し冗長であることがわかります。require('./package.json')最高のソリューションです:

ヒント

-ファイル名の前に「./」を追加することを忘れないでください。私はその単純なことを知っていますが、それはrequireメソッドが機能することと機能しないことの違いです。


ありがとう!これは非常に役立ちました。
アダムグラント

1
賛成票をありがとう、最後にコメントがあります。:)それがあなたを助けてくれてうれしいです。
dewwwald 2015

0

npm run build」などを使用してNPMからgulpをトリガーしている場合

(これはNPMによるgulp runトリガーでのみ機能します)

process.env.npm_package_ オブジェクト

これは、より深いオブジェクトの場合はアンダースコアで区切られる必要があります。

package.jsonで作成した構成オブジェクトを読み取りたい場合など、package.jsonで特定の構成を読み取りたい場合

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

その後、あなたは使うことができます

process.env.npm_package_**config_isClient**
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.