Javascript: получить данные package.json в gulpfile.js

101

Сам по себе вопрос не о gulp, а о том, как получить информацию из файла package.json внутри gulpfile.js; Например, я хочу получить домашнюю страницу или имя и использовать их в задаче.

полоса дороги
источник

Ответы:

116

Не используйте require('./package.json')для просмотра процесса. Использование requireразрешит модуль как результат первого запроса. Поэтому, если вы редактируете свой package.json, эти изменения не будут работать, если вы не остановите процесс просмотра и не перезапустите его. Для процесса наблюдения за gulp лучше всего использовать метод bitlinguist, поскольку он будет перечитывать файл и анализировать его каждый раз при выполнении вашей задачи.

var fs = require('fs');

var json = JSON.parse(fs.readFileSync('./package.json'));
hapticdata
источник
4
Согласились, что «require» кэширует результат (что делает его непригодным, если вы собираетесь читать / изменять / читать снова). Однако это не во всех случаях делает его плохим решением. ОП прямо упомянул, что хочет прочитать информацию из него.
Mangled Deutz
2
Можно использовать requireи удалить кеш с помощьюdelete require.cache[require.resolve(FILEPATH)];
curly_brackets
@KennethB Почему не как отдельный ответ? Получил бы более чем достаточно голосов.
kaiser
138

Это не специфично для глотка.

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

ОБНОВИТЬ:

Имейте в виду, что "require" кэширует результаты чтения - это означает, что вы не можете требовать, записывать в файл, затем запрашивать снова и ожидать, что результаты будут обновлены.

Искалеченный Deutz
источник
7
Я определенно почувствовал себя идиотом, ища это, когда увидел твой ответ. Конечно!
spikeheap
1
У меня работали: P. И +1 за комментарий о кешировании, позже я переключился на использование fs.readFileSync (), как указано ниже.
Барт
@spikeheap Я не знаю, смеялся ли я когда-нибудь вслух, прежде чем читать комментарий к StackOverflow, но я был ПРАВИЛЬНО там с вами! Спасибо за ура. Ха-ха.
bit-less
6

Это хорошее решение @Mangled Deutz. Я сам сначала сделал это, но это не сработало (вернемся к этому через секунду), затем я попробовал это решение:

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

Теперь вы должны увидеть, что это немного многословно (хотя это сработало). require('./package.json')лучшее решение:

Наконечник

-Не забудьте добавить './' перед именем файла. Я знаю, что это просто, но в этом разница между работающим и неработающим методом require.

Деввальд
источник
Спасибо! это очень помогло.
Адам Грант,
1
спасибо за голоса, наконец-то есть комментарии. :) Рад, что помог.
dewwwald
0

Если вы запускаете gulp из NPM, например, используя " npm run build " или что-то еще

(Это работает только для триггеров запуска gulp от NPM)

process.env.npm_package_ Объект

это должно быть разделено подчеркиванием для более глубоких объектов.

если вы хотите прочитать какую-то конкретную конфигурацию в package.json, например, вы хотите прочитать объект конфигурации, который вы создали в package.json

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

тогда вы можете использовать

process.env.npm_package_**config_isClient**
Манасви Сарин
источник