问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用Grunt脚手架快速创建Node.js项目

发布网友 发布时间:2022-04-20 06:09

我来回答

2个回答

懂视网 时间:2022-05-14 23:37

本篇文章主要介绍了如何实现一个简单的Node.js脚手架,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

原因

在工作中,需要开发一个脚手架,用于给相关用户提供相关的开发便利性。

适合人群

对前端、Node操作有一定的了解,同时向了解脚手架开发过程或者需要自己实现一个脚手架的开发者。

目标

  1. 开发一个简单的脚手架,能够提供给用户进行安装。

  2. 能够输出相关提示。

  3. 对用户文件进行读写操作。

  4. 在脚手架中使用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库来快速实现需求。

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

使用JS+canvas如何制作圆锥

有关JS排序算法总结

有关js事件的循环机制(详细教程)

使用javascript如何实现QQ空间相册展示

如何自定义PC微信扫码登录

有关jade模板引擎的使用详情

有关JS希尔排序算法(详细教程)

热心网友 时间:2022-05-14 20:45

1. 安装Node.js,npm工具(略)。
2. 安装grunt, grunt-init
npm install -g grunt-cli
npm install -g grunt-init

3. 下载脚手架:grunt-init-node - Create a Node.js mole, including Nodeunit unit tests.
git clone git@github.com:billfeller/grunt-init-node.git ~/.grunt-init/node

注意,其默认路径为~/.grunt-init/xxxx,如果下载到默认路径,后续只需要通过grunt-init xxxx就可直接初始化;若下载到私人指定路径时,则grunt-init /path/to/template使用绝对路径来初始化。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
和面的和是什么读音? win10 应用打不开。全都打不开。 进入win10打不开软件 win10电脑软件都打不开是什么原因win10突然软件都打不开软件是怎么回事... 软件打不开怎么办win10电脑点不开软件最简单办法 请问下,离厦门市岛内的台湾路的国联大厦最近的建设银行和农业银行... 从巴黎都市到建设银行怎么坐公交车,最快需要多久 东莞万江官桥窖离建设银行哪路车最近? 建行七支分行有那些公交车经过 佛山哪里有飞越丛林拓展 如何运行一个nodejs 程序 如何利用Node.js 构建分布式集群 初学nodeJS,想做一个项目练习,也是准备面试需要... 有没有前端基础教程? 如何快速部署Node.js项目 中国政务服务网安装管道液化气的有关规定如何申请... 民国时期可有液化汽 气液两相石油气瓶商户可用吗? 液化气的正确使用方法 中江县有没有汽车液化气安装 煤气罐充满气十分钟路程可以吗 液化气的煤气罐在温度40度的条件下,可以放12个小时吗 一般1吨液化气可以气化成多少立方的气体?有没有固... 怎样正确使用液化气 液化气中C2组份如何控制? 燃气报警器 液化气和天然气是通用的吗 液化气和硫酸中和对钢材会有什么腐蚀性 用液化气组成语 液化气的密度是多少? 1KG液化气发热量为多少大卡 用Node.js 做全栈开发电商平台合适吗,性能怎么样 现在Node.js的开源项目 有哪些 焦点访谈是几点开始几点结束 焦点访谈是哪个频道 焦点访谈和新闻1+1的区别 2015《焦点访谈》评价 《焦点访谈》是哪一年创建的,主持人主要有哪几位? 今晚焦点访谈的内容是什么? 《焦点访谈》和过去相比有哪些变化? 学历教育指的是什么? 央视焦点访谈是干什么的? 学历教育是什么 学历教育和非学历教育的区别 《焦点访谈》开头语是什么? 怎么评价《焦点访谈》?如今是否变味了? 什么是学历教育 焦点访谈热线电话及投诉电话是多少? 焦点访谈的电话是多少 学历教育包括哪些 今晚的焦点访谈是什么内容? 焦点访谈栏目组电话号码多少?