Есть ли способ получить версию, установленную package.json
в приложении nodejs? Я хотел бы что-то вроде этого
var port = process.env.PORT || 3000
app.listen port
console.log "Express server listening on port %d in %s mode %s", app.address().port, app.settings.env, app.VERSION
node.js
npm
version
versioning
Абхик Бозе Праманик
источник
источник
console.log(process.version)
Ответы:
Я обнаружил, что следующий фрагмент кода работает лучше всего для меня. Поскольку он использует
require
для загрузкиpackage.json
, он работает независимо от текущего рабочего каталога.Предупреждение, любезно предоставленное @Pathogen:
источник
require('root-require')('package.json').version
Error: Cannot find module 'package.json'
,Если ваше приложение запускается с «npm start», вы можете просто использовать:
Смотрите package.json vars для более подробной информации.
источник
npm run …
) версия будет находиться в переменной окружения$npm_package_version
.npm start
, но не в встроенном электронном приложении: для этого вы можете найти его вapp.getVersion
.Используя модули ES6, вы можете сделать следующее:
источник
Или в простой старой оболочке:
Это может быть сокращено до
Несмотря на то, что это не совсем то, что задал вопрос, полезно, если вы хотите использовать версию внутри
package.json
себя, например, для входа в версионный файл вscript
:источник
Есть два способа получения версии:
package.json
и получение версии:Пожалуйста , не используйте
JSON.parse
,fs.readFile
,fs.readFileSync
и не используйте другоеnpm modules
это не нужно для этого вопроса.источник
npm_*
значения среды доступны только в том случае, если ваш скрипт был запущен NPM, напримерnpm start
. Если вы делаетеnode app.js
или похожи, они не будут присутствовать.package.json
?Вот как читать версию из package.json:
источник
require() introduces? (for instance, does
требуют () `не поддерживает чтение utf8? как подсказывает ваш фрагментrequire()
кэширует файл, который в этом случае не должен иметь значения.JSON.parse(fs.readFileSync('package.json', 'utf8'))
вместо того,delete require.cache[require.resolve('package.json')]; require('package.json')
когда хотят перезагрузить компьютер?Существует другой способ получения определенной информации из вашего
package.json
файла, а именно с помощью модуля pkginfo .Использование этого модуля очень просто. Вы можете получить все переменные пакета, используя:
Или только определенные детали (
version
в этом случае)И ваши переменные пакета будут установлены в
module.exports
(поэтому номер версии будет доступен черезmodule.exports.version
).Вы можете использовать следующий фрагмент кода:
Этот модуль имеет очень хорошую функцию - его можно использовать в любом файле вашего проекта (например, во вложенных папках), и он будет автоматически получать информацию из вашего
package.json
. Так что вам не нужно беспокоиться о том, где вы находитесьpackage.json
.Я надеюсь, что это поможет.
источник
module
здесь?module
это не конкретный пример переменной; это переменная, представляющая текущий модуль в node.js. Вы можете прочитать больше о модулях node.js здесь: nodejs.org/api/modules.html#modules_the_module_objectДля тех, кто ищет безопасное решение на стороне клиента, которое также работает на стороне сервера, есть genversion . Это инструмент командной строки, который читает версию из ближайшего package.json и генерирует импортируемый файл модуля CommonJS, который экспортирует версию. Отказ от ответственности: я сопровождающий.
Я признаю, что безопасность на стороне клиента не была основной целью OP, но, как обсуждалось в ответах Марка Уоллеса и Ауга , это очень важно, а также причина, по которой я нашел этот вопрос и ответ .
источник
Просто добавив ответ, потому что я пришел к этому вопросу, чтобы увидеть лучший способ включить версию из package.json в мое веб-приложение.
Я знаю, что этот вопрос предназначен для Node.js, однако, если вы используете Webpack для объединения своего приложения, просто напоминание, рекомендуемый способ - использовать DefinePlugin для объявления глобальной версии в конфигурации и ссылки на нее . Так что вы могли бы сделать в своем
webpack.config.json
И
AppVersion
теперь это глобальный, который доступен для использования. Также убедитесь, что.eslintrc
вы игнорируете это через глобальную опоруисточник
Опция 1
Рекомендуется использовать версию из package.json с использованием переменных среды npm.
больше информации на: https://docs.npmjs.com/using-npm/config.html
Это будет работать только тогда, когда вы запустите свой сервис с помощью команды NPM.
Вариант 2
Установка версии в переменной окружения, используя https://www.npmjs.com/package/dotenv в качестве
.env
файла, и относительно этого вprocess.env.version
источник
Вы можете использовать ES6 для импорта package.json для получения номера версии и вывода версии на консоль.
источник
Чтобы определить версию пакета в коде узла, вы можете использовать следующее:
const version = require('./package.json').version;
для <ES6 версийimport {version} from './package.json';
для версии ES6const version = process.env.npm_package_version;
если приложение было запущено с использованиемnpm start
, все переменные окружения npm_ * становятся доступными.Вы также можете использовать следующие пакеты npm - root-require, pkginfo, project-version.
источник
Вы можете использовать пакет проекта-версии .
затем
Оно использует
process.env.npm_package_version
но откат на версию, написанную вpackage.json
случае, если env var по какой-то причине отсутствует.источник
Почему бы не использовать требуемое разрешение ...
При таком подходе работаю для всех подпутей :)
источник
Я делаю это с
findup-sync
:источник
package.json
, аналогично тому,process.env.npm_package_version
что он не требует запуска через npm. Поэтому попытка получить версию вашей библиотеки на самом деле получит версию вызывающей стороны. Простое требование ('./ package.json') позволит избежать этого.Я знаю, что это не цель ОП, но я просто должен был сделать это, поэтому надеюсь, что это поможет следующему человеку.
Если вы используете docker-compose для процесса CI / CD, вы можете получить его таким образом!
для изображения вы можете использовать любой узел изображения. Я использую альпийский, потому что он самый маленький.
источник
Импорт
package.json
файла вserver.js
илиapp.js
и затем package.json доступ к свойствам в файл сервера.Переменная package содержит все данные в package.json.
источник
Я сделал полезный код, чтобы получить package.json родительского модуля
источник
Если используется накопительный пакет,
rollup-plugin-replace
плагин можно использовать для добавления версии без предоставления package.json клиенту.Затем в исходном коде, где бы вы ни хотели иметь версию package.json, вы должны использовать строку «MY_PACKAGE_JSON_VERSION».
источник