node.js简单介绍及使用

537 阅读6分钟

前言

本文整理了node.js的简单介绍及使用,如果对答案有不一样见解的同学欢迎评论区补充讨论,当然有问题,也欢迎在评论区指出。

引用参考blog.csdn.net/CS_DGD/arti…

0、node.js概述

Node.js 不是一门编程语言,它是一个执行 JavaScript 代码的运行环境

1、node.js和浏览器

  • 因为浏览器和 Node.js 都内置了 JavaScript V8 Engine。所以他们都可以运行 JavaScript

  • 浏览器的JavaScript可以操作HTML和浏览器窗口(在JavaScript V8引擎中添加了控制他们的API,即BOM和DOM)

  • Node.js 中没有 DOM 和 BOM,但是添加了很多系统级别的 API,如对系统文件和文件夹的操作。获取操作系统信息,比如系统内存总量是多少,系统临时目录在哪

  • JavaScript 运行在浏览器中(即客户端 JavaScript),用于创建前端工程化工具。

  • JavaScript 运行在 Node.js 中(即服务器端 JavaScript),用于构建服务器端应用。

2、ES6,JavaScript,node.js区别

  • ECMAScript 6.0(简称 ES6)是 JavaScript 语言的标准(即语法规范),写javascript和nodejs都必须遵守。如:变量定义,循环、判断、函数、原型和原型链、作用域和闭包、异步。 不能操作DOM,不能监听click事件,不能发送ajax请求,不能处理http请求,不能操作文件。即,只有ECMAScript ,几乎做不了任何实际的项目

  • JavaScript:ECMAScript语法规范++Web API。可以进行DOM操作,BOM操作,事件绑定,Ajax等(浏览器端的任何操作)

  • node.js: ECMAScript语法规范++nodejs API。如:处理http ,处理文件等(完成server端的任何操作)

3、模块系统

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

  • __filename:当前模块文件名称。

  • __dirname:当前文件所在路径。

3.1、Node.js 内置模块

  • Path:模块内提供了一些和路径操作相关的方法。
const path = require("path")
console.log(path.parse(__filename))

{
  root: '/',
  dir: '/Users/administrators/Desktop/node_test',
  base: 'app.js',
  ext: '.js',
  name: 'app'
}
  • File system:文件操作系统,提供了和操作文件相关的方法。
const fs = require("fs")

const files = fs.readdirSync("./")
console.log(files)  [ 'app.js', 'logger.js' ]

fs.readdir("./", function (error, files) {
  console.log(error) // null | Error {}
  console.log(files) // [ 'app.js', 'logger.js' ] | undefined
})
  • 在引入内置模块时, 使用的是模块的名字,前面不需要加任何路径。

4、npm

Node.js 软件包都是基于Node.js平台开发的,这些软件包都被托管在 www.npmjs.com 中,通过npm来管理

npm随node.js一起安装,和node是两个独立的应用程序(可以通过版本号证明)

4.1、package.json

  • Node.js 规定在每一个软件包(或工程项目)都必须包含一个叫做 package.json 的文件

  • 它是应用程序的描述文件,包含和应用程序相关的信息,比如应用名称,应用版本,应用作者等等。

  • 通过 package.json 文件可以方便管理应用和发布应用。

  • 创建 package.json 文件: npm init

  • 快速创建 package.json 文件: npm init --yes

{
  "name": "project-name",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

4.2、下载 Node.js 软件包

在应用程序的根目录执行命令:npm install < pkg > 或者 npm i < pkg >

软件包下载完成后会发生三件事:

  • 软件包会被存储在 node_modules 文件夹中,如果在应用中不存在此文件夹,npm 会自动创建。

  • 软件包会被记录在 package.json 文件中. 包含软件包的名字以及版本号。

  • npm 会在应用中创建 package-lock.json 文件, 用于记录软件包及软件包的依赖包的下载地址及版本。

4.3、node_modules

node_modules 文件夹中的软件包不需要提交到 git 仓库中,因为文件夹较大,可达到几百兆。

  • 在 package.json 文件中都会记录项目都依赖了哪些包,在package-lock.json 查看对应包的版本

  • 可以通过 npm install 命令重新下载它们

将应用程序提交到版本库之前,切记将 node_modules 文件夹添加到 .gitignore 文件中,这样就不会连同node_modules一块上传。

git init
git status
echo "node_modules/" > .gitignore
git status
git add .
git commit -m "our first commit"

4.4、删除和更新软件包

npm uninstall <pkg>
npm un <pkg>

npm outdated ,可以查看哪些软件包已经过期,对应的新版本是什么。
npm update ,更新过期的软件包,更新操作遵循语义版本控制规则。

4.5、项目依赖和开发依赖

在 package.json 文件中, 项目依赖和开发依赖要分别记录

  • 项目依赖被记录在 dependencies 对象中
  • 开发依赖被记录在 devDependencies 中
  • 使开发者可以在不同的环境中下载不同的依赖软件包。
下载开发依赖,在命令后加上 --save-dev 或者 -D。如:npm i eslint -D

4.6、本地安装和全局安装

本地安装:将软件包下载到应用根目录下的 node_modules 文件夹中,软件包只能在当前应用中使用

全局安装:将软件包下载到操作系统的指定目录中,可以在任何应用中使用

  • 通过 -g 选项将软件包安装到全局:npm install < pkg > -g

4.7、设置或更改npm镜像地址

由于 npmjs.com 是国外的网站,大多数时候下载软件包的速度会比较慢

更改 npm 镜像地址

npm config set registry https://registry.npm.taobao.org
npm config set registry https://registry.npmjs.org/
cat .npmrc

4.8、npx命令

npx 是 npm 软件包提供的命令,它是 Node.js 平台下软件包执行器。主要用途有两个:

  • 第一个是临时安装软件包执行后删除它

有些提供命令的软件包使用的频率并不高,比如 create-react-app 脚手架工具,我能不能临时下载使用,然后再删掉它。

npx create-react-app react-test
  • 第二个是执行本地安装的提供命令的软件包

现在有两个项目都依赖了某个命令工具软件包,但是项目 A 依赖的是它的 1 版本,项目 B 依赖的是它的 2 版本,我在全局到底应该安装什么版本呢 ?

该软件包可以在本地进行安装,在 A 项目中安装它的 1 版本, 在 B 项目中安装它的 2 版本,在应用中可以通过 npx 调用 node_modules 文件夹中安装的命令工具。

  • 总结:将所有软件包安装到应用本地是现在最推荐的做法,一是可以防止软件包的版本冲突问题,二是其他开发者在恢复应用依赖时可以恢复全部依赖,因为软件包安装到本地后会被 package.json 文件记录,其他开发者在运行项目时不会因为缺少依赖而报错

总结

觉得写得好的,对你有帮助的,可以分享给身边人,知识越分享越多,千万不要吝啬呀

后续更新前端其它知识总结,请关注我,整理好,分享给你们,我们一起学前端