👽 概论
脚手架开发完成之后,当然得发布到NPM上啊(不要问我为什么)。今天我们就来着重讲讲如何发布包至NPM(在这块之前会为脚手架增加两个小功能:远程仓库创建 + 依赖下载,不感兴趣的可以直接跳到发包的章节)。
👽 远程仓库创建
项目模板生成之后,很多时候我们会同步创建项目的远程仓库,然后上传项目模板并将仓库地址共享给团队伙伴。这一过程繁琐且毫无技术含量,那就交给代码自动执行吧!
🚩 配置交互项
首先确认用户需不需要自动生成远程仓库:
/*
* @FileName: prompts.js
* @Description:交互项
*/
const chalk = require('chalk');
const PROMPTS = (isFile, appName) => {
return {
···
needCreateRepo: {
name: 'needCreateRepo',
type: 'confirm',
message: `是否需要创建远程仓库:`,
},
},
};
};
module.exports = PROMPTS;
🚩 定义远程仓库生成工具
此处主要用shelljs
库来在node中调用git的repo创建命令:
/*
* @FileName: createRepo.js
* @Description:创建远程仓库
*/
const shell = require('shelljs');
async function createRepo(appName, repoUrl) {
// 拼接待创建仓库地址
const projectUrl = `${repoUrl}/${appName}.git`;
// 执行git命令
const info = shell.exec(`git push --set-upstream ${projectUrl} master`);
// 输出结果
if (info.stdout) {
await clearConsole('green', `** 远程仓库创建成功:${projectUrl} **`);
} else {
await clearConsole('red', `** 远程仓库创建失败 **`);
}
}
module.exports = createRepo;
🚩 主逻辑中引入此功能
/*
* @FileName: create.js
* @Description:cli-create命令
*/
···
const generateFile = require('../utils/generateFile');
async function create(appName) {
···
// 切换至项目目录
shell.cd(appName);
const { needCreateRepo } = await inquirer.prompt(newPrompts['needCreateRepo']);
// 定义仓库地址
const repoUrl = `http://xxx/front`;
// 选‘是’时执行代码
needCreateRepo && createRepo(appName, repoUrl);
}
···
👽 依赖下载
同样的思路我们来做下依赖下载功能。
配置交互项
/*
* @FileName: prompts.js
* @Description:交互项
*/
const chalk = require('chalk');
const PROMPTS = (isFile, appName) => {
return {
···
needInstallPackages: {
name: 'needInstallPackages',
type: 'confirm',
message: `是否需要下载项目依赖:`,
},
};
};
module.exports = PROMPTS;
🚩 定义依赖下载工具
/*
* @FileName: installPackages.js
* @Description:依赖下载
*/
const shell = require('shelljs');
const chalk = require('chalk');
async function installPackages() {
console.log(chalk.yellow('即将开始下载项目依赖'));
// 这里默认使用了yarn,也可以做成让用户决定用那种包管理器
const info = shell.exec(`yarn`);
// 判断结果
if (info.stdout) {
await clearConsole('green', `** 依赖下载成功 **`);
} else {
await clearConsole('red', `** 依赖下载失败 **`);
}
}
module.exports = installPackages;
🚩 主逻辑中引入此功能
/*
* @FileName: create.js
* @Description:cli-create命令
*/
···
const generateFile = require('../utils/generateFile');
async function create(appName) {
···
// 目前仅web项目需要下载依赖
if (appType === 'web') {
const { needInstallPackages } = await inquirer.prompt(newPrompts['needInstallPackages']);
needInstallPackages && installPackages();
}
}
···
👽 NPM包的发布
这部分其实更简单,发布时切记NPM源必须为官方源(https://registry.npmjs.org/
):
🚩 首先请在NPM官网注册一个NPM账号,记住你的用户名以及密码。
🚩 执行命令npm adduser
,依次输入用户名、密码以及邮箱。
🚩 执行命令npm publish
发布NPM包,完成!
🚩 全局安装你的NPM包后,就可以正常使用脚手架命令啦(记得先执行npm unlink
解除关联)!
👽 附注
欢迎查看脚手架源码,或下载NPM包体验:
npm i V9-cli -g
。