定义: 基于chrome v8引擎的javascript 运行环境
特点: 事件驱动,非阻塞式I/O的模型,轻量,高效,单线程、单进程
可以解析js代码(没有浏览器安全级别的限制)
提供很多系统级别的API:
文件的读写
进程的管理
网络的通信
node version manager : node的版本管理 也是一个小工具
目前来说,可以不安装这个nvm,直接安装14.xx.xx的node就可以了,推荐这种安装方式:
地址:http://nodejs.cn/download/
使用nvm安装并维护多个node.js版本
地址:https://github.com/nvm-sh/nvm
windows 安装:
https://github.com/coreybutler/nvm-windows
https://www.cnblogs.com/dreamsqin/p/10885082.html
nvm的相关命令:
在vsCode中编写一个可执行的js(index.js)文件如下:
function greeting(){ return "hello node111"; } console.log(greeting());
想要通过node运行此js文件,有两种方法:
(1)首先要在vsCode中,下载一个用于运行的插件:code runner。
(2)选中需要运行的代码,点击右键–>run code,此时就会执行js代码并输出。
在存储js文件的文件夹的路径栏输入cmd并回车,打开命令行工具,输入node index.js,在命令行状态下运行node。
使用node+js文件名有缺点,就是当改变js文件的内容时,需要手动重启服务器,为了解决这一问题,可以使用一个插件:nodemon,在命令行窗口中输入以下命令,-g表示全局安装。
安装成功后使用nodemon运行js文件,在修改文件内容时,服务器会自动重启。
NodeJS环境和浏览器环境一样都是一个JS的运行环境, 都可以执行JS代码.
但是由于宿主不同所以特点也有所不同
(1)内置对象不同
浏览器环境中提供了window全局对象。NodeJS环境中的全局对象不叫window, 叫global。
(2)this默认指向不同
浏览器环境中全局this默认指向window。NodeJS环境中全局this默认指向空对象{}。
(3)API不同
浏览器环境中提供了操作节点的DOM相关API和操作浏览器的BOM相关API。NodeJS环境中没有HTML节点也没有浏览器, 所以NodeJS环境中没有DOM/BOM。
console.log(__dirname); console.log(__filename); console.log("abc"); /* setTimeout(function () { console.log("123"); }, 2000); */ setInterval(function () { console.log("123"); }, 1000);
在 Node.js 模块系统中,每个文件都被视为一个独立的模块。
CommonJS规范规定了如何定义一个模块, 如何暴露(导出)模块中的变量函数, 以及如何使用定义好的
模块
参考网站地址:
1)http://www.commonjs.org
2)http://javascript.ruanyifeng.com/nodejs/module.html
注意点:
无论通过哪种方式导出, 使用时都需要先导入(require)才能使用
通过global.xxx方式导出不符合CommonJS规范, 不推荐使用
module.exports = "字符串";//可以的 module.exports.msg = '字符串'//可以的 exports.msg = '字符串'//可以的 exports = '字符串'//不行的
方案一:
导出:
exports.xxx = xxx 或 module.exports.xxx = xxx 可以导出N个数据
导入:
let res = require("./a") res是一个对象,对象中包含了N个数据
方案二: module.exports后面的导出会覆盖前面的导出
导出:
module.exports = “hello” 导出hello
导入:
let res = require("./a") res就是一个hello、
导出:
module.exports = { name:“wc”,age:100 } 导出一个对象
导入:
let res = require("./a") res就是一个对象
强调:
注意点:
在企业开发中无论哪种方式都不要直接赋值, 这个问题只会在面试中出现。
(1) require导入模块时可以不添加导入模块的类型
如果没有指定导入模块的类型, 那么会依次查找.js .json .node文件。无论是三种类型中的哪一种, 导入之后都会转换成JS对象返回给我们。
(2) 导入自定义模块时必须指定路径
require可以导入"自定义模块(文件模块)"、“系统模块(核心模块)”、“第三方模块”。导入"自定义模块"模块时前面必须加上路径。导入"系统模块"和"第三方模块"是不用添加路径。
(3) 导入"系统模块"和"第三方模块"是不用添加路径的原因
如果是"系统模块"直接到环境变量配置的路径中查找。如果是"第三方模块"会按照module.paths数组中的路径依次查找。
const http = require('http'); const qs = require('querystring'); const fs = require('fs') //涉及文件的读写.... const url = require('url'); const path = require('path'); var rs = path.resolve(__dirname, '../dev/'); console.log(rs);
const path = require('path'); // 处理路径的 // 默认解析的路径 是以process.cwd() chdir去更改 // __dirname 文件所在的目录 不能更改的 // 你给我一个相对路径 我还你个绝对路径,有拼接的功能, path.resolve(__dirname,'index.md','abc') console.log(path.resolve(__dirname,'index.md')); // 只是简单的拼接 console.log(path.join(__dirname,'index.md')); // 总结:如果遇到带/的路径 resolve 会认为是根路径 join则是拼接在一起 console.log(path.extname('a.min.js')); // .js 取后缀名 console.log(path.relative('a','a/a.js')); // 去掉相同的部分
所谓的第三方模块,就是别人写好的模块,我们需要下载下来使用它。
如果jquery就是一个第三方模块,要用第三方模块,先下载。
通过npm来下载:例:npm install jquery,install可以写成i。
一个项目, 可能有N个第三方模块,我们就需要一个文件,来记录你项目中都使用了哪些第三方模块,在写项目时,先需要创建这样一个配置文件,它的主要作用就是记录,你的项目中都用到了哪些第三方模块。
如何生成这个配置文件呢?
答: 通过npm init,然后一路回车,就生成一个叫package.json文件,这个文件就是项目的配置文件,这个配置文件的主要作用是记录项目所用的第三方模块(依赖),如果你不想那么麻烦,可以直接输入npm init -y
安装好的第三方模块会放在node_modules这个文件夹中的。
模块:一个文件就是一个模块。
包:N个文件,放在一个文件夹中,就形成一个包,安装一jquery,最终就是一个包(依赖)
function HelloNode() { } HelloNode.prototype = { count() { return 38; }, getStudentlist() { return [ { name: 'wangcai', age: 18 }, { name: 'xiaoqiang', age: 20 } ] } } module.exports = new HelloNode();
如果使用npm就一直使用npm,如果用yarn,就一直使用yarn,不要混用,混用肯定会出问题。
注意点:
(1)在npm5.0之前,yarn的优势特别明显.但是现在NPM已经更新到6.9.x甚至7.x了。
(2)随着NPM的升级NPM优化甚至超越Yarn,所以个人还是建议使用NPM。
(1)安装
npm install -g yarn
yarn --version
(2)使用
1.初始化包
npm init -y
yarn init -y
2.安装包
npm install xxx --save
yarn add xxx
npm install xxx --save-dev
yarn add xxx --dev
3.移除包
npm uninstall xxx
yarn remove xxx
4.更新包
npm update xxx
yarn upgrade xxx --latest
5.全局安装
npm install -g xxx
npm uninstall -g xxx
npm update -g xxx
yarn global add xxx
yarn global upgrade xxx
yarn global remove xxx