01.nodejs再相识

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模块化

规范:

  1. 自定义模块单独定义为一个js文件,模块内部属性和方法外部无法访问
  2. 模块导出使用export或者module.export命令
  3. 模块导入使用require方式引入。

C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191206172134811.png)]

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);

运行结果

C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20191206172905212.png

第三方模块

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 //一步一步生成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值