Node.js基础常用知识点全总结(一)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: Node.js基础常用知识点全总结

一.认识Node.js


Node.js是一个javascript运行环境。它让javascript可以开发后端程序,实现几乎其他后端语言实现的所有功能,可以与PHP、Java、Python、.NET、Ruby等后端语言平起平坐。


Node.js是基于V8引擎,V8引擎是Google发布的开源JavaScript引擎,V8引擎被应用在Chrome、Nodejs和其他应用中。


1. Node.js的特性


(1) Nodejs语法完全是js语法,只要你懂js基础就可以学会Nodejs后端开发。


(2) Node.js超强的高并发能力,能够实现高性能服务器。


(3) 开发周期短、开发成本低、学习成本也低


2. 浏览器和Node.js环境对比


下图中,在左边Chrome浏览器环境中,V8引擎用于解析JS代码,而Blink引擎是浏览器的排版引擎,用于处理网页的html、css和DOM操作。


而右边的Node环境中,只有V8引擎,用于处理JS代码,所以Node.js中,访问DOM和BOM是无法实现的。但Node.js因为有libuv中间层加持,能够实现浏览器所不能实现的一些功能。


1a7c3bba0bee4fc1b30e2df5e0f7adfe.png


Node.js 可以解析JS代码(没有浏览器安全级别的限制)提供很多系统级别的API,例如(现在看不懂没关系):


文件的读写 (File System)


const fs = require('fs')
fs.readFile('./test.txt', 'utf-8', (err, content) => {
  console.log(content)
})


进程的管理 (Process)


function main(argv) {
  console.log(argv)
}
main(process.argv.slice(2))


网络通信 (HTTP/HTTPS)


const http = require("http")
http.createServer((req,res) => {
  res.writeHead(200, {
    "content-type": "text/plain"
  })
  res.write("hello nodejs")
  res.end()
}).listen(3000)


3.开发环境安装和搭建


大家点击http://nodejs.cn/download/ 这个网址下载长期支持版的Node.js。


这个是国内的网站,大家不用担心进不去。同时也建议大家收藏Node.js中文网这个网站,还有Node.js的API文档


7bdef013d65447a6840f352de4f1301a.png


安装也没啥好说的,你只要下一步下一步就可以了。安装好后,在任意地方打开命令行窗口,运行node -v ,如果能打印出Node.js的版本号的话,则说明安装成功了。


二.commonJS、包以及npm


1. CommonJS规范


在node.js环境中,默认支持模块系统,该模块系统遵循CommonJs规范。


一个 JavaScript 文件就是一个模块,在模块文件中定义的变量和函数默认只能在模块文件内部使用,如果需要在其他文件中使用,必须显式声明将其进行导出。


CommonJS模块规范主要分为模块导出(也叫模块定义)、模块引用两个部分。


模块导出(module.exports或exports)


CommonJS中定义模块的规定:

我们把公共功能抽离成一个单独的js文件作为一个模块。默认情况下,里面的方法和属性是外面无法访问的。如果想要让外面能够访问到里面的属性和方法,就必须要通过 module.exports 或exports暴露属性和方法。


在每一个模块文件中,都会存在一个 module 对象,即模块对象。在模块对象中保存了和当前模块相关信息。


不信我们在test.js中编写如下代码:


console.log(module);


在当前目录下面的命令行中运行node .\test.js ,会打印如下的结果:


7e51ba7bb89b476c96eae6bd0474298d.png


在模块对象中有一个属性 exports,它的值是一个对象,模块内部需要被导出的成员都应该存储在到这个对象中。

可以用module.exports给test.js模块系统添加属性:


const url = "https://blog.csdn.net/";
function log(message){
    console.log(message);
}
module.exports.endPoint = url; //给module下的exports添加url属性
module.exports.log = log; //给module下的exports添加log属性
console.log(module);


或者用exports给test.js模块系统添加属性:


const url = "https://blog.csdn.net/";
function log(message){
    console.log(message);
}
exports.endPoint = url; //给module下的exports添加url属性
exports.log = log; //给module下的exports添加log属性
console.log(module);


或者用module.exports = { }把属性组合成一个对象后导出:


const url = "https://blog.csdn.net/";
function log(message){
    console.log(message);
}
module.exports = {
  url : url,
  log : log
}
console.log(module);


6bbec847f54d4bd49baf332aae90eedc.png


模块导入(require)

在其他文件中通过 require 方法引入模块,require 方法的返回值就是对应模块的 module.exports 对象。在导入模块时,模块文件后缀 .js 可以省略,文件路径不可省略。


(1) require 方法属于同步导入模块,模块导入后可以立即使用。

(2) 导入其他模块时,建议使用 const 关键字声明,防止模块被重置。

我们创建一个require.js文件,里面导入上面的test.js:


const test = require('./test')
console.log(module);

会发现打印的第二个module的children属性会多一些信息:


f1157d2e4224428b8ce24f8aca57ab0e.png


2. npm包管理工具的用法详解


npm介绍:npm是世界上最大的开放源代码的生态系统,我们可以通过npm下载各种包。npm是随同Node.js一起安装的包管理工具,能解决Node.js代码部署上的很多问题。


常见的使用场景有以下几种

(1) 允许用户从NPM服务器下载别人编写的第三方包到本地使用。

(2) 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。

(3) 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。


npm常用命令


初始化项目:


npm init --yes


使用 npm 命令安装模块:


npm install 包名@版本号


全局安装与本地安装:


