【问题标题】:Is there an npm cli option get package name from local package.json?是否有一个 npm cli 选项从本地 package.json 获取包名?
【发布时间】:2016-08-02 08:17:30
【问题描述】:

我想在命令行上从package.json 获取详细信息。一个例子:

$ cd ~/my-node-package
$ npm commandiamlookingfor package name
my-package-name

我知道这将是一个简单的脚本。我可以这样做:

node -e "try {var pack=require('./package.json'); console.log(pack.name); } catch(e) {}"

但我不必编写(和维护)的任何代码都是最好的代码。此外,由于我想将它用于 shell 集成,它会运行很多;原生实现可能会更快。

【问题讨论】:

    标签: npm package.json


    【解决方案1】:

    NPM 有它存储的环境变量。您可以通过在控制台中输入 npm run env 来查看这些内容。

    您可以使用它通过 grepping for npm_package_name 来获取所需的变量,但这会留下“npm_package_name=your_package_name”。

    绕过它的一种方法是使用命令获取“=”字符之后的子字符串:

    cut -d "=" -f 2 <<< $(npm run env | grep "npm_package_name")

    这个命令给你留下了包名。

    编辑:
    另一种方法是在您的package.json 中添加一个脚本,即简单的echo $npm_package_name,然后在您的 shell 命令中运行该脚本。

    您的package.json 看起来像这样:

    {
      "name": "your_package_name",
      "scripts": {
          "getName": "echo $npm_package_name"
      }
    }
    

    然后输入npm run getName -s

    【讨论】:

      【解决方案2】:

      如果您决定采用使用node 命令的最初想法,则可以使用-p 参数(--print 的简写)使其更简洁:

      node -p "require('./package.json').name"
      

      或带有错误处理

      node -p "try { require('./package.json').name } catch(e) {}"
      

      【讨论】:

        【解决方案3】:

        我也需要这个,但我尽量不使用 node,因为我不知道我将用来运行脚本的 docker 容器是否真的安装了 node(这也是我不使用 jq 的原因)。我通常使用这个shell脚本

        npm run env | grep "npm_package_name" | awk -F "=" '{print $2}'
        

        基本上它的作用是

        1. 获取 npm 包的环境
        2. grep 带有“npm_package_name”的行
        3. 在“=”上拆分并返回第二个条目

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-28
          • 2013-02-25
          • 2015-12-17
          • 1970-01-01
          • 1970-01-01
          • 2018-08-13
          • 1970-01-01
          • 2021-03-28
          相关资源
          最近更新 更多