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'));

4
Погодились, що "вимагати" кешує результат (що робить його непридатним, якщо ви маєте намір читати / змінювати / читати знову). Але це не робить це поганим рішенням у всіх випадках. ОП чітко зазначила, що хоче прочитати інформацію з неї.
Mangled Deutz

2
Можна використовувати requireі видалити кеш за допомогоюdelete require.cache[require.resolve(FILEPATH)];
curly_brackets

@KennethB Чому б не як окрему відповідь? Буде їздити більше, ніж достатньо нагород.
кайзер

138

Це не конкретно для глотки.

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

ОНОВЛЕННЯ:

Будьте в курсі, що "вимагати" буде кешувати результати прочитаного - це означає, що ви не можете вимагати, запишіть у файл, потім знову вимагайте та очікуйте оновлення результатів.


7
Я, безумовно, відчував себе ідіотів для пошуку цього, коли побачив вашу відповідь. Звичайно!
spikeheap

1
Працював для мене: P. І +1 для коментаря щодо кешування, пізніше я перейшов до використання "fs.readFileSync ()", як зазначено нижче.
Барт

@spikeheap Я не знаю, чи коли-небудь я голосно сміявся перед тим, як прочитати коментар до StackOverflow, але я з вами ПРАВА! Дякую за привіт. Ха-ха.
трохи менше

6

Це хороше рішення @Mangled Deutz. Я сам спершу це зробив, але нічого не вийшло (повернутися до другої секунди), потім спробував це рішення:

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

Тепер ви повинні побачити, що це дещо багатослівний (хоч він і працював). require('./package.json')найкраще рішення:

Порада

-запомніть, щоб додати "./" перед іменем файлу. Я знаю його просто, але це різниця між необхідним методом, що працює, і не працює.


Дякую! це надзвичайно допомогло.
Адам Грант

1
дякую за результати, нарешті, є коментарі. :) Рада, що вам це допомогло.
dewwwald

0

Якщо ви запускаєте глоп з NPM, наприклад, використовуючи " npm run build " або щось подібне

(Це працює лише для пускових механізмів запуску за допомогою NPM)

process.env.npm_package_ Об'єкт

це має бути виражено підкресленням для глибших об'єктів.

якщо ви хочете прочитати певний конфігурацію в package.json, як ви хочете прочитати конфігураційний об’єкт, який ви створили в package.json

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

тоді можна використовувати

process.env.npm_package_**config_isClient**
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.