是否有npm cli选项从local package.json获取包名?

是否有npm cli选项从local package.json获取包名?,npm,package.json,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) {}" { "name": "your_packa

我想从命令行上的
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) {}"
{
  "name": "your_package_name",
  "scripts": {
      "getName": "echo $npm_package_name"
  }
}

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

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

您可以使用此函数通过对
npm\u package\u name
进行灰显来获取所需的变量,但这会留下“npm\u package\u name=your\u package\u name”

解决此问题的一种方法是使用命令获取“=”字符后面的子字符串:


cut-d“=”-f2如果您决定使用
node
命令的最初想法,您可以使用
-p
参数使其更简洁,这是以下命令的缩写:

或者使用错误处理

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

我也需要这样做,但我尽量不让node参与其中,因为我永远不知道我将用于运行脚本的docker容器是否实际安装了node(这也是我不使用jq的原因)。我通常使用这个shell脚本

npm运行环境| grep“npm|u包名称”| awk-F“=”{print$2}”
基本上它的作用是

  • 获取npm包的env
  • 用“npm\U包\U名称”grep该行
  • 在“=”上拆分并返回第二个条目
  • node -p "try { require('./package.json').name } catch(e) {}"