是否有一个npm cli选项从本地package.json获取包名?

时间:2016-04-11 23:32:21

标签: npm package.json

我想在命令行上从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集成,它将运行很多;本机实现可能会更快。

3 个答案:

答案 0 :(得分:9)

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

你可以通过grepping 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

答案 1 :(得分:5)

如果您决定使用node命令的初步想法,可以使用-p参数使其更清晰一些 node -p "require('./package.json').name"

或有错误处理 node -p "try { require('./package.json').name } catch(e) {}"

答案 2 :(得分:0)

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

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

基本上它的作用是

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