http://nodejs.cn/
Node.js是一个基于Chrome V8引擎的JavaScript运行环境
浏览器是JavaScript的前端运行环境
Node.jsJavaScript的后端运行环境
Node.js中无法调用BOM,DOM等浏览器内置的API
Node.js 它的内置API fs,path,http...
Node.js作为JavaScript运行环境,仅仅提供了基础的功能和API
了解:
基于 Express 框架(http://www.expressjs.com.cn/),可以快速构建 Web 应用
基于 Electron 框架(https://electronjs.org/),可以构建跨平台的桌面应用
基于 restify 框架(http://restify.com/),可以快速构建 API 接口项目
会js 就会Node.js
浏览器中的JavaScript:
js基础语法+浏览器内置API(DOM ,BOM)+第三方库(jQuery,art-template等)
Node.js:
js基础语法 + Node.js内置API模块(fs,path,http)+第三方模块(express)
http://nodejs.cn/
打开终端,输入node -v命令 按回车
Windows系统打开终端:
(Windows+R)运行面板,输入cmd 回车,就可以打开终端
准备js代码
打开终端(终端目录一定要指向文件目录) cd 文件路径
输入 node 要执行的js文件的路径
node 要执行的js文件的路径
上键 快速定位到上一次执行命令
tab 快速补全
esc 清空当前已输入的命令
cls 清空终端
内置模块(Node.js官方提供 fs ,path,http,…)
自定义模块(用户创建的每个js文件,都是自定义模块)
第三方模块(由第三方开发出来的模块,并非官方提供的内置模块)
http://nodejs.cn/api/
fs模块是Node.js官方提供,用来操作文件的模块,它提供了一系列方法和属性,满足用户对文件的需求
require()用法看下面 加载模块
// 1引入fs模块 来操作文件
var fs = require('fs');
/*
fs.readFile()
参数1 读取文件的路径
参数2 读取文件时候采用的编码方式 一般默认是utf8
参数3 回调函数 拿到读取失败和成功的结果 err data
*/
fs.readFile('./files/aa.txt', 'utf8', function (err, data) {
/*
读取文件成功,err的值为null
读取文件失败,err的值为错误对象 data的值为undefined
*/
console.log(err);
console.log("---------");
console.log(data);
})
自定义模块中定义的方法,变量只能在当前模块中使用。不存在变量冲突
当 Node 遇到 require(X) 时,按下面的顺序处理。
(1)如果 X 是内置模块(比如 require(‘http’))
a. 返回该模块。
b. 不再继续执行。
(2)如果 X 以 “./” 或者 “/” 或者 “…/” 开头
a. 根据 X 所在的父模块,确定 X 的绝对路径。
b. 将 X 当成文件,依次查找下面文件,只要其中有一个存在,就返回该文件,不再继续执行。
- X
- X.js
- X.json
- X.node
c. 将 X 当成目录,依次查找下面文件,只要其中有一个存在,就返回该文件,不再继续执行。
- X/package.json(main字段)
- X/index.js
- X/index.json
- X/index.node
(3)如果 X 不带路径
a. 根据 X 所在的父模块,确定 X 可能的安装目录。
b. 依次在每个目录中,将 X 当成文件名或目录名加载。
(4) 抛出 “not found”
require()可以加载需要的内置模块,用户自定义模块,第三方模块
每个js自定义模块中都有一个module对象,它里面存储了和当前模块有关的信息
在自定义模块中输出module
console.log(module);
会得到差不多这样的Module对象:
Module {
id: '.',
path: 'C:\\xxx\\code\\moudle',
exports: {},
parent: null,
filename: 'C:\\xxx\\code\\moudle\\com.js',
loaded: false,
children: [],
paths: [
'C:\\xxx\\code\\moudle\\node_modules',
'C:\\xxx\\code\\node_modules',
'C:\\xxx\\node_modules',
'C:\\node_modules'
]
}
自定义模块中,可以使用module.exports对象,将模块内的成员共享出去,供外界使用
外界用require()导入自定义模块,得到的就是module.exports所指向的对象
由于module.exports单词写起来比较复杂,为了简化向外共享成员的代码,Node提供了exports对象
exports和module.exports指向同一个对象
exports.username = "zs";
exports.sayHello = function () {
console.log("hello")
}
console.log(module.exports === exports); //true
外界require方法导入模块时,永远以module.exports指向的对象为准
// 可以这样写:
module.exports = {
username: "zs",
sayHello: function () {
console.log(123)
}
}
// 但不能这样写:
exports = {}
不能给exports直接赋值一个新对象 永远以module.exports指向的对象为准
module.exports指向的对象就是全局内置对象
如果直接给exports赋值一个新对象,就只是改变了exports的指向,exports指向的就不再是全局内置对象
Node.js遵循了CommonJS模块化规范,CommonJS规定了模块的特性和各模块之间如何相互依赖
CommonJS规定:
模块化是指解决一个复杂问题时,自顶向下逐层把系统划分为若干模块的过程
就是遵守固定的规则,把一个大文件拆成独立的多个小模块
模块化的规范就是对代码进行模块化的拆分和组合时,需要遵守的规则
Node.js中的第三方模块又叫做包
不同于Node.js的内置模块和自定义模块,包是由第三方个人或团队开发出来的,免费使用
Node.js提供的Api开发效率低
基于内置模块封装出来包,提供了更高级,更方便的API,极大的提高了工作效率
国外的一家IT公司,叫做npm ,Inc ,这家公司的著名的网站https://www.npmjs.com/全球最大的包共享平台
提供了一个地址 https://registry.npmjs.org/,来对外共享所有的包,我们可以从这个服务器下载自己所需要的包
https://www.npmjs.com/ 网站上搜索自己所需要的包
https://registry.npmjs.org/ 服务器上下载自己需要的包
所以npm就是个 包管理工具
这个包管理工具随着node的安装一起被安装到了用户的电脑上
终端输入命令 npm -v查看自己电脑上安装的npm包管理工具的版本号
npm install 包的完整名称
简写
npm i 包的完整名称
初次装包完成,项目文件下多一个叫node_modules文件夹和package-lock.json和package-lock.json文件
node_modules 存放所有已安装到项目中的包 require导入第三方包时,就是从这个目录中查找并加载包
package-lock.json 配置文件用来记录node_modules目录下每一个包的下载信息,包的名字,版本号 下载地址
不需要手动修改这两个文件 npm包管理工具会自动维护它们
npm规定,在项目目录中,必须提供一个叫做package.json的包管理配置文件,用来记录与项目有关的一些配置
项目目录中,创建一个package.json的配置文件,可用来记录项目中安装了哪些包,方便删除node_modules目录之后,在团队成员之间共享项目的源代码
在项目开发中,一定要把node_modules文件夹,添加到.gitignore忽略文件中 不需要被git所管理
创建该文件命令:
npm init -y
该命令只能在英文的目录下运行成功
package.json文件中,有一个dependencies节点,专门用来记录您使用npm install 命令安装了哪些包
npm i
或者
npm install
npm uninstall moment
有些包只在项目开发阶段会用到,在项目上线之后不会用到,建议把这些包记录到devDependencies节点中 (比如scss)
有些包在项目开发阶段和项目上线之后都会用到建议把这些包记录到dependencies节点中
//记录到devDependencies节点中
npm i 包名 -D
//完整写法
npm install 包名 --save-dev
nrm工具,利用nrm提供的终端命令可以快速查看和切换包的镜像源
-g 全局 下载工具需要加-g 在电脑的任何一个地方都可以使用
//下载nrm安装全局可用的工具
npm i nrm -g
//查看所有的镜像源
nrm ls
将下包的镜像源切换到taobao
nrm use taobao
https://registry.npm.taobao.org/
https://yarnpkg.com/zh-Hans/docs/package-json
npm包管理工具下载的包,分为两大类
项目包
被安装到项目的node_modules目录中的包,都是项目包
全局包
执行npm install 命令是 提供了-g参数 安装的就是全局包
全局包被安装到C:\Users\54004\AppData\Roaming\npm\node_modules中 只有工具性质的包,才有全局安装的必要性