实现一个简单的Node.js脚手架方法代码
- 更新时间:2019-11-17 09:58:58
- 编辑:步煜祺
参考资料
正文内容
详解如何实现一个简单的Node.js脚手架
原因
在工作中,需要开发一个脚手架,用于给相关用户提供相关的开发便利性。
适合人群
对前端、Node操作有一定的了解,同时向了解脚手架开发过程或者需要自己实现一个脚手架的开发者。
目标
- 开发一个简单的脚手架,能够提供给用户进行安装。
- 能够输出相关提示。
- 对用户文件进行读写操作。
- 在脚手架中使用Shell脚本。
步骤
开发脚手架
脚手架的开发最开始过程与普通的前端项目相同,需要一个入口文件command.js和配置文件package.json。
与其他配置文件不同的是,需要在package.json文件中加上一下一项:
{ ..., "bin": { "cm-cli": "command.js" } }
在配置文件中增加了此项后,只需要在配置文件根目录下执行npm link命令,即可使用cm-cli --help命令来查看加载的cm-cli脚手架。
如果你发布了你的脚手架,那么在其他用户使用命令npm install -g cm-cli之后,便可以在全局下使用你的脚手架了。
对用户进行提示
在对注释和命令进行提示中,我们需要使用到commander包,使用npm install commander即可进行安装。(如果NPM版本低于5,则需要添加--save参数保证更新package.json配置文件)。
commander是一个提供用户命令行输入和参数解析的强大功能。有需要的可以阅读相关的库文档。在这里我介绍两个用的最多的方法。
option
能够初始化自定义的参数对象,设置关键字和描述,同时还可以设置读取用户输入的参数。具体用法如下:
const commander = require('commander'); commander.version('1.0.0') .option('-a, --aaa', 'aaaaa') .option('-b, --bbb', 'bbbbb') .option('-c, --ccc [name]', 'ccccc') .parse(process.argv); if (commander.aaa) { console.log('aaa'); } if (commander.bbb) { console.log('bbb'); } if (commander.ccc) { console.log('ccc', commander.ccc); }
具体展示如下:
command
该方法能够在命令行增加一个命令。用户在执行此命令后,能够执行回调中的逻辑。具体用法如下:
commander .command('init <extensionId>') .description('init extension project') .action((extensionId) => { console.log(`init Extension Project "${extensionId}"`); // todo something you need });
具体展示效果如下:
对用户文件进行读写操作
通过上面的步骤,我们已经能够完成一个简单的脚手架了。下面,我们需要读取用户配置,同时为用户生成一些模板文件。
读取文件
现在,我们需要读取用户的cm-cli.json配置文件来进行一些配置。
我们可以使用Node.js的fs文件模块来对文件进度读操作,由于此处没有太多难点,因此略去。
写入文件模板
我们提前将模板文件存储在CDN上,再根据本地读取到的相关脚手架配置文件来进行模板的下载。
注:脚手架中读取的路径为使用者使用时当前路径,因此没有办法将模板文件存储在脚手架中进行读取。
我们可以使用诸如request这种库来帮助我们进行文件下载,简化操作步骤。执行npm install request`即可进行安装。
注:在文件写入时建议先判断文件是否存在,再进行覆盖。
使用Shell脚本
与Node.js提供的API函数来看,有些人更加倾向于使用Shell脚本来进行文件操作。幸运的是,我们也可以在我们的脚手架中引入node-cmd来启用对Shell脚本的支持。执行npm install node-cmd即可进行安装。
具体示例如下:
commander .command('init <extensionId>') .description('init extension project') .action((extensionId) => { id = extensionId; console.log(`init Extension Project "${extensionId}"`); cmd.get( ` mkdir -p static/${extensionId} mkdir tmp mkdir tmp/source-file mkdir tmp/build-file curl -o tmp/source-file/index.js https://xxxxxxxx.com?filename=index.js touch tmp/source-file/index.css curl -o tmp/build-file/server.js https://xxxxxxxx.com?filename=server.js curl -o tmp/build-file/router.js https://xxxxxxxx.com?filename=router.js curl -o tmp/build-file/package.json https://xxxxxxxx.com?filename=package.json cp tmp/source-file/* static/${extensionId} cp tmp/build-file/* ./ rm -fr tmp npm install `, (err, data) => { console.log(data) if (!err) { console.log('init success'); return; } console.error('init error'); }); });
我们可以快速的使用Shell脚本来进行文件夹的创建和文件模板的下载。
总结
脚手架想要在终端能够快速执行,可以在package.json配置文件中增加相关字段。
脚手架需要能够读取相关终端输入,可以使用commander库来快速开发。
脚手架需要能够执行Shell脚本,可以使用node-cmd库来快速实现需求。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。
相关教程
-
Node.js区块链开发
这是一本基于一个实际运行的区块链产品,也是开源产品的实践书籍,从代码层面深度完整讲述区块链开发的书籍,通过工程思维,讲解工程实践,真正体现编程技术的工具价值,欢迎下载阅读
大小:23.9 MBNode.js电子书
-
Node.js:来一打(C++ 扩展)
Node.js做为近些年兴盛的这种程序编写运作时,托V8模块的福,在做为后端开发服务项目时会较为高的运作高效率,在许多情景下针对人们的平时开发设计充足用了。但是,它更为开发人员开过
大小:146 MBNode.js电子书
-
写给PHP开发者的Node.js学习指南
Node.js是一套用来编写高性能网络服务器的JavaScript工具包。结合PHP和Node.js,我们可以概览整个Web服务器从起源到现在的历史过程以及其中的改变。 《 写给PHP开发者的Node.js学习指南 》的目的是
大小:3.46 MBNode.js电子书
-
Node.js实战
《Node.js实战(第2季)》作者来自CNode社区点击率颇高、粉丝数万的《一起学node.js》。《Node.js实战(第2季)》没有成为教条式的入门级别,而是真正进入Node.js实战层次。
大小:6.25 MB电子书
-
Node.js硬实战:115个核心技巧
《 Node.js 硬实战:115 个核心技巧 》是一本面向实战的Node.js教程进阶指南。作为资深专家,《Node.js 硬实战:115 个核心技巧》作者独辟蹊径,将着眼点放在Node.js 的核心模块和网络应用,通过精
大小:212 MBNode.js电子书
-
Node.js微服务
Node.js微服务 对如何采用Node.js及其生态工具进行微服务开发的*实践做了全面的介绍,内容包括对微服务架构基本概念及设计原则的讲解,以及如何采用Node.js搭配Seneca、PM2和Docker等现代化工具来
大小:15.3 MB微服务电子书
-
深入浅出Node.js
这书从不一样的角度介绍了Node本质的特性和构造。由首章Node介绍为数据库索引,涉及到Node的各个方面,主题思想包括控制模块体制的揭示、多线程I/O保持原理的呈现、多线程编写程序的讨论
大小:19.3 MBNode.js电子书
-
新时期的Node.js入门
Node.js是一门开源的、为Web而生的语言,具有高并发、异步等特点,并且拥有一个十分活跃的开发者社区。与Ruby、Python等语言相比,Node.js更年轻、更易于没有经验的人上手使用,因此很快在世界各地的开发者中收获了一大批拥趸。
大小:34.8 MBnodejs电子书
-
Node.js调试指南
本书是Node.js实战作者力作,Node.js调试指南,涉及CPU、内存、代码、工具、APM、日志、监控、应用等,本书并不适合Node.js 初学者,适合有一定Node.js 开发经验的人阅读
大小:73.5 MBNode.js电子书