npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

qs-cli

v1.0.1-rc.3

Published

命令, 可执行文件管理工具.

Downloads

4

Readme

qs - quick start

快速打开各种类型的文件, 运行任务.

支持 Node.js v10+ .

$ npm i -g qs-cli

$ qs -n hi echo hello
hello

$ qs -s hi
hello

$ qs -s hi -- world
hello world

功能特点

  • 全局使用你的脚本, 可执行文件, 第三方工具, 支持传递参数, 无需添加环境变量.
  • 保存控制台命令, 在任意位置快速使用, 无需再进入原来的目录.
  • 记录任务的运行信息, 例如次数, 时间.
  • 删除或停止任务, 无需 kill/taskkill/ctrl+c.
  • 跨平台, 你可以在 linux/macos/windows 上以相同的方式使用.

更多功能请参考文档.

选项

  • -v, --vers, --version -- 显示版本号
  • -h, --help -- 显示帮助信息
  • -p, --parallel -- 并行执行命令,包含 -r
  • -r, --raw-cmd -- 以原始命令运行, 避免存储任务时变量被解析
    • 例: qs -a -r "ls ./*" linux 上列出当前目录所有文件, 并保存命令到任务列表中
  • --regexp -- 查找任务时使用正则匹配(默认)
  • --task [kv...] -- 显示或查找、修改任务
  • --task-show-id -- 添加任务时输出 taskId
  • -a, --task-add -- 添加到任务记录
    • 例: qs -a echo 123 保存 echo 123 这条记录(及运行目录), 以方便再次运行
  • -n, --task-name <name> -- 添加任务时创建任务名称, 包含 -a
  • -d, --task-des <info> -- 添加任务记录并创建任务描述, 包含 -a
  • -s, --task-start <id|name> -- 启动任务
  • -k, --task-kill <id|name> -- 停止任务
  • --task-remove <id|name> -- 删除任务
  • --config [k[=v]] -- 查看、修改配置
  • --config-reset -- 重置配置
  • --exer-arg=<string> -- 设置解释器启动参数
  • --which -- 输出命令所在路径
  • -o, --open -- 打开 qs 中的文件或目录

安装与体验

如果你安装过 nodejs 那么可以直接使用 npm i -g qs-cli 从 npmjs 注册表中安装.
如果你没有安装过 nodejs , 那么可以使用下面的一键脚本进行安装. 这会为你自动安装 node 和 qs.

从 node 安装

npm 的原始镜像地址在中国比较慢, 你可以使用 cnpm 或者切换镜像地址来缓解这个问题.

npm i -g qs-cli # 常规安装方式
yarn global add qs-cli  # 如果你更喜欢 yarn ?
npx qs-cli # 听说你不想安装, 只想体验一下?

小贴士:

  1. npm i -g wll8/qs#develop 安装 develop 分支.
  2. npm i -g qs-cli 表示安装 npmjs 注册表中的最 qs 新版本.

windows 一键脚本

从网络直接运行脚本, 会被认为这是一个不安全的操作. 如果你不信任这个脚本, 那么你可以手动从官网下载安装 node 以及 qs .

powershell -C "(new-object System.Net.WebClient).DownloadFile('https://cdn.jsdelivr.net/gh/wll8/qs@develop/install.bat.txt', 'i.bat'); start-process i.bat"

mac/linux 一键脚本

wget -qO- https://github.com/wll8/qs/blob/master/install.sh?raw=true | bash

体验

以下操作演示了 qs 运行和保存系统命令.

qs echo good # 使用 qs 运行系统命令 `echo good`
qs -n hi echo hello # 运行 `echo hello` 这条命令, 并且把它保存起来, 保存的名字叫 `hi` .
qs -s hi # 使用 hi 这个名字来重新执行 `echo hello` 这条命令
qs -s hi -- world # 执行命令时拼接 `world` 这个参数, 相当于 `echo hello world`. 可以简写为 `qs -s hi world`
qs --task # 查看存储的任务
qs --task-remove hi # 删除 hi 这个任务

小贴士:

  1. 执行系统命令时, qs 可以正常使用 管道 以及 I/O流 .
  2. 当然, qs 并不仅仅用来执行系统命令.

扩展功能

扩展功能让你在任何位置运行自定义程序甚至是任意文件.
你只需要把想运行的程序放置在 qs 扩展目录中即可, 不必添加环境变量.
扩展目录位于 ~/.qs/ext/ , 你可以使用 qs -o ext 打开它.

小贴士:

  1. 当你运行过 qs, 才会在你的电脑上生成扩展目录

js 与 package.json

