npm发布脚手架流程

一、项目结构

先创建一个脚手架目录,例如:

bash 复制代码
react-ele-cli
├── bin
│   └── index.js     # 脚手架入口文件(可执行命令)
├── package.json
└── README.md

二、编写 CLI 入口文件

bin/index.js

这个文件就是你执行 react-cli create my-app 最终执行的代码。

例如下面的示例:

javascript 复制代码
#!/usr/bin/env node
const { program } = require("commander");
const download = require("download-git-repo");
const inquirer  = require("inquirer")

async function create(projectName) {
  // 第一步:交互选择
  const answers = await inquirer.prompt([
    {
      type: "list",
      name: "template",
      message: "请选择项目模板",
      choices: [
        { name: "Vite + React", value: "vite-react" },
        { name: "Webpack5 + React", value: "webpack5-react" },
        { name: "Vue3 + Vite", value: "vue3-vite" }
      ]
    },
    {
      type: "list",
      name: "pkgTool",
      message: "请选择依赖安装方式",
      choices: ["npm", "yarn", "pnpm"]
    }
  ]);

  console.log("你选择的结果:", answers);

  // 根据选择的模板去下载
  const templateRepoMap = {
    "vite-react": "direct:https://github.com/.../ReactProject.git",
    "webpack5-react": "direct:https://github.com/.../ReactProject.git",
    "vue3-vite": "direct:https://github.com/.../ReactProject.git"
  };

  const repo = templateRepoMap[answers.template];

  console.log(`开始生成项目: ${projectName}`);

  download(repo, projectName, { clone: true }, (err) => {
    if (err) {
      console.log("下载失败", err);
    } else {
      console.log("项目创建成功");

      console.log(`
    下一步操作:
    $ cd ${projectName}
    $ ${answers.pkgTool} install
    $ ${answers.pkgTool} run dev
      `);
    }
  });
}


program
  .command("create <project>").description("请选择项目模板")
  .description("创建一个项目")
  .action((project) => {
    create(project);
  });

program.parse(process.argv);

需要注意的是,更换自己发布在github的模板地址,当然也可以是发布在其他地方的模板如下。比如gitlab等公开的模板资源。

Git 仓库模板(推荐)

远程 ZIP(axios 下载后解压)

脚手架内置 template 文件夹(简单)

三、配置 package.json

javascript 复制代码
{
  "name": "react-cli",
  "version": "1.0.0",
  "description": "发布npm脚手架文件",
  "main": "index.js",
  "bin": {
    "react-cli": "bin/index.js"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "commander": "^14.0.2",
    "download-git-repo": "^3.0.2"
  }
}

bin 字段代表安装后生成的全局命令,这个自己来取,名字就是:

bash 复制代码
react-cli

在开发期间你可以本地全局链接:npm link

然后测试:react-cli my-app

四、发布到 npm

登陆 npm

bash 复制代码
npm login

会出现下面,回车就可打开浏览器登录npm,前提是已经注册过npm。

注意到是使用了淘宝镜像源,这时候是发布不到npm官网的,需要切换官方镜像源。

bash 复制代码
如果你是要发布真正 npm 包,建议先切回官方 registry:
npm config set registry https://registry.npmjs.org/
查看当前镜像源:npm config get registry

然后:
npm login
npm publish

发布完成之后可以切回淘宝镜像源:npm config set registry https://registry.npmmirror.com/

发布结果如下则是发布成功,同步在淘宝镜像源也可以全局安装使用:

相关推荐
jay神4 分钟前
【计算机毕业设计】基于Flask+Vue的电影数据可视化与智能推荐系统
前端·vue.js·python·信息可视化·flask·毕业设计·课程设计
FreeTinker6 小时前
HTML本地存储技术解析:localStorage与sessionStorage的原理、差异与应用场景
前端·html
qq_452396236 小时前
第十二篇:《全链路监控与可观测性:前端错误追踪与性能分析》
前端
wangruofeng7 小时前
Phosphor Icons 官网源码拆解:URL 即存储、水波动画与 7362 Star 图标库的架构实践
前端·架构·github
BigTopOne7 小时前
WebRTC Native / Android 开发学习资源整理
前端
excel8 小时前
nuxt 3 升级 nuxt 4 报错之 hasInjectionContext
前端
何以解忧,唯有..9 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
软件聚导航9 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag
恋猫de小郭10 小时前
看懂大模型架构术语,帮助你理解目前常见的大模型开源架构
前端·人工智能·ai编程
yma1610 小时前
通过提示词实现GitHub Pages 和 Nginx 双部署竟然这么简单?
前端