七天学习nodejs学习笔记
来源:互联网 发布:linux vi 删除多行 编辑:程序博客网 时间:2024/05/17 09:18
nodejs的安装
nodejs简介
nodejs就是javascript的运行环境,通过它计算机才可以识别我们的js代码.
window安装
经济有限,用的就是windows,只说这个,现在的安装很方便了,把nodejs理解问一个应用软件,比如QQ,下载安装包,点击安装就好。
nodejs官网
这里要说下,nodejs的版本更新非常快,所以动态更新,很有必要,网上也有介绍,目前我安装的是最新的,等啥时候落伍了,亲自试验,再补充说明
重要概念介绍
环境搭建好了,说明我们可以写js代码了,
模块
在一个项目中,为了管理代码,合理组织功能,需要建立很多js文件,一个文件就是一个模块,它们都是独立的,通过方法把它们联系在一起,就组成了整个项目这个大应用。
模块的分类
- nodejs自带的模块,比如http fs 这些,这些都是二进制模块,使用C/C++编写的
- 网上写好的模块,从npm仓库中引用的
- 自己写的模块,就是你写的一堆堆的js文件
当然,模块的分类比这要细,前期理解这个就行了,后面熟悉了,可以看看《深入浅出nodejs》,具体细分模块因为不同的模块,加载方式不一样,对应的速度和具体细节也不一样,这里知道有这回事就好。
怎么把它们联系到一起,这就需要require
,module
,exports
require
这个用来在当前模块调用其它模块的功能和对象,返回的 是一个模块对象。
var http=require("http");//参数直接为模块名,常用语node自带核心模块和npm库模块,可以不带.js后缀名,var user=require("./user.js");//自己写的模块通常是以相对(以`./`或者绝对(以'/或者C:盘符)路径来调用var json=require("user.json");//也可以调用其它文件(.json)
exports
当我们使用require
调用其它模块返回的是那个模块的导出对象,什么意思呢?比如当前A文件调用B文件,B中有一个对象c,需要,先把c通过exports暴露出来,A才能调用这个c对象,不过不暴露的话,A即使调用了B,也无法操作c。 module
如果说exports
是被调用返回的导出对象的话,那么,module
是获取当前模块的一些信息,包括exports
那么我既然可以获取到exports
自然可以改变它了,而module
目前主要的作用也就是这个,通常exports
返回的是一个普通对象,但通过这个可以把它改成一个函数
module.exports = function () { console.log('Hello World!');};
模块的初始化
一个模块中的JS代码仅在模块第一次被使用时执行一次,并在执行过程中初始化模块的导出对象。之后,缓存起来的导出对象被重复利用。并不会因为后续调用,而重新初始化
主模块
通过命令行参数传递给NodeJS以启动程序的模块被称为主模块。主模块负责调度组成整个程序的其它模块完成工作,如express的app.js
本章介绍了有关NodeJS的基本概念和使用方法,总结起来有以下知识点:
NodeJS是一个JS脚本解析器,任何操作系统下安装NodeJS本质上做的事情都是把NodeJS执行程序复制到一个目录,然后保证这个目录在系统PATH环境变量下,以便终端下可以使用node命令。
终端下直接输入node命令可进入命令交互模式,很适合用来测试一些JS代码片段,比如正则表达式。
NodeJS使用CMD模块系统,主模块作为程序入口点,所有模块在执行过程中只初始化一次。
除非JS模块不能满足需求,否则不要轻易使用二进制模块,否则你的用户会叫苦连天
代码的组织和部署
建房子先把地基建立起来,以后方便。所以要合理组织代码和结构
node_modules
看foo/bar
方式加载模块,上面介绍的两种相对绝对路径加载方式,耦合度太紧了,万一模块的位置变了,就会出问题。可以使用另外一种解决方案。大致原理就是每个文件夹内建立一个node_modules
文件夹,把我们的模块都放进去,这样,搜索的时候,先从最底层的node_modules
开始找,找不到再往上,一直到根目录。
/home/user/node_modules/foo/bar /home/node_modules/foo/bar /node_modules/foo/bar
NODE_PATH环境变量
这个就是新添加一个环境变量,比如你有一个文件夹,里面有很多文件,你使用绝对路径调用的话,要把这个文件夹的路径+’文件名.后缀‘,但是如果你把文件夹路径加入到环境变量的话,再调用这个文件夹内的内容时,就可以直接输文件名.后缀,调用了。你可以添加多个环境变量,用;
分割
包
npm肯定知道,了解node历史知道npm的作用,现在已经默认随node安装npm了。包就是很多小模块的集合组成一个大模块,需要一个包入口然后通过包入口模块引用包内其它模块,达到引用整个模块的目的。
那么你需要这样调用
var bag = require('/home/user/lib/bag/inter.js');
这样还要包含文件名,看着不友好,所以指定默认入口文件名为index.js,即使你不在调用路径上写,它也会默认找到index.js文件
同时你还可以通过package.json
包描述文件来重新指定入口文件名。同时这个 package.json
还可以描述很多信息,其中比较重要的就是包依赖,以后具体应用再说
命令行程序
七天上这么写,不过感觉没啥用,知道即好
在Windows系统下的做法完全不同,
我们得靠.cmd文件来解决问题。假设node-echo.js存放在C:\Users\user\bin目录,并且该目录已经添加到PATH环境变量里了。接下来需要在该目录下新建一个名为node-echo.cmd的文件,文件内容如下:
@node “C:\User\user\bin\node-echo.js” %*
这样处理后,我们就可以在任何目录下使用node-echo命令了。
工程目录
就是我们在新建一个应用的时候,把相关代码放在一起,加以说明,就像css你知道是放样式表的,images是放图片的,node一般的工程目录主要有
- /home # 工程目录 - bin/ # 存放命令行相关代码 node-echo + doc/ # 存放文档 - lib/ # 存放API相关代码 echo.js - node_modules/ # 存放三方包 + argv/ + tests/ # 存放测试用例 package.json # 元数据文件 README.md # 说明文件
npm
- 允许用户从NPM服务器下载别人编写的三方包到本地使用。
- 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
- 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
共建nodejs生态圈,
这里简单介绍下怎么下载安装第三方包 通过包名
npm install (-g) 包名@0.0.1(<version>)
表示全局安装,0.0.1版本的包,全局和版本可以省略通过包描述文件
package.json
当要安装很多个包的时候,可以使用包依赖,定义好之后,进入命令行,npm install
自动默认安装到node_modules
文件夹中了版本号
义版本号分为X.Y.Z三位,分别代表主版本号、次版本号和补丁版本号。当代码变更时,版本号按以下原则更新。
如果只是修复bug,需要更新Z位。如果是新增了功能,但是向下兼容,需要更新Y位。如果有大变动,向下不兼容,需要更新X位。
同时NPM还提供了很多功能,package.json里也有很多其它有用的字段。除了可以在npmjs.org/doc/查看官方文档外,这里再介绍一些NPM常用命令。
- NPM提供了很多命令,例如install和publish,使用npm help可查看所有命令。
- 使用npm help 可查看某条命令的详细帮助,例如npm help install。
- 在package.json所在目录下使用npm install . -g可先在本地安装当前命令行程序,可用于发布前的本地测试。
- 使用npm update 可以把当前目录下node_modules子目录里边的对应模块更新至最新版本。
- 使用npm update -g可以把全局安装的对应命令行程序更新至最新版。
- 使用npm cache clear可以清空NPM本地缓存,用于对付使用相同版本号发布新版本代码的人。
小结
本章介绍了使用NodeJS编写代码前需要做的准备工作,总结起来有以下几点:
- 编写代码前先规划好目录结构,才能做到有条不紊。
- 稍大些的程序可以将代码拆分为多个模块管理,更大些的程序可以使用包来组织模块。
- 合理使用node_modules和NODE_PATH来解耦包的使用方式和物理路径
- 使用NPM加入NodeJS生态圈互通有无。
- 想到了心仪的包名时请提前在NPM上抢注。
文件操作
下面就开始学习node的API了,可以先登录nodejs官网,查看官方API说明文档
这个用到node自带模块fs
,文件系统模块,所有方法都有异步版本和同步版本。
异步方式:需要一个回调函数作为最后一个传入参数。回调函数的参数第一个为错误信息err,后面再跟其它数据,如果返回正确信息,err的值为null或者undefined
同时异步方式更需要注意的一点就是,非阻塞
var fs=require("fs");console.log("开头");fs.readFile("bb.txt","utf8",function(err,data){ if(err){ console.log(err); }else{ console.log(data); console.log("我是"); }});console.log("结尾");
结果是:
开头结尾//不会等待前面回调函数的执行大家好:我是豆角,ddd//bb.txt内容,注意要统一编码,在保存时要把txt文件编码改为utf8
同步方式:出现错误,直接抛出,可以使用try catch拦截错误是程序继续运行。
var fs = require('fs');fs.unlinkSync('/tmp/hello');console.log('successfully deleted /tmp/hello');
- 七天学习nodejs学习笔记
- windows下《七天学会NodeJS》学习笔记之一--NodeJS基础
- 第七天学习笔记
- 第十七天学习笔记
- 第二十七天学习笔记
- 第五十七天学习笔记
- 第六十七天学习笔记
- 学习笔记第七天
- windows下《七天学会NodeJS》学习笔记之二--代码的组织和部署
- windows下《七天学会NodeJS》学习笔记之三--文件操作
- windows下《七天学会NodeJS》学习笔记之四--网络操作
- java学习笔记--第七天
- 学习NodeJS第七天:安装静态的文件服务器
- nodejs 学习笔记--debug
- NodeJS学习笔记
- nodejs学习笔记
- nodeJs学习笔记
- nodejs学习笔记
- 区间DP-POJ-3186-Treats for the Cows
- 图像分类研究现状
- MATLA的S-FUNCTION用法
- 极客学院30天免费VIP
- iOS-UIKit(UIDatePicker.h--解读)
- 七天学习nodejs学习笔记
- HDU 4449 Building Design 三维凸包+空间坐标变换
- [LeetCode] Best Meeting Point
- Type mismatch in key from map: expected org.apache.hadoop.io.Text, received org.apache.hadoop.io.Lon
- C++的继承与派生
- scrollView 嵌套listView 中重写listView
- Light OJ 1422 Halloween Costumes(区间DP)
- 深入浅出MyBatis-快速入门
- linux精华