Есть ли способ получить версию из пакета.json в коде nodejs?
есть ли способ получить версию, установленную в 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
14 ответов:
Я обнаружил, что следующий фрагмент кода работал лучше для меня. Так как он использует 'require' для загрузки пакета.json, он работает независимо от текущего рабочего каталога.
var pjson = require('./package.json'); console.log(pjson.version);предупреждение, любезно предоставлено @Pathogen:
выполнение этого с browserify имеет последствия для безопасности.
Будьте осторожны, чтобы не выставлять свой пакет.json для клиента, так как это означает, что все ваши номера версий зависимостей, команды сборки и тестирования и многое другое отправляются на сервер клиент.
Если вы создаете сервер и клиент в одном проекте, вы подвергаете свой серверные версии.
Такие конкретные данные могут быть использованы злоумышленником, чтобы лучше соответствовать атаке вашего сервера.
Если ваше приложение запускается с "npm start", вы можете просто использовать:
process.env.npm_package_versionпосмотреть пакета.json vars для более подробной информации.
или в простой старой оболочке:
node -e "console.log(require('./package.json').version);"Это можно сократить до
node -p "require('./package.json').version"хотя это не совсем то, что вопрос задал, это полезно, если вы хотите использовать версию внутри
package.jsonсам, например, чтобы войти в версионный файл вscript:{ "name": "myapp", "version": "0.1.2", "scripts": { "run": "node index.js 2>&1 | tee -a myapp_v$(node -p \"require('./package.json').version\").log", ... }
вот как читать версию из пакета.json:
fs = require('fs') json = JSON.parse(fs.readFileSync('package.json', 'utf8')) version = json.version
правильные ответы будут здесь в пример:
ответ (этот код включает
package.jsonфайл и получить версию)
const { version } = require('./package.json');
ответ
const version = process.env.npm_package_version
пожалуйста, не используйте
JSON.parse,fs.readFile,fs.readFileSyncи не используйте другойnpm modulesэто не обязательно для этого вопроса.
есть еще один способ получения определенной информации от вашего
package.jsonфайл именно с помощью pkginfo.использование этого модуля очень прост. Вы можете получить все переменные пакета через:
require('pkginfo')(module);или только некоторые детали (
versionв этом случае)require('pkginfo')(module, 'version');и ваши переменные пакета будут установлены в
module.exports(так что номер версии будет доступен черезmodule.exports.version).вы можете использовать следующий код фрагмент:
require('pkginfo')(module, 'version'); console.log "Express server listening on port %d in %s mode %s", app.address().port, app.settings.env, module.exports.version
этот модуль имеет очень хорошую функцию - он может быть использован в любом файле в вашем проекте (например, в подпапках), и он будет автоматически получать информацию из вашего
package.json. Так что вам не придется беспокоиться, где выpackage.json- это.Я надеюсь, что поможет.
просто добавив ответ, потому что я пришел к этому вопросу, чтобы увидеть лучший способ включить версию из пакета.json в моем веб-приложении.
Я знаю, что этот вопрос нацелен на узел.js однако, если вы используете Webpack для связывания своего приложения просто напоминанием, рекомендуется использовать DefinePlugin чтобы объявить глобальную версию в конфигурации и ссылаться на нее. Так что вы могли бы сделать в вашей
webpack.config.jsonconst pkg = require('../../package.json'); ... plugins : [ new webpack.DefinePlugin({ AppVersion: JSON.stringify(pkg.version), ...а то
AppVersionтеперь глобальный, который доступен для использования. Также убедитесь в своем.eslintrcвы игнорируете это с помощью Globals prop
для тех, кто ищет безопасный на стороне клиента решение, которое также работает на стороне сервера, есть genversion. Это средство командной строки, которое считывает версию из ближайшего пакета.json и создает импортируемый файл модуля CommonJS, который экспортирует версию. Отказ от ответственности: я сопровождающий.
$ genversion lib/version.jsЯ признаю, что безопасность на стороне клиента не была основным намерением OP, но, как обсуждалось в ответах Марк Уоллес и , это очень важно, а также причина, по которой я нашел этот Q&A.
можно использовать project-version пакета.
$ npm install --save project-versionзатем
const version = require('project-version'); console.log(version); //=> '1.0.0'Он использует
process.env.npm_package_versionно запасной вариант на версии, написанной вpackage.jsonв случае, если env var отсутствует по какой-то причине.
Я делаю это с
findup-sync:var findup = require('findup-sync'); var packagejson = require(findup('package.json')); console.log(packagejson.version); // => '0.0.1'
Я знаю, что это не намерение ОП, но я просто должен был сделать это, так что надеюсь, это поможет следующему человеку.
Если вы используете docker-compose для вашего процесса CI / CD, вы можете получить его таким образом!
version: image: node:7-alpine volumes: - .:/usr/src/service/ working_dir: /usr/src/service/ command: ash -c "node -p \"require('./package.json').version.replace('\n', '')\""для изображения можно использовать любое изображение узла. Я использую alpine, потому что он самый маленький.
импорт в своем
server.jsилиapp.jsи затем получить доступ к пакету.свойства json в файл сервера.var package = require('./package.json');переменная пакета содержит все данные в пакете.формат JSON.
почему бы не использовать родную сторону? другие методы потерпели неудачу для меня.
// Load native UI library var gui = require('nw.gui'); // Get the name field in manifest gui.App.manifest.version
Comments