当前位置: 首页 > 后端技术 > Node.js

从零开始写一个npm包,一键生成react组件(偷懒==提高效率)

时间:2023-04-03 19:01:10 Node.js

前言最近在写项目开发新模块的时候,需要创建一个组件(包括组件css,index.-2)后,发现效率太低,而且极易出错,于是写了一个npm包,减少工作量,下面一步步创建自己的npm仓库,第一步创建package.json文件,打开终端,输入如下命令:npminit然后会提示输入项目名称、版本、项目描述、入口文件……一直回车直到出现Isthisok?(yes),然后输入yes创建一个package.json文件完成,然后在根目录下创建一个index.js文件,文件内容是:#!/usr/bin/envnode//告诉节点使用终端运行constfs=require('fs');//文件系统constprogram=require('commander');//终端输入处理框架constpackage=require('./package.json');//获取版本信息program.version(package.version,'-v,--version').command('init').action(name=>{console.log(name)})program.parse(process.argv);安装commander:cnpmi-dcommander接下来我们可以看到效果,安装并执行nodeindex.js-voutput:1.0.0nodeindex.jsinitheaderoutput:headernodeindex.js-houtput:Usage:index[options][command]Options:-v,--version输出版本号-h,--help输出使用信息Commands:init代码运行正常,然后修改package.json中的b中,添加如下代码:"bin":{"temp":"index.js"},到这里我们就完成了第一步,如何发布npm包呢?流程如下:首先在[npm官网][1]注册一个账号(如果忽略),注册后执行npmadduser,依次输入账号、密码、邮箱、npm版本patchnpmpublish,提交npm发布过程踩到的陷阱。使用npm提交,不要使用cnpm,每次修改项目名都需要修改版本号npmversionpatch。有npm仓库吗?使用npm安装,cnpm会有短暂的延迟npmitemplate-react-cli-gtemp-voutput:1.0.0tempinitfooteroutput:footer是我们npm的,可以正常使用。接下来丰富我们的npm包,先安装依赖:cnpmi-ddownload-git-repohandlebarsinquirerlog-symbolsora安装完成后,丰富我们的函数index.js文件如下:#!/usr/bin/envnodeconstfs=require('fs');constprogram=require('commander');constdownload=require('download-git-repo');//下载模板文件constchalk=require('chalk');//美化终端constsymbols=require('log-symbols');//美化终端consthandlebars=require('handlebars');//修改模板文件的内容constora=require('ora');//提示下载varinquirer=require('inquirer');//提示文本constpackage=require('./../package.json');//获取版本信息constre=newRegExp("^[a-zA-Z]+$");//检查文件名是否为英文,只支持英文程序.version(package.version,'-v,--version').command('init').action(name=>{if(!re.test(name)){//检查文件名是否为英文console.log(symbols.error,chalk.red('Error!PleaseentertheEnglishname'));return}if(!fs.existsSync(name)){//检查是否有这是在项目文件查询器.prompt([{type:'list',name:'type',message:'Pleaseselectatemplatetype?',choices:['react-component------ES6component','react-function------函数组件','react-redux------ES6组件',],},]).then(answers=>{//回调console.log(symbols.successafteruserselection,chalk.green('开始创建......,请稍候'));constspinner=ora('正在下载模板...');spinner.start();consttype=getType(answers)download(`github:NewPrototype/template/#${type}`,name,err=>{if(err){spinner.fail();}else{微调器。成功();varfiles=fs.readdirSync(名称);for(leti=0;i{if(err){console.log('---error');}计数++;if(count+1==files.length){//排除index.js文件console.log(symbols.success,chalk.green('模板创建成功'));}});}}});});}else{console.log(symbols.error,chalk.red('同名模板'));}});程序.parse(process.argv);constgetType=(type)=>{letstr='master';switch(type.type){case"react-component------ES6component":str="component"break;case"react-function-----函数组件":str="master"break;case"react-redux-----ES6组件":str="redux"break;默认值:中断;}returnstr}然后重新提交文件到npm仓库,方法和上面发布过程一样,发布完成后:npmitemplate-react-cli-g先查看版本号temp-v输出:1.02然后查看函数:tempinitheaderoutput:?请选择模板类型?(使用方向键)?react-component------ES6组件react-function-----函数组件react-redux-----ES6组件选择需要的选项,回车输出:?Startcreating........,pleasewaitWaiting?Downloadingthetemplate...WaitingforthedownloadtocompleteOutput:?模板创建成功后,可以看到当前目录下已经创建了一个header文件夹,里面有js文件和stylcss文件。整个过程到这里就完成了,这里是下载Template文件的模板地址,你也可以自己写一个适合自己风格的模板文件。后记有了node,我们可以做很多事情,以后开发新模块的时候可以偷懒了!竖起大拇指怎么样?githubhttps://github.com/NewPrototy...模板githubhttps://github.com/NewPrototy...