Skip to content

这是一个命令行工具,输入 ESM 源码文件位置后,自动创建一个项目、打包、发布,确保一个指令即可在项目中安装使用,进而支持跨项目使用。

iyowei/create-esm

Repository files navigation

$ create-esm | ce | esm [待拷贝的源码、文件夹...] [选项]

这是一个命令行工具,输入 ESM 源码文件位置后,自动创建一个项目、打包、发布,确保一个指令即可在项目中安装使用,进而支持跨项目使用。

为了较好支持如下需求而诞生了这个项目,

  • 频繁新建、发布 ESM 项目;
  • 可开源的项目就直接托管到 Github 上管理;
  • 使用较现代的模块规范、ES 版本、工程配置等重构既有模块;
  • 能复用的代码都从项目中独立了出去,所以项目里尽是业务代码,确保业务代码的纯净度,从一定程度上提升业务推进的效率;
  • 指数级提高复审精度;
  • TDD 高度可行,指数级提高系统测试覆盖率;
  • 满足发包条件的模块,也必然是经过良好设计的,反向提升系统的质量;
  • ......

目录

使用

被生成的项目具有一下特征,

  • ESM
  • 控制编码风格;(prettier + eslint-config-airbnb-base
  • TDD;
  • Node.js >= v12.20.0;
  • 默认使用 PNPM 包管理器;
  • 默认使用国内 NPM 镜像;
  • 包含基本结构的 README.md;(可以照模子画瓢)
  • 预设 .vscode、.nvmrc、.npmrc、.gitignorerc、.editorconfig 等配置;
  • 在 Github 上托管源码;
  • 发布在 NPM 上;

另外,如果项目要创建在 GitHub 组织下,或发布到特定 NPM 命名空间下,它们都需要被提前手动创建好。

根据命令行提示一步步操作

esm /Users/iyowei/Development/iyowei/create-esm/src/print.js

Kapture 2021-12-16 at 21 24 14

必须提供待拷贝的文件、文件夹,否则执行结果类似于 esm --help

查看命令行参数说明

运行 esmesm --help 即可。

  使用方式
    $ create-esm | ce | esm [指定待拷贝的文件、文件夹] [选项]

  选项
    --name, -n                                 包名(实际安装时使用的名称)
    --description                              描述
    --output, -o                               新建项目的磁盘位置
    --dependencies, -d                         手动指定要安装的依赖
    --sshkey                                   私钥文件地址
    --no-double-check-dependencies             不需要二次确认是否还有其它依赖需要安装
    --no-confirm-github-org                    如果包名有命名空间,则确认是否需要在某个 Github Org 下创建项目
    --breakpoint, -b                           'repo''npm''copy''push''changelog'、’publish‘ 任一,指定任务及其之前的任务都会被执行
    --benchmark                                架设性能测试环境
    --tdd                                      架设单元测试环境

    --version, -v                              查看版本号
    --help, -h                                 查看帮助

  命令
    set                                        设置 create-esm 持久化设置
    reset                                      清空 create-esm 持久化设置
    defaults                                   查看 create-esm 持久化设置

  示例
    $ esm
    $ esm /Users/iyowei/Development/generators/create-esm/src/notEmptyString.js

熟悉命令行参数后,相比交互式命令行界面下输入参数值,可选择命令行参数直供的方式,高效的多。

使用命令行参数直接创建项目

Github 个人账户 下创建 scoped
esm \
/Users/iyowei/Development/iyowei/create-esm/src/lsDir.js \
/Users/iyowei/Development/iyowei/create-esm/src/README.md \ # 打包前,项目中每个模块都有自己的 README.md 文件,比较推荐
-n @iyowei/test-scan-dir \
--personal \
-p "并行扫描文件夹,可在扫描的同时更新或过滤数据,一定程度复用遍历。" \
-o "/Users/iyowei/Development/iyowei" \
--sshkey "~/.ssh/github" \
--no-double-check-dependencies
同名 Github 组织 下创建 scoped
esm \
/Users/iyowei/Development/iyowei/create-esm/src/lsDir.js \
/Users/iyowei/Development/iyowei/create-esm/src/README.md \ # 打包前,项目中每个模块都有自己的 README.md 文件,比较推荐
-n @iyowei/test-scan-dir \
-p "并行扫描文件夹,可在扫描的同时更新或过滤数据,一定程度复用遍历。" \
-o "/Users/iyowei/Development/iyowei" \
--sshkey "~/.ssh/github" \
--no-double-check-dependencies
异名 Github 组织 下创建 unscoped
esm \
/Users/iyowei/Development/iyowei/create-esm/src/lsDir.js \
/Users/iyowei/Development/iyowei/create-esm/src/README.md \ # 打包前,项目中每个模块都有自己的 README.md 文件,比较推荐
-n test-scan-dir \
--github-org iyoha \
-p "并行扫描文件夹,可在扫描的同时更新或过滤数据,一定程度复用遍历。" \
-o "/Users/iyowei/Development/iyowei" \
--sshkey "~/.ssh/github" \
--no-double-check-dependencies

查看持久化配置

esm defaults

更新持久化配置

esm set [key] [value]

运行 esm defaults 了解具体有哪些持久化配置。

最佳实践

  • 打包前,项目中每个模块都有自己的 README.md 文件,比较推荐;

安装

Node Version Badge esm

依赖的工具有几个,部分操作没法儿自动化,不过好在这些事是一次性的,

公钥要添加到 Github 上,另外保存好秘钥位置,私钥要用来建立 安全的 SSH 管道,"@iyowei/create-esm" 通过 --sshkey 命令行参数指定私钥,或者持久化设置 sshkey 即可,运行 esm set sshkey [私钥绝对路径]

另外,还有点基本的持久化 Git 设置,创建项目、提交修改时需要,

  • git config --global init.defaultBranch main
  • git config —-global user.email “you@example.com”
  • git config --global user.name "Your Name"

安装 "@iyowei/create-esm",

NPM

npm i @iyowei/create-esm --global

PNPM

pnpm add @iyowei/create-esm --global

Yarn

yarn global add @iyowei/create-esm

上述都安装、配置好后,就可以顺利使用 "@iyowei/create-esm" 脚手架了。对了,使用时得联网。😃

故事

创建项目、配置项目... 想想还是很耗时、复杂的。简单来看,使用现有的生成器,都是生成一个项目,再增、改文件,再推送到代码仓库,再发布。这个过程,理想情况也得耗时个几分钟,足以打断思路、分散注意力,令人望而却步。

而日常开发活动中,我们都在开发具体的业务项目,不可能一次又一次地像上述一样创建项目,但我们编写的很多代码都的确可以模块化,发包以跨项目使用,但因为上述问题,我们一次次地不考虑这么做,或者催眠自己:等空闲了再做,因为的确有些本末倒置,如果影响到了本分工作,那就毁犊子了。

不过这个问题也不是不可解决。换个思路,我们在写项目代码时,模块化一段代码后,指定从这个代码文件,自动化创建并发布一个项目,即可。一个指令即可在创建项目、发包、在项目中安装使用,也可以跨项目使用,耗时小到几乎可以忽略,也就不存在本末倒置的问题了。

想象下,在项目中,你写好了一个功能,运行一个指令后,就可以在项目中运行 npm i XXX 安装这部分代码,整个耗时可能就几秒钟。

参与贡献

PRs Welcome

其它

"@iyowei/create-esm" 项目使用 @iyowei/create-cli 脚手架生成。

About

这是一个命令行工具,输入 ESM 源码文件位置后,自动创建一个项目、打包、发布,确保一个指令即可在项目中安装使用,进而支持跨项目使用。

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published