npm install 包名          # 本地安装
npm install 包名 -g   # 全局安装


查看所有全局安装的模块:


npm list -g


卸载模块:


npm uninstall 包名


更新模块:


npm update 包名


package.json 和 package-lock.json 区别


(1) package.json 是在运行 “ npm init ”时生成的,主要记录项目依赖,主要有以下结构:


name:项目名,也就是在使用npm init 初始化时取的名字.

main:入口文件,一般都是 index.js

description:描述信息,有助于搜索。

version:版本号。

keywords:关键字,有助于在人们使用 npm search搜索时发现你的项目。

scripts:支持的脚本,默认是一个空的 test。

license :默认是 MIT。

dependencies:指定了项目运行时(生产环境)所依赖的模块。

devDependencies:指定项目开发时所需要的模块,也就是在项目开发时才用得上,一旦项目打包上线了,就将移除这里的第三方模块。


(2) package-lock.json 是在运行 “npm install” 时生成的一个文件,用于记录当前状态下项目中实际安装的各个 package 的版本号、模块下载地址、及这个模块又依赖了哪些依赖。


为什么有了package.json,还需要 package-lock.json 文件呢?


当项目中已有 package-lock.json 文件,在安装项目依赖时,将以该文件为主进行解析安装指定版本依赖包,而不是使用 package.json 来解析和安装模块。

因为 package 只是指定的版本不够具体,而package-lock 为每个模块及其每个依赖项指定了安装的版本,位置和完整性哈希,所以它每次创建的安装都是相同的。

无论你使用什么设备,或者将来安装它都无关紧要,每次都应该给你相同的结果。


npm install安装模块时的一些选项


使用npm install安装依赖时,可以使用--save和--save-dev。


使用--save安装的依赖,安装的包会被写到package的dependencies属性里面去。dependencies 是运行时依赖(生产环境),可以简化为参数 -S。


而使用--save-dev 则添加到 package.json 文件 devDependencies 键下,devDependencies 是开发时的依赖。即 devDependencies 下列出的模块,是开发时用的 ,生产环境会移除,可以简化为参数 -D。


版本号的命名规则


在 Node.js 中所有的版本号都有3个数字:x.y.z。

第一个数字是主版本。第二个数字是次版本。第三个数字是补丁版本。


^:只会执行不更改最左边非零数字的更新。 如果写入的是 ^0.13.0,则当运行 npm update 时,可以更新到 0.13.1、0.13.2 等,但不能更新到 0.14.0 或更高版本。 如果写入的是 ^1.13.0,则当运行 npm update 时,可以更新到 1.13.1、1.14.0 等,但不能更新到 2.0.0 或更高版本。

~:如果写入的是 〜0.13.0,则当运行 npm update 时,会更新到补丁版本:即 0.13.1 可以,但 0.14.0 不可以。

>:接受高于指定版本的任何版本。

>=:接受等于或高于指定版本的任何版本。

<=:接受等于或低于指定版本的任何版本。

<:接受低于指定版本的任何版本。

=:接受确切的版本。

-:接受一定范围的版本。例如:2.1.0 - 2.6.2。

||:组合集合。例如 < 2.1 || > 2.6。


相关文章
|
7月前
|
JavaScript 前端开发 API
|
7月前
|
JavaScript 前端开发 CDN
总结 vue3 的一些知识点:Vue.js 安装
总结 vue3 的一些知识点:Vue.js 安装
|
7月前
|
JavaScript
总结 vue3 的一些知识点:​Vue.js 条件语句​
总结 vue3 的一些知识点:​Vue.js 条件语句​
|
1月前
|
自然语言处理 JavaScript 前端开发
[JS]知识点
本文介绍了JavaScript中的多个重要知识点,包括ES6、严格模式、类与对象、解构、跨域问题及入口函数等。文章通过详细示例和推荐的外部资源,帮助读者更好地理解和应用这些概念。内容持续更新中,适合初学者和进阶开发者参考。
22 2
[JS]知识点
|
1月前
|
JavaScript 前端开发 中间件
JS服务端技术—Node.js知识点
本文介绍了Node.js中的几个重要模块,包括NPM、Buffer、fs模块、path模块、express模块、http模块以及mysql模块。每部分不仅提供了基础概念,还推荐了相关博文供深入学习。特别强调了express模块的使用,包括响应相关函数、中间件、Router和请求体数据解析等内容。文章还讨论了静态资源无法访问的问题及其解决方案,并总结了一些通用设置。适合Node.js初学者参考学习。
45 1
|
1月前
|
存储 JavaScript 前端开发
JS的ES6知识点
【10月更文挑战第19天】这只是 ES6 的一些主要知识点,ES6 还带来了许多其他的特性和改进,这些特性使得 JavaScript 更加现代化和强大,为开发者提供了更多的便利和灵活性。
28 3
|
2月前
|
存储 JSON JavaScript
JS知识点
JS知识点
29 3
|
2月前
|
JavaScript 前端开发 Java
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
32 5
|
3月前
|
JavaScript 前端开发 Java
JavaScript 类知识点概览
概览JavaScript中类的知识点,包括类的定义和实现、添加方法和get/set方法、类的继承和静态方法的使用。通过学生类和人员类的例子,演示了类的构造器、方法定义、继承关系和静态方法的调用。
JavaScript 类知识点概览
|
2月前
|
前端开发 JavaScript
JavaScript 知识点总结
JavaScript 知识点总结
33 0