web学习笔记(四十八)

目录

1.初次装包后多了哪些文件

2.团队协作的问题

2.1 如何剔除 node_modules

2.2 快速创建 package.json

2.3 dependencies 节点

2.4 devDependencies 节点

2.5一次性下载所有的包 

2.6 卸载包

 3. 淘宝镜像

 4. 模块的加载机制

4.1 优先从缓存中加载

4.2 内置模块的加载机制

4.3 自定义模块的加载机制

4.4 第三方模块的加载机制

4.5 目录作为模块


1.初次装包后多了哪些文件

     初次装包完成后,在项目文件夹下多一个叫做 node_modules 的文件夹和 package-lock.json 的配置文件。其中:node_modules 文件夹用来存放所有已安装到项目中的包。require() 导入第三方包时,就是从这个目录中查找并加载包。package-lock.json 配置文件用来记录 node_modules 目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等。

注意:程序员不要手动修改 node_modules 或 package-lock.json 文件中的任何代码,npm 包管理工具会自动维护它们。

2.团队协作的问题

因为第三方包的体积过大,一次我们进行团队协作分享资源时需要将node_modules剔除后再分享。

2.1 如何剔除 node_modules

在项目中创建一个.gitignore文件夹,用来存放忽略的文件,然后将node_modules文件夹,添加到 .gitignore 忽略文件中。

2.2 快速创建 package.json

npm 包管理工具提供了一个快捷命令,可以在执行命令时所处的目录中,快速创建 package.json 这个包管理配置文件: npm init -y

  • 上述命令只能在英文的目录下成功运行!所以,项目文件夹的名称一定要使用英文命名,不要使用中文,不能出现空格。
  • 运行 npm install 命令安装包的时候,npm 包管理工具会自动把包的名称和版本号,记录到 package.json 中。

2.3 dependencies 节点

package.json 文件中,有一个 dependencies 节点,专门用来记录您使用 npm install 命令安装了哪些包

2.4 devDependencies 节点

           如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到 devDependencies 节点中。与之对应的,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到 dependencies 节点中。

dependencies用于存放项目上线和开发环境都需要的包
devDependencies用于本地环境开发时所需要的包

2.5一次性下载所有的包 

当拿到一个项目后,需要先通过npm install(或者是npm i命令)命令将项目中需要的所有包给下载下来,否则就会报错。

2.6 卸载包

可以运行 npm uninstall   包名 命令,来卸载指定的包,npm uninstall 命令执行成功后,会把卸载的包,自动从 package.json 的 dependencies 中移除掉。

 3. 淘宝镜像

在使用 npm 下包的时候,默认从国外的 https://registry.npmjs.org/ 服务器进行下载,此时,网络数据的传输需要经过漫长的海底光缆,因此下包速度会很慢。因此我们可以切换 npm 的下包镜像源 将npm的下载地址改为淘宝镜像的地址。

在终端输入下面的命令就可以设置淘宝的镜像。

npm config set registry https://registry.npm.taobao.org/

 通过下面的命令可以查看当前的npm地址,来判断是否设置成功

npm config get registry

  通过下面的命令可以删除淘定镜像

npm config delete registry

 4. 模块的加载机制

4.1 优先从缓存中加载

模块在第一次加载后会被缓存。 这也意味着多次调用 require() 不会导致模块的代码被执行多次。

注意:不论是内置模块、用户自定义模块、还是第三方模块,它们都会优先从缓存中加载,从而提高模块的加载效率。

4.2 内置模块的加载机制

module内置模块是由 Node.js 官方提供的模块,内置模块的加载优先级最高

例如,require('fs') 始终返回内置的 fs 模块,即使在 node_modules目录下有名字相同的包也叫做 fs也会加载内置的fs,而不是fs包。

4.3 自定义模块的加载机制

       使用 require() 加载自定义模块时,必须指定以 ./ 或 ../ 开头的路径标识符。在加载自定义模块时,如果没有指定 ./ 或 ../ 这样的路径标识符,则 node 会把它当作内置模块或第三方模块进行加载。同时,在使用 require() 导入自定义模块时,如果省略了文件的扩展名,则 Node.js 会  按.js、.json、.node的顺序分别尝试加载,如果都没有那就会进行报错。

4.4 第三方模块的加载机制

        如果传递给 require() 的模块标识符不是一个内置模块,也没有以 ‘./’ 或 ‘../’ 开头,则 Node.js 会从当前模块的父目录开始,尝试从 /node_modules 文件夹中加载第三方模块。如果没有找到对应的第三方模块,则移动到再上一层父目录(只会查找父目录,而不会查找兄弟目录,如果只有兄弟目录中包含了/node_modules,而其他地方没有,那也会报错)中,进行加载,直到文件系统的根目录。

例如,假设在 'C:\Users\project\foo.js' 文件里调用了 require('tools'),则 Node.js 会按以下顺序查找:

C:\User\project\node_modules\tools

C:\Users\node_modules\tools

C:\node_modules\tools

4.5 目录作为模块

当把目录作为模块标识符,传递给 require() 进行加载的时候,有三种加载方式:

  • 在被加载的目录下查找一个叫做 package.json 的文件,并寻找 main 属性,作为 require() 加载的入口
  • 如果目录里没有 package.json 文件,或者 main 入口不存在或无法解析,则 Node.js 将会试图加载目录下的 index.js 文件。
  • 如果以上两步都失败了,则 Node.js 会在终端打印错误消息,报告模块的缺失:Error: Cannot find module 'xxx'
  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值