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

@xdoer/script-runner

v1.0.3

Published

Manage、parse and run scripts

Downloads

36

Readme

ScriptRunner

管理,解析和执行你的脚本

前言

当项目遇到大量重复性代码,我们会想到编写脚本完成重复性工作。

当项目越大,脚本数量也会越来越多,如何管理是难题,如何复用也是难题。

脚本复用,可以将一些定制化的数据通过函数传参传入,这也意味着,脚本需要导出一个函数。

如何管理?可以使用一个入口文件,在入口文件中引入并配置和执行所有的脚本,这样,启动项目时,先运行脚本入口文件即可。

上面介绍的流程有几个缺陷。

  • 全量执行。脚本导出函数,意味着脚本不能直接使用 node 执行,如果项目只需要执行脚本 A,那么只能执行入口脚本文件,此时所有脚本都会执行。
  • 脚本模块规范。所有脚本都只能使用同一种模块规范,才能在入口文件中进行引用。否则还需要借助三方工具进行代码转换

ScriptRunner 可以很好的解决上述问题。它是一款 CLI 工具,可以管理和执行 cjs, esm 和 ts 的代码,你可以用自己喜欢的语法编写脚本。它会根据注册的模块,批量或者单独的执行脚本,一切随你的喜好而来。

安装

npm i @xdoer/script-runner

使用

注册命令

当你全局安装时,命令会被全局注册,意味着你可以在任意地方运行 scr 命令。

当安装到项目中时,你可以直接在 shell 中运行

./node_modules/.bin/scr

你也可以将 scr 写到 package.json 的 script 中, 通过 npm run scr 来运行命令

script: {
  "scr": "scr"
}

配置文件

ScriptRunner 支持直接解析和执行 cjs、esm 和 ts 的脚本代码,配置文件同样支持 cjs,esm 与 ts。示例请查看:example

在没有显示指定配置文件的情况下,程序将在项目根目录,查找 scr.config.[js|ts] 的配置文件.

module.exports = {
  scripts: [
    {
      module: "@prequest/response-types-generator", // 脚本入口文件
      group: 1, // 分组
      // 模块类型
      args: [
        // 脚本参数
        {
          data: [
            {
              path: "https://cnodejs.org/api/v1/topics",
            },
          ],
        },
      ],
    },
    {
      module: "@prequest/response-types-generator/es6/index.js",
      args: [
        {
          data: [
            {
              path: "https://cnodejs.org/api/v1/topics",
            },
          ],
        },
      ],
      // 传入 subProcess 配置项,模块将在子进程中运行
      subProcess: true,
    },
    {
      module: "@prequest/response-types-generator/src/index.ts",
      args: [
        {
          data: [
            {
              path: "https://cnodejs.org/api/v1/topics",
            },
          ],
        },
      ],
    },
  ],
};

编写脚本规范

编写的脚本需要默认导出一个函数,ScriptRunner 会根据配置文件中配置的模块,查找脚本,并将配置的 args 参数传递到脚本中执行。这样的好处在于,我们的脚本可以根据传参,执行不同的逻辑,也为脚本发布 NPM 包,供他人使用提供了便利

脚本 demo:

interface Config {}

export default function main(config: Config) => {

}

export type Args = Parameters<typeof main>;

配置:

import { Config } from "@xdoer/script-runner/lib/types";
import { Args } from "your package";

export default <Config>{
  scripts: [
    {
      module: "your package",
      args: <Args>[{}],
    },
  ],
};

CLI 命令

  • scr -v 版本查看
  • scr -h 查看帮助
  • scr -l 查看配置的脚本
  • scr -r 1 或者 scr -r chokidar 执行第一个脚本或者执行 module 为 index.js 的脚本
  • scr -c /User/xdoer/a.js 指定配置文件
  • scr -g 1 运行分组 1 的脚本