首页主机NODE VIDEO(一起来使用node.js制作一个小视频吧)

NODE VIDEO(一起来使用node.js制作一个小视频吧)

编程之家2024-02-04103次浏览

一、详解如何实现一个简单的Node.js脚手架

NODE VIDEO(一起来使用node.js制作一个小视频吧)

原因

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

适合人群

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

目标

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

NODE VIDEO(一起来使用node.js制作一个小视频吧)

能够输出相关提示。

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

在脚手架中使用Shell脚本。

步骤

开发脚手架

脚手架的开发最开始过程与普通的前端项目相同,需要一个入口文件command.js和配置文件package.json。

NODE VIDEO(一起来使用node.js制作一个小视频吧)

与其他配置文件不同的是,需要在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

touch tmp/source-file/index.css

curl-o tmp/build-file/server.js

curl-o tmp/build-file/router.js

curl-o tmp/build-file/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 制作验证码

node-ccap模块生成captcha验证码

用node做web开发很多都可能碰到需要验证码的地方,之前在github上搜索,有一些比如node-captcha等的类库,都需要依赖第三方的图形处理库或者软件,像我之前安装cario这个图形库时,真是费了好大一番劲,但是其实我们只用到了这些图形库的一点点小功能,比如图片的尺寸修改裁剪,或者生产验证码。

先介绍一下CImg这个c++的图形库吧,CImg是一个跨平台的C++的图像处理库,提供了加载、处理、显示、保存等一系列功能,最吸引人的地方是整个图形库就一个CImg.h这个文件,所以非常的便携绿色环保,带到哪里都可以进行编译使用,不用安装一大推依赖。于是我就想利用这个CImg图形库做一个简单的demo,就从实现验证码这个功能入手,当然可以完全利用这个库来做裁剪图片等其他功能。

ccap模块是基于CImg图形库的封装,让它可以供node使用,由于CImg图形库的便携性,所以ccap模块可以完全不依赖其他任何第三方图形库或者软件而独立工作,也就说如果只是想要生成简单的验证码,只要require这个ccap模块即可。

生成的图片示例:

1、安装:

通用方法:npm install ccap

或者通过github下载,地址:

2、性能:

在2cpu的linux 64位服务器上生成验证码速度可以达到1200次/秒,测试生成的图片是BMP的,jpeg的图片验证码生成速度大约在600次/秒。

3、声明方法:

varccap=require('ccap');

varcaptcha1=ccap();

varcaptcha2=ccap(width,height,offset);

varcaptcha3=ccap({

width:256,//setwidth,defaultis256

height:60,//setheight,defaultis60

offset:40,//settextspacing,defaultis40

quality:100,//setpicquality,defaultis50

generate:function(){//Customthefunctiontogeneratecaptchatext

//generatecaptchatexthere

returntext;//returnthecaptchatext

}

});

可以通过上述代码实例化一个ccap类。

1、不传任何参数,全部使用默认的参数进行生成验证码

2、只传递宽,高,偏移进行实例化,调整图片的大小,和图片中文字的间隔

3、传递一个对象,除了宽,高和偏移,还传递了图片质量以及生成随机数的方法,ccap模块会根据自定义函数return的字符串作为图片验证码的内容,默认是0-9,A-Z的6位随即字符串。

理论上可以生产很多不同的ccap的实例,而且他们之间互相没有影响,所以即使是通过cluster开启多进程的node同时生产验证码也不存在互相锁止的影响。

对于图片质量只对jpeg图片有效,如果没有安装任何jpeg的lib库的话,只能使用bmp未压缩图形了,体积比较大,但是生成速度比较快。

4、使用方法,get():

var ccap= require('ccap');

var captcha= ccap();

var ary= captcha.get();//ary[0] is captcha's text,ary[1] is captcha picture buffer.

var text= ary[0];

var buffer= ary[1];

实例化ccap类之后,会得到captcha对象,这个对象只有一个对外方法,get(),这个方法每次调用都会返回验证码buffer和对应的text字符串内容,保存在数组里,类似这样的结构:

["captcha text","picture buffer"]

5、一个简单的web例子:

varhttp=require('http');

varccap=require('ccap')();//Instantiatedccapclass

http.createServer(function(request,response){

if(request.url=='/favicon.ico')returnresponse.end('');//Interceptrequestfavicon.ico

varary=ccap.get();

vartxt=ary[0];

varbuf=ary[1];

response.end(buf);

console.log(txt);

}).listen(8124);

console.log('Serverrunningat

;

);

上面这个例子会将验证码返回给客户端,并且把对应的验证码的文字输出出来,同时拦截了favicon.ico的请求。

结果如下图:

有兴趣的TX可以下载下来试试,如果安装有jpeg库的话,可以把根目录下的binding.jpeg.gyp覆盖改名为binding.gyp然后rebuild就可以使用jpeg图片作为验证码了,体积会小很多。另外ccap模块做了一些缓存的机制,尽量发挥更好的性能。

目前ccap已经对linux系统支持jpeg验证码,体积从45kb直降到6kb

三、开发一个网站用php还是node.js

你会javascript,肯定学node.js更快一些,因为node.js就是运行在javascript环境下的。此外没有什么是不适合新手的,几乎每一种语言都希望自己被普及,因此都是被设计得让人容易理解和接受的。

和php比,node.js有优势也有劣势。据google自己说,node.js比php、python等都快,尤其在处理大量并行访问的时候。因此如果你要开发的网站,在同一时间会有很多人访问,那么选node.js是不错的;劣势就是太年轻,没有php普及,也许还潜藏着很多问题,毕竟php发展到今天,历经多个版本的修正、无数服务器的检验,而且教程和例子比node.js要多的多。

node.js还有一个小优势,因为都是javascript环境,可以更轻松的发挥javascript动态编程的特点,建立服务器和浏览器之间的动态应用(注意,php也是可以的,只不过在编程的时候程序员要时常切换语言模式,稍微麻烦一些)。

所以,选哪个主要看你的网站是什么样子的。一般的网站,选php就行了。游戏网站,或客户数非常多的应用网站,可以选node.js。

emule 服务器(解决eMule无法连接服务器问题的方法)nero6.0序列号(NERO8.3.6.0)