Node 安装配置图解版——简单明了 一目了然 赶紧收藏吧

小编解惑

需要注意如下几点

  • 在n.js 中引入 m.js 时,可以省略后面的.js

  • 引入 m.js 时,需要使用如下领“./m.js”

  • m.js中,exports 后面的属性名称可以使用任何名称

4.4 Node 中两种模块成员导出方法对比

exports.name=name

module.exports.name=name

上面案例用到了 exports.属性=属性值 的方式进行模块成员导出

还可以使用 module.exports.属性=属性值 的方式进行模块成员导出

总结:

exports是module.exports的别名(地址引用关系),导出对象最终以module.exports为准

下面证明这个结论

比如,在m.js 中编写如下代码

let name=‘李白’

let age=20

exports.name=name

module.exports.age=age

在 n.js 中编写下面代码

const m=require(‘./m.js’)

console.log(m)

输出结果

{ name: ‘李白’, age: 20 }

课件,exports 与 module.exports 确实是一个地址,也就说最后修改的都是 module.exports

再次修改 m.js

let name=‘李白’

let age=20

module.exports.name=age

exports.name=name

再次运行 n.js

{ name: ‘李白’ }

在 exports 和 module.exports 中都设置了name属性,但一个将值设置成了 age 成员,一个设置成了 name 成员,最后发现还是以 module.exports 为准

这就证明了上面的结论

5.系统模块


5.1 什么是系统模块

Node运行环境提供的API. 因为这些API都是以模块化的方式进行开发的, 所以我们又称Node运行环境提供的API为系统模块

小编解惑

在前面,我们学了很多JS的API,如 querySelector、getElementById、offsetLeft 等,这些都是浏览器提供的跟Dom或者Bom相关的功能,只不过这些API都是没有任何关系的分散的。

Node 中,也提供了很多的API,但是将这些API根据烈性存放在不同的模块中,如文件模块中就包含了很多能够操作磁盘文件的API

所以,我们可以总结如下:

  • 所谓模块化,就是将相关API根据类型划分,存放到不同的文件中

  • 系统模块,就是 Node 预先已经定义好的一些API的集合

  • 除了系统模块,开发者还可以开发第三方模块,其他开发者都可以使用,如我们前面自己定义的m.js也是一个第三方模块

在这里插入图片描述

下面通过几个系统模块的讲解,掌握 node 中代码编写的基本规则,以及模块引入和使用的方法

5.2 文件操作

Node.js中文手册

5.2.1 读取文件

语法:

fs.readFile(path[, options], callback)

先看案例

const fs=require(‘fs’)

fs.readFile(‘m.js’,‘utf8’,(err,data)=>{

console.log(err)

console.log(data)

})

小编解惑

  • 系统模块的引入方式也是使用 require

  • 模块名称要使用引号包含起来

  • readFile是一个异步方法,所以需要回调函数接收读取结果

  • 回调函数中,err 获取读取中的错误信息,如果读取过程中没有出现错误,则结果为null;data 为读取的文件内容

所以一般在处理读取的文件之前,先判断err 的值

const fs = require(‘fs’)

fs.readFile(‘m1.js’, ‘utf8’, (err, data) => {

if (err) throw err;

console.log(data)

})

5.2.2 写入文件

语法

fs.writeFile(file, data[, options], callback)

案例

const fs = require(‘fs’)

fs.writeFile(‘./demo.txt’, ‘说点什么呢’, err => {

if (err) throw err;

console.log(‘文件写入成功’)

})

小编解惑

  • 回调函数只有一个参数 err

5.3 路径操作

5.3.1 路径拼接

语法

path.join([…paths])

使用平台特定的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径。

小编解惑

因为不同平台的路径分隔符不统一,为了防止将路径分隔符写死,影响了程序的跨平台特性,所以需要使用路径拼接

案例

const path=require(‘path’)

let res=path.join(‘public’,‘static’,‘images’,‘time.jpg’)

console.log(res)

windows 平台运行结果

public\static\images\time.jpg

linux 平台运行结果

public/static/images/time.jpg