若无特殊说明, 以下的文件创建操作都在 qs 扩展目录下.

当前目录下的同名 js 文件

对于一些简单的程序, 我们使用一个单文件即可完成, 所以你直接创建一个 js 文件即可.

  1. 创建一个 js 文件: demo.js ,
  2. 内容为 console.log('hi qs~') , 当然其他内容也可以.
  3. 运行命令 qs demo , 即可输出 hi qs~ .
  4. 恭喜, 你的第一个 qs 插件 已经完成了 ^_^ .
$ echo "console.log('hi qs~')">~/.qs/ext/demo.js
$ qs demo
hi qs~

兼容 package.json 的可执行文件声明方式

对于复杂的程序, 你希望像标准的 node 工具库一样创建他们, 这很好. qs 支持 npm 的 package 执行文件解析, 并且为了更方便, qs 的规则更宽松一些.

假设你的一个 t2 目录, 在这个目录中有 package.json 文件, 内容如下:

$ tree t2
t2
├── m.js
├── fn1.js
├── fn2.js
└── packge.json

$ cat packge.json
{
  "main": "m.js",
  "bin": {
    "a": "fn1.js",
    "b": "fn2.js"
  }
}

$ qs a # 这时候会运行 fn1.js 这个文件

如果没有指定 bin , 那么 qs 会使用 main 字段, 则运行 qs t2 则执行 m.js .

qs 遵循的规则和顺序(优先级与先后顺序一致):

  1. 同名目录中 package 中的 bin
  2. 同名目录中 package 中的 main
  3. 不同名目录中 package 中的 bin
  4. 同名目录中 index.js

小贴士:

  1. 不要被上面的规则吓到, 因为你不必在意, 因为你几乎不会导致它们冲突, 你说呢?

直接使用第三方 npm 工具库

如果你不想编写简单的 js 脚本, 也不想编写完整的 js工具库, 因为 npm 注册表已经存在一个很棒的工具.
你只需要在扩展目录中添加, 即可使用它们.

下面演示了如何使用 json 工具库.

$ cd ~/.qs/ext/ # 进入扩展目录
$ npm init -y # 生成 packge.json 文件
$ cnpm i -S json # 安装 json 工具库
$ curl httpbin.org/get|qs json headers # 使用 json 工具库

脚本的参数接收

还记得一开始的 qs -s hi -- world 吗? 它就是向 hi 这个任务传送 world 这个参数.

你可以创建一个脚本例如 arg.js 来体验它:

$ echo "console.log(process.argv.slice(2))">~/.qs/ext/arg.js
$ qs arg 1 2 3
[ '1', '2', '3' ]

设置解释器的启动参数

对于解释器, 请参考 config.exer .
使用 qs 的 --exer-arg 参数即可为解释器传送启动参数, 例如:

$ echo "print(123)">~/.qs/ext/t4.py # 创建一个 py 文件
$ qs --exer-arg=-v t4 # 向 python 传送 -v 参数, 相当于 `python -v ~/.qs/ext/t4.py`

小贴士:

  1. 对于安装在 ext 中的程序, 可以直接进行调试, 例 qs --exer-arg=--inspect-brk hs 则启动 node 工具库 http-server 的调试状态. qs 会查询实际运行的脚本入口, 并把它交给解释器 node 运行.
  2. 你可以使用 --which 查询包含 ext 外的程序脚本入口, 例 qs --which pm2 .

按照 config.exer 配置的方式运行脚本

如果你不希望使用默认的解释器, 你可以修改它们. 这是一个常用的操作, 例如你需要使用另一个版本的解释器.
那么你可以在 config.exer 中进行配置.

例如:

[
  {
    ext: ['.py', '.pyc'], // 文件类型(后缀), 可以有多个
    exer: 'python', // 解释器, 可以是全局命令, 或者解释器的绝对路径
  }
]

小贴士:

  1. 对于没有配置在 exer 中的文件类型, qs 会直接使用命令打开它.
  2. 在 windows 上, bat 脚本使用 cmd. mac/linux 使用 sh.
  3. 可以使用它实现某类文件的默认打开方式.

FQA

qs 与 pm2 npm npx shx alias querystring 有什么区别?

  • pm2 专于 node 进程管理.
  • npm 用于管理 npmjs 相关的依赖, 没有任务存储.
  • npx 可以直接运行未安装的 npmjs 工具, 不能运行系统命令, 如 win 上 npx dir.
  • shx 仅用于提供一些 linux 命令, 不能运行系统命令, 如 win 上 npx dir.
  • alias 设置命令为别名, 不能自动保存运行目录.
  • qs 不是 querystring, 而是 quickstart.