是否有 npm cli 选项从本地 package.json 获取包名称?
Is there an npm cli option get package name from local 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 集成,因此它会 运行 很多;本机实现可能会更快。
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
如果您决定按照最初的想法使用 node
命令,您可以使用 -p
参数使其更简洁一些,即 shorthand for --print
:
node -p "require('./package.json').name"
或错误处理
node -p "try { require('./package.json').name } catch(e) {}"
我也需要这个,但我尽量不让 node 使用它,因为我不知道我将用于 运行 脚本的 docker 容器是否真的安装了 node(这是还有为什么我不使用 jq)。我通常使用这个shell脚本
npm run env | grep "npm_package_name" | awk -F "=" '{print }'
基本上它的作用是
- 获取 npm 包的环境
- grep 带有“npm_package_name”的行
- 拆分“=”和 return 第二个条目
如果您是 sed-o-phile:npm run env | sed -n '/npm_package_name/{s/.*=//;p;}'
-n
开关抑制自动打印
/npm_package_name/
地址模式为该行选择
{
启动命令方块
s/.*=//;
用等号代替所有东西
p;
打印缓冲区
}
结束命令方块
我想在命令行上从 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 有它存储的环境变量。您可以通过在控制台中键入 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
如果您决定按照最初的想法使用 node
命令,您可以使用 -p
参数使其更简洁一些,即 shorthand for --print
:
node -p "require('./package.json').name"
或错误处理
node -p "try { require('./package.json').name } catch(e) {}"
我也需要这个,但我尽量不让 node 使用它,因为我不知道我将用于 运行 脚本的 docker 容器是否真的安装了 node(这是还有为什么我不使用 jq)。我通常使用这个shell脚本
npm run env | grep "npm_package_name" | awk -F "=" '{print }'
基本上它的作用是
- 获取 npm 包的环境
- grep 带有“npm_package_name”的行
- 拆分“=”和 return 第二个条目
如果您是 sed-o-phile:npm run env | sed -n '/npm_package_name/{s/.*=//;p;}'
-n
开关抑制自动打印
/npm_package_name/
地址模式为该行选择
{
启动命令方块
s/.*=//;
用等号代替所有东西
p;
打印缓冲区
}
结束命令方块