5.3.2 使用相对路径还是绝对路径

  • 大多数情况下使用绝对路径,因为相对路径有时候相对的是命令行工具的当前工作目录

  • 在读取文件或者设置文件路径时都会选择绝对路径

  • 使用__dirname获取当前文件所在的绝对路径

代码演示:

新建文件,编写下代码

const fs=require(‘fs’)

fs.readFile(‘m.js’,‘utf8’,(err,data)=>{

if(err) throw err

console.log(data)

})

在此文件所在目录中,打开命令行工具,并运行此文件,发现没有问题

若在命令行工具中,使用如下命令,向上返回一级目录

cd …

再次执行命令

在这里插入图片描述

所以我们需要在代码中,根据当前编写的文件路径,获取绝对路径,然后将文件路径拼接成绝对路径,就没问题了

在这里插入图片描述

小编解惑

命令行工具目录,就是你打开命令行工具时的目录

如你在桌面上打开了命令行工具,那么目录就是

在这里插入图片描述

如果在D盘根目录下打开了命令函工具,那么目录就是

在这里插入图片描述

但是在代码编写时,我们其实希望以当前正在编写的文件为基础作为相对路径

6. 第三方模块


别人写好的、具有特定功能的、我们能直接使用的模块即第三方模块,由于第三方模块通常都是由多个文件组成并且被放置在一个文件夹中,所以又名包。

第三方模块有两种存在形式:

  • 以js文件的形式存在,提供实现项目具体功能的API接口,此种模块多为本地安装

  • 以命令行工具形式存在,辅助项目开发,此种模块多为全局安装

6.1 如何获取第三方模块

https://www.npmjs.com/

开发者将开发好的第三方模块,上传到上面网站,其它开发者可以从上面下载

下载方式为命令行方式下载

下面是下载和卸载第三方模块的基本语法

  • 下载:npm install 模块名称

  • 卸载:npm unintall package 模块名称

根据模块的作用,分为全局安装和本地安装

  • 本地安装:模块被下载到命令行工具所在目录下,只能当前项目使用

  • 全局安装:模块被下载全局目录下,所有项目都可以使用

6.2 安装演示

6.2.1 本地安装

npm install jquery

安装完成后,会在当前目录下创建 node_modules 目录

卸载

npm uninstall jquery

6.2.2 全局安装

以 nodemon 模块为例

nodemon是一个命令行工具,用以辅助项目开发。

在Node.js中,每次修改文件都要在命令行工具中重新执行该文件,非常繁琐。

安装

npm install nodemon -g

卸载

npm uninstall nodemon -g

6.2.3 安装慢怎么办

因为 npmjs.com 的服务器在国外,所有有时候下载速度很慢,或者总是断开

解决方案就是更换下载源,最好是国内的下载源

解决方案有两个

  • 安装 nrm,通过nrm更换下载源,更换之后,仍然使用 npm 命令安装模块

  • 安装 cnpm,以后通过cnpm 安装,安装后,使用 cnpm 安装模块

6.2.3.1 nrm

通过安装 nrm 的方式,可以选择和切换下载源

使用步骤

  • 使用npm install nrm –g 下载它

  • 查询可用下载地址列表 nrm ls

  • 切换npm下载地址 nrm use 下载地址名称

  • 下载模块 npm install 模块名称

小编解惑

在镜像源中,cnpm 和 taobao 其实是一样的,所以选择 taobao 还是 cnpm 都可以

在这里插入图片描述

6.3.2.2 cnpm

除了将下载地址切换为 cnpm 外,还可以直接安装 cnpm

使用 npm 安装 cnpm,同事将下载源更换为taobao

npm install -g cnpm --registry=https://registry.npm.taobao.org

安装成功后,使用 cnpm 命令安装第三方模块,如

cnpm install jquery

说明:cnpm 只是基于npm 的一个小公举

6.3 yarn

上面学习的 npm 是基于node.js 的一个包管理工具,除此之外,还有yarn,现在也非常流行

yarn 是现在非常流行的一个基于node.js的包管理工具,与 npm 可以说是双雄争霸

注意:yarn 与 cnpm 是不同的

6.3.1 yarn 安装

