有没有办法从nodejs代码中的package.json获取版本?


那月静好
2025-02-28 09:10:24 (8天前)
  1. 有没有办法在package.json中设置版本


的NodeJS
</跨度>
应用程序吗?我想要这样的东西

var port = process.env.PORT || 3000
app.listen端口
console.log“快速服务器在%s模式%s上侦听端口%d”,app.address()。port,app.settings.env,app.VERSION

16 条回复
  1. 0# 部落用户 | 2019-08-31 10-32



    如果你的应用程序是使用’npm start’启动的,你可以简单地使用:




    1. process.env.npm_package_version

    2. </code>


    看到

    package.json vars

    更多细节。


  2. 1# 妖邪 | 2019-08-31 10-32



    你可以使用

    项目版本

    包。




    1. $ npm install save project-version

    2. </code>


    然后




    1. const version = require(‘project-version’);

    2. console.log(version);
      //=> ‘1.0.0’

    3. </code>


    它用

    process.env.npm_package_version

    但是回写在版本中的版本

    package.json

    如果因某种原因缺少env var。


  3. 2# star*위위 | 2019-08-31 10-32



    我制作了一个有用的代码来获取父模块的package.json




    1. function loadParentPackageJson() {
      if (!module.parent || !module.parent.filename) return null
      let dir = path.dirname(module.parent.filename)
      let maxDepth = 5
      let packageJson = null
      while (maxDepth > 0) {
      const packageJsonPath = ${dir}/package.json
      const exists = existsSync(packageJsonPath)
      if (exists) {
      packageJson = require(packageJsonPath)
      break
      }
      dir = path.resolve(dir, ‘../‘)
      maxDepth
      }
      return packageJson
      }

    2. </code>

  4. 3# 荧惑 | 2019-08-31 10-32



    我知道这不是OP的意图,但我只是必须这样做,所以希望它能帮助下一个人。



    如果你正在使用docker-compose进行CI / CD过程,你可以这样做!




    1. version:
      image: node:7-alpine
      volumes:

    2. - .:/usr/src/service/
    3. working_dir: /usr/src/service/
      command: ash -c node -p \”require(‘./package.json’).version.replace(‘\n’, ‘’)\”

    4. </code>


    对于图像,您可以使用任何节点图像。我使用阿尔卑斯山,因为它是最小的。


  5. 4# Just do it | 2019-08-31 10-32



    我这样做


    findup-sync






    1. var findup = require(‘findup-sync’);
      var packagejson = require(findup(‘package.json’));
      console.log(packagejson.version); // => ‘0.0.1’

    2. </code>

  6. 5# 老人与海 | 2019-08-31 10-32



    或者在普通的旧壳中:




    1. node -e console.log(require(‘./package.json’).version);”

    2. </code>


    这可以缩短为




    1. node -p require(‘./package.json’).version

    2. </code>


    即使这不是问题所针对的问题,但如果您想使用其中的版本,它也很有用

    package.json

    本身,例如,登录到一个版本化的文件

    script





    1. {
      name”: myapp”,
      version”: 0.1.2”,
      scripts”: {
      run”: node index.js 2>&1 | tee -a myapp_v$(node -p \”require(‘./package.json’).version\”).log”,

      }

    2. </code>

  7. 6# 咿呀哟 | 2019-08-31 10-32



    为什么不使用原生方式?
    其他方法对我来说都失败了。




    1. // Load native UI library
      var gui = require(‘nw.gui’);

    2. // Get the name field in manifest
      gui.App.manifest.version

    3. </code>

  8. 7# 不浪漫 | 2019-08-31 10-32



    导入你的

    package.json

    归档到你的

    server.js

    要么

    app.js

    然后将package.json属性访问到服务器文件中。




    1. var package = require(‘./package.json’);

    2. </code>


    package变量包含package.json中的所有数据。


  9. 8# 十二* | 2019-08-31 10-32



    我发现以下代码片段对我来说效果最好。由于它使用’require’来加载package.json,因此无论当前工作目录如何,它都可以工作。




    1. var pjson = require(‘./package.json’);
      console.log(pjson.version);

    2. </code>


    @Pathogen提供的警告:




    使用browserify执行此操作具有安全隐患。

    注意不要将package.json暴露给客户端,因为这意味着所有依赖版本号,构建和测试命令等都会发送到客户端。

    如果您在同一项目中构建服务器和客户端,则也会公开服务器端版本号。

    攻击者可以使用此类特定数据来更好地适应您的服务器的攻击。



  10. 9# Little it | 2019-08-31 10-32



    只是添加一个答案,因为我来到这个问题,看看在我的Web应用程序中包含package.json版本的最佳方法。



    我知道这个问题是针对Node.js的,但是,如果您使用Webpack捆绑您的应用程序只是提醒,推荐的方法是使用

    DefinePlugin

    在配置中声明一个全局版本并引用它。所以你可以做你的

    webpack.config.json




    1. const pkg = require(‘../../package.json’);

    2. plugins : [
      new webpack.DefinePlugin({
      AppVersion: JSON.stringify(pkg.version),

    3. </code>


    然后

    AppVersion

    现在是一个可供您使用的全局。还要确保你的


    .eslintrc

    你通过全局道具忽略了这个


  11. 10# 喜欢一个人 | 2019-08-31 10-32



    还有另一种方法可以从您的信息中获取某些信息

    package.json

    文件即使用

    的pkginfo

    模块。



    使用这个模块非常简单。您可以使用以下方法获取所有包变量




    1. require(‘pkginfo’)(module);

    2. </code>


    或者只是某些细节(

    version

    在这种情况下)




    1. require(‘pkginfo’)(module, version’);

    2. </code>


    并且您的包变量将设置为

    module.exports

    (因此版本号可以通过

    module.exports.version

    )。



    您可以使用以下代码段:




    1. 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

    2. </code>




    这个模块有很好的功能 - 它可以在项目的任何文件中使用(例如在子文件夹中),它会自动从你的文件中获取信息

    package.json

    。所以你不必担心你在哪里

    package.json

    是。



    我希望这会有所帮助。


  12. 11# 老夫的少女心 | 2019-08-31 10-32



    对于那些寻找安全的人

    客户端
    </强>
    也适用于服务器端的解决方案

    genversion

    。它是一个命令行工具,它从最近的package.json读取版本,并生成一个可导入的CommonJS模块文件,用于导出该版本。免责声明:我是维护者。




    1. $ genversion lib/version.js

    2. </code>


    我承认客户端安全不是OP的主要目的,但正如在答案中讨论的那样

    马克华莱士



    八月

    ,这是高度相关的,也是我发现这个Q&amp; A的原因。


  13. 12# 晴天?霹雳 | 2019-08-31 10-32



    正确的答案将在这里举例:





    1. 答案(此代码包括

      package.json

      文件和获取版本)




      const { version } = require(‘./package.json’);



    2. </醇>





      1. 回答




        const version = process.env.npm_package_version



      2. </醇>



        请不要使用

        JSON.parse



        fs.readFile



        fs.readFileSync

        而不要使用另一个

        npm modules

        这个问题没有必要。


  14. 13# 晴天3 | 2019-08-31 10-32



    以下是如何从package.json中读取版本:




    1. fs = require(‘fs’)
      json = JSON.parse(fs.readFileSync(‘package.json’, utf8’))
      version = json.version

    2. </code>

  15. 14# Jacob | 2019-08-31 10-32



    您可以使用ES6导入package.json以检索版本号并在控制台上输出版本。




    1. import {name as app_name, version as app_version} from ‘./path/to/package.json’;

    2. console.log(App ---- ${app_name}\nVersion ---- ${app_version});

    3. </code>

登录 后才能参与评论