nodejs脚本
‘壹’ node.js是什么
Node.js 是一个基于 Chrome V8 引擎的javaScript运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。
Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。
Node对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。V8引擎执行Javascript的速度非常快,性能非常好。Node是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node 使用事件驱动, 非阻塞I/O模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。
(1)nodejs脚本扩展阅读:
Node采用一系列“非阻塞”库来支持事件循环的方式。本质上就是为文件系统、数据库之类的资源提供接口。向文件系统发送一个请求时,无需等待硬盘(寻址并检索文件),硬盘准备好的时候非阻塞接口会通知Node。
该模型以可扩展的方式简化了对慢资源的访问, 直观,易懂。尤其是对于熟悉onmouseover、onclick等DOM事件的用户,更有一种似曾相识的感觉。
‘贰’ nodejs 是什么
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,一个让JavaScript 运行在服务端的开发平台,它让JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。
Node.js底层是JavaScript,不过它不能帮助我们实现页面特效,偏重点是后端编程。因为Node.js执行速度非常快,因此可以将Node.js当做前后端的中间者,比如要频繁从数据库删除数据,那么可以通过Node.js搭建web服务器,通过node web服务器来连接数据库来删除,速度快速。
如果满意,望采纳,谢谢!
‘叁’ node js-nodejs怎么获取脚本所在的路径
nodejs提供了一个path的模块,它提供了一系列的工具还是,用于处理文件和目录的路径。引入模块:
constpath=require('path');
1、获取一个文件的目录名 path.dirname()
constfilepath='/tmp/demo/js/app.js';//脚本路径
console.log(path.dirname(filepath));//输出:/tmp/demo/js
2、获取当前工作进程的目录
console.log(process.cwd());
‘肆’ 手把手教你使用nodejs编写cli(命令行)
前端日常开发中,会遇见各种各样的cli,比如一行命令帮你打包的webpack,一行命令帮你生成vue项目模板的vue-cli,还有创建react项目的create-react-app等等等等。这些工具极大地方便了我们的日常工作,让计算机自己去干繁琐的工作,而我们,就可以节省出大量的时间用于学习、交流、开发、 逛steam 。
但是有时候一些十分特别的需求,我们是找不到适合的cli工具去做的。比如说,你的项目十分庞大,你给项目添加一个新的路由,要经过 创建目录 -> 创建.vue文件 -> 更新vue-router的路由列表 这一趟流程,就算快捷键创建目录文件用得再熟悉,也比不过你一行命令来得快,特别是路由目录嵌套深,.vue文件初始化模板复杂的时候。
所以呢,何不为自己项目写一个cli?就专门做这些繁琐的活?
nodejs的cli,本质就是跑node脚本嘛,基本上每位前端er都会:
然后命令行调用
可以做得更逼真一点,我们在package.json里面的scripts字段上添加一下脚本名:
然后命令行调用:
但是,看到这里你肯定会说,人家webpack还有vue-cli都是“有名字”的!什么 vue-cli init app 、 webpack -p 的,多漂亮,看看这个命令行, node index.js ,还 npm run hello ,谁不会啊,丑不拉几的,怕又不是来水文章的哦?差评!!
别急啊各位大人,接下来就说说,如何给这个node脚本起个名字。
姑且,先把这个cli的名字命名为 hello-cli ,就是我们能够在命令行里面,输入 hello-cli ,然后它就打印一句 hello world ,没有 node 也没有 npm ,就是:
这样,你的第一个cli脚本就成功安装了,可以在命令行里面,直接敲你的cli名字,看看结果输出吧。
另外,如果你仅希望你的cli脚本仅在项目里执行,则需要在你项目里面新建一个目录,重复上述的操作,只是在第三步的时候,不要llink到全局里面去,而是使用 npm i -D file:<你的脚本cli目录路径> ,把它当成项目的依赖安装到node_moles里面去,如果安装成功,那么在项目的package.json你会看到多了一条依赖,这条依赖的值不是版本号,而是你脚本的路径。然后在node_moles里面会有一个.bin目录,里面就存放着你的可执行文件。
当然,这样安装的cli脚本,必须在项目的package.json的scripts字段上声明脚本命令,然后通过 npm run 的方式执行。
哦?这样子使用的话不就回到最最最开始的时候那种原始的 npm run hello 一样么。
是的,但是有质的区别。使用 node index.js 这种方式调用的话固然简单灵活,但是严重依赖脚本路径,一旦目录结构发生变动,写在scripts的命令就要更改一次;但是使用npm安装之后,本地的cli脚本就被拉到node_moles里面,目录结构变动对其影响不大。其次是不利于分享与发布,如果你想把你的cli脚本发布出去,那么有一个好听响亮的名字,比起在说明文档里面告诉使用者如何找到你的脚本路径再用node执行它,简直好上那么一万倍不是么?
这里也给我们提供了一个cli开发流程思路:
名字有了,输出也有了,看看我们跟那些大名鼎鼎的cli工具,在形式上还差点啥?对了,人家可以支持不同参数选项的,还可以根据输入的不同,产生不同的结果。
这样吧,我们给这个cli加一个功能,既然叫 hello-cli ,那不能只会 hello world 吧,必须要见谁就说 hello 才行:
虽然这个功能很简单,但是至少也是实现了“根据输入的不同,产生不同结果”的效果。
命令行上的参数,可以通过 process 这个变量获取, process 是一个全局对象而不是一个包,不需要通过 require 引入。通过 process 这个对象我们可以拿到当前脚本执行环境等一系列信息,其中就包括命令行的输入情况,这个信息,保存在 process.argv 这个属性里。我们可以打印一下:
打印结果:
可以看出,argv是个数组,前两位是固定的,分别是node程序的路径和脚本存放的位置,从第三位开始才是额外输入的内容。那么实现上面的功能就很简单了,只要读取argv数组的第三位,然后输出出来就可以了。
npm社区中也有一些优秀的命令行参数解析包,比如 yargs ,tj的 commander.js 等等
如果你想使用比较复杂的参数或者命令,建议还是用第三方包比较好,手写解析太耗精力了。
现在,你可以自由自在的写你自己的cli脚本了。
如果你希望写一个项目打完包自动推上git的cli,或者自动从git仓库里面拉取项目启动模板,那么,你需要通过node的 child_process 模块开启子进程,在子进程内调用git命令:
不仅是git命令,包括系统命令、其他cli命令都可以在这里执行。特别是系统命令,使用系统命令对文件目录进行操作,效率比fs高到不知道哪里去了。
社区上也有一些不错的包,比如阮一峰老师推荐的 shelljs
如果你不那么希望你的cli用起来那么“硬核”,希望更人性化一点,比如提供一些友好的输入、提示啊,给你的输出加点颜色区分重点啊,写个简单的进度条啊等等,那么你就需要美化一下你的输出了。
除了颜色这部分,不使用第三方包实现起来非常繁琐复杂,其他的功能,都可以试试自己写。
颜色部分使用了第三方包 colors ,这里就不演示了。
其他都是由nodejs自带的 readline 模块实现的。
绘制的思路跟canvas绘制动画一样,只不过canvas是清除画布,而命令行这里是通过 readline.clearScreenDown 清除输出。
这样,一个简易的,人性化的,带点点进度条动画的命令行cli工具就写好了,你也可以发挥你的想象力,去写一些更有趣的效果出来。
毕竟我们前端,有浏览器我们可以写动画,没了浏览器我们一样可以写动画。
‘伍’ .net环境下如何使用node.js
//你要先有一个nodejs的javascript的脚本,内容是:
console.log("Hello world");
//然后在你的asp.net里面:
using System.Diagnostics;
using System.IO;
Process p=Process.Start("你的nodejs的executable","你的上面的那个javascript脚本");
//然后nodejs输出给你的hello world在p.StandardOutput里面:
StreamReader sr= myProcess.StandardOutput;
string hello_world_string=sr.ReadLine();
//最后你要等待node的process退出:
p.WaitForExit();
p.Close();
‘陆’ nodejs 写好的脚本可以在没有node.js的环境下运行吗
使用:
>>> @memo
>>> def fib(i):
>>> if i < 2: return 1
>>> return fib(i-1) + fib(i-2)
‘柒’ nodejs可以做什么
nodejs是谷歌推出的一个JavaScript平台,即在这个平台上编写程序用的是js脚本语言。理论上来说,通过nodejs,同时借助一些模块和组件,能够实现很多其他编程语言才能实现的功能,比如传统的桌面软件的开发、服务端程序的开发等等。当然可能性能方面还有待加强(到底用nodejs做其他方面的开发性能如何我也不清楚,瞎猜的)。
‘捌’ nodejs版本的脚本压缩和compo工具怎么使用
一、下载并安装NodeJS for Windows 0.6.5 或进入NodeJS官网下载最新版本。
二、查看版本:
运行cmd
node -v
npm -v
如果上诉两个命令出错,请打开系统环境变量Path,直接点确定。再试。
三、安装UglifyJS 这里我们安装最新的版本,具体版本可在npm官网查看,uglify-js版本页面。
npm install uglify-js -g
然后等待命令完成,这个过程时间可能有点长。
如果出错请删除
C:\Users\Administrator\AppData\Roaming\npm 内相关内容
C:\Users\Administrator\AppData\Roaming\npm-cache 内相关内容
C:\Users\Administrator 下的错误信息文件
然后再次运行
四、修改配置
上述安装后自动生成的配置文件是不可直接使用的,我们需要手工去修改。
打开C:\Users\Administrator\AppData\Roaming\npm\uglifyjs.cmd
内容为:
:: Created by npm, please don't edit manually.
"%~dp0\.\node_moles\uglify-js\bin\uglifyjs" %*
修改为:
:: Created by npm, please don't edit manually.
@IF EXIST "%~dp0"\"node.exe" (
"%~dp0"\"node.exe" "%~dp0\.\node_moles\uglify-js\bin\uglifyjs" %*
) ELSE (
node "%~dp0\.\node_moles\uglify-js\bin\uglifyjs" %*
)
五、使用uglifyjs对javascript进行压缩美化
压缩:
uglifyjs f.js > f.min.js
美化:
uglifyjs -b f.min.js > f.b.js
‘玖’ nodejs怎样写post脚本
HTML页面内容
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>Title</title>
</head>
<body>
<formaction="http://127.0.0.1/dopost"method="post">
<inputtype="text"name="name"><br><br>
<inputtype="text"name="age"><br><br>
性别:<br>
<inputtype="radio"name="sex"value="男">男
<inputtype="radio"name="sex"value="女">女<br><br>
爱好:<br>
<inputtype="checkbox"name="like"value="睡觉">睡觉
<inputtype="checkbox"name="like"value="画画">画画
<inputtype="checkbox"name="like"value="游戏">游戏<br><br>
<inputtype="submit">
</form>
</body>
</html>
NODEJS的公式,如下:
varhttp=require('http');
varquerystring=require('querystring');
varserver=http.createServer(function(req,res){
//如果你的访问地址是这个,并且请求类型是post
if(req.url=='/dopost'&&req.method.toLowerCase()=='post'){
varallData='';
//下面是post请求接收的一个公式
//node为了追求极致,它是一个小段一个小段接收的。
//接受了一小段,可能就给别人去服务了。防止一个过大的表单阻塞了整个进程
req.addListener('data',function(chunk){
allData+=chunk;
console.log('数据:'+allData);
});
//全部传输完毕
req.addListener('end',function(){
varoData=allData.toString();
variDa=querystring.parse(oData);
res.end('success');
console.log(iDa);
console.log(iDa.like);
console.log(iDa.name);
console.log(iDa.sex);
});
}
})
server.listen(80,'127.0.0.1');