nodejs
前言
之前使用node写过websocket的聊天室,也写过一些mqtt通信的小工具,但是因为平时使用少,加上没有系统的记录笔记,每次使用都得去百度查相关的库和方法,加上最近研究webpack的配置,用到了nodejs语法,很多库方法的一查再查让人很是疲累,索性搞webpack前再系统学习一边nodejs吧,这次把所有用的基础知识都记录下来,自己有个整理,也方便之后的查询。
这一系列笔记都是重听大地老师的nodejs课程记录的笔记,大地老师讲的很好,真是希望多一些这样的乐于分享知识的老师。
nodejs是什么
nodejs是可独立运行于计算机的JavaScript,利用v8引擎替代浏览器啦解析js代码,与java,php不同的是nodejs不仅可以执行实现应用还可以实现HTTP服务器,不需要apache、tomcat之类的HTTP服务器。
HelloWorld
以http编写一个简单http服务器,先来体验下。
var http = require('http');
http.createServer(function (request, response) {
//发送http头部
//HTTP 状态值:200 ok
//设置HTTP头部,状态码是200,文件类型是html,字符集是utf8
response.writeHead(200, { "Content-Type": "text/html;charset=UTF-8" });
//发送响应数据 "hello world"
response.end("哈哈哈,helloworld");
}).listen(9999);
//终端打印如下信息
console.log("server runing at http://127.0.0.1:9999")
运行程序:
在命令行执行
node helloworld.js
- node调用了v8引擎在本地计算机执行了js程序而不是在浏览器,运行结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T22EVLRS-1575688719161)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191206164642707.png)]
node自启动工具
当编写脚本并修改后需要重新运行node 文件名
命令,可以通过使用supervisior
工具来自动监听源文件,一旦代码修改它会自动重新运行。
安装
npm install -g supervisor
使用
用supervisor替代node
supervisor 文件名.js
Nodejs的模块化
概念
js语言发明之初始是泡在浏览器中的语言,为了简单使用,并没有什么模块话的概念,随着浏览器性能的提高和nodejs的出现,模块化也被社区提出并进行了实现。主要有以下几种
- CommonJS
- AMD
- CMD
nodejs使用的commonJS模块规范。
模块说白了就是基础功能的封装,为了更好的使用类似C语言中的stdio和java中的类库,方便编程人员使用
一般node内置的称为核心模块
,利用c++实现,js来调用。核心模块被编译到了node二进制执行文件中,node进程启动后部分模块直接被加载到内存,这些模块不需要编译执行,速度最快,比如HTTP模块、URL模块、Fs模块,这些都是nodejs内置的核心模块
用户编写称为文件模块
,类似浏览器中执行流程,需要运行时动态加载,速度慢。
用户编写的模块使用CommonJS规范
CommonJs模块化
规范:
- 自定义模块单独定义为一个js文件,模块内部属性和方法外部无法访问
- 模块导出使用
export
或者module.export
命令 - 模块导入使用
require
方式引入。
)]
eg:
自定义模块文件
var tools = {
sayhello: function () {
return "hello world"
},
add: function (x, y) {
return x + y;
}
}
//暴露
exports.sayHello = tools.sayhello;
exports.add = tools.add;
主程序
var http = require("http");//核心模块
var tools = require("./02.tools_module")//自定义模块
console.log(tools.sayHello);
运行结果
第三方模块
nodejs还可以使用第三方模块,第三方模块由包(package)
组成,通过包来对一组具有相互依赖关系的模块进行管理。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
完全符合CommonJS规范的包目录一般包含下列文件
- package.json :包描述文件
- bin:用于存放二进制可执行文件的目录
- lib:用于存放JavaScript代码的目录
- doc:用于存放文档的目录
安装和使用
安装
npm i 第三方模块名 --save
- –save 用于将包的引入信息保存到package.json文件中
导入使用
var mod = require("模块名")
mod.fun.....
NPM
npm 是nodejs的包管理工具,可以下载世界上很多的第三方包。
npm命令
安装
npm install 模块名
//指定版本安装
npm install 模块名@版本
//安装并写入package.json
npm install 模块名 --save //更新package.json文件中dependencies字段值
npm install 模块名 --save-dev //更新package.json文件中devDependencies字段值
卸载
npm uninstall 模块名
查看模块版本
npm info 模块名
查看所有模块
查看所有模块是查看当前项目目录下所有模块,而不是系统的所有模块
npm list
package.json
package.json定义了项目所需要的所有模块以及配置信息。
{
"name": "hello",
"version": "1.0.0",
"description": "this is demo ",
"main": "01.server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
"dependencies": { //当前程序所依赖的第三方包,
"express": "^4.10.1"
},
"devDependencies": {//同样是所以来的第三方包,只会下载模块,而不下载这些模块的测试和文档框架
"jslint": "^0.6.5"
}
}
dependencies字段中后面的版本号含义:
^表示第一位版本号不变,后面两位取最新的
~表示前两位不变,最后一个取最新
*表示全部取最新
###cnpm
npm所有包都存储在国外服务器,国内下载安装速度慢,可以使用淘宝镜像,也可以直接使用cnpm,cnpm是npm的定制版。
cpm的安装方式
npm install -g cnpm --registry=https://registry.npm.taobao.org
生成
npm init --yes //一步到位生成
或者
npm init //一步一步生成