七天学习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编写代码前需要做的准备工作,总结起来有以下几点:

  1. 编写代码前先规划好目录结构,才能做到有条不紊。
  2. 稍大些的程序可以将代码拆分为多个模块管理,更大些的程序可以使用包来组织模块。
  3. 合理使用node_modules和NODE_PATH来解耦包的使用方式和物理路径
  4. 使用NPM加入NodeJS生态圈互通有无。
  5. 想到了心仪的包名时请提前在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');
0 0
原创粉丝点击