yarn安装

除了下载安装包外,还可以从npm 中安装yarn

下面使用 npm 包安装 yarn(虽然yarn 是与npm 竞争关系,但是npm 还是和开放的允许安装 yarn)

npm install yarn -g

执行下面命令,查询yarn命令列表

yarh -h

在这里插入图片描述

查询 yarn 版本

yarn -v

6.3.2 yarn 安装和模块

新建一个项目,然后打开命令行工具,执行如下命令

yarn add jquery

删除模块

yarn remove jquery

小编解惑

  • 一个项目中,不要同事使用npm 和 yarn 进行包管理

  • npm 和 yarn 的能力,我们仅仅使用了万分之一,更多功能,后面再讲

7. package.json 文件


7.1 node_modules 的问题

我们发现,当使用 npm 安装模块时,会创建 node_modules 目录,此目录中存储下载的模块及其依赖的模块

这个目录中的文件存在两个问题

  • 文件夹以及文件过多过碎,当将项目整体拷贝给别人时,传输速度很慢(事实上,node项目的体积主要就是node_modules)

  • 复杂的模块依赖关系需要被记录,确保模块的版本和当前保持一致,否则会导致当前项目运行报错

7.2 package.json 解决问题

在个项目拷贝给他人时,删除 node_modules,他人再使用 nmp 命令进行恢复安装

这就需要一个文件能够记录,当前项目都使用了哪些模块,这个文件就是 package.json

创建package.json

默认情况下,是没有此文件的,可以使用命令生成此文件

新建项目,然后在此项目下打开命令行工具,运行如下命令

npm init -y

package.json 文件内容如下

{

“name”: “package_demo”,

“version”: “1.0.0”,

“description”: “”,

“main”: “index.js”,

“scripts”: {

“test”: “echo “Error: no test specified” && exit 1”

},

“keywords”: [],

“author”: “”,

“license”: “ISC”

}

安装模块

npm install debug needle

观察 package.json 文件变化

在这里插入图片描述

删除node_modules

将项目拷贝给别人时,直接删除 node_modules 目录即可

恢复安装

运行如下命令,即可根据package.json 中的记录恢复安装

npm install

7.3 项目依赖和开发依赖

  • 项目依赖

  • 在项目的开发阶段和线上运营阶段,都需要依赖的第三方包,称为项目依赖

  • 使用npm install 包名命令下载的文件会默认被添加到 package.json 文件的 dependencies 字段中

  • 开发依赖

  • 在项目的开发阶段需要依赖,线上运营阶段不需要依赖的第三方包,称为开发依赖

  • 使用npm install 包名 --save-dev命令将包添加到package.json文件的devDependencies字段中

案例演示:

使用如下命令安装开发依赖包:gulp

npm install gulp --save-dev

查看package.json

在这里插入图片描述

删除 node_modules 目录

使用如下命令恢复项目依赖安装

npm install --production

查看 node_modules 中的文件变化

再次删除 node_modules,然后使用如下命令恢复开发依赖安装

npm install

发现node_modules 中多了很多文件

8. package.lock.json


此文件在第一次使用npm下载模块时就会被创建

作用如下:

  • 锁定包的版本,确保再次下载时不会因为包版本不同而产生问题

  • 加快下载速度,因为该文件中已经记录了项目所依赖第三方包的树状结构和包的下载地址,重新安装时只需下载即可,不需要做额外的工作

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。

技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。有需要面试题资料的朋友点击这里可以免费领取

此文件在第一次使用npm下载模块时就会被创建

作用如下:

  • 锁定包的版本,确保再次下载时不会因为包版本不同而产生问题

  • 加快下载速度,因为该文件中已经记录了项目所依赖第三方包的树状结构和包的下载地址,重新安装时只需下载即可,不需要做额外的工作

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-f1c2aPhm-1712195909033)]

[外链图片转存中…(img-eYbj4Zpp-1712195909034)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

[外链图片转存中…(img-9TWHockc-1712195909034)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。

技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。有需要面试题资料的朋友点击这里可以免费领取

[外链图片转存中…(img-o6I9VYMf-1712195909034)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值