nodejs 第三方模块与同步异步

第三方模块

   别人写好的,具有特定功能的模块,就是第三方模块,我们需要下载才可以使用。

获取第三方模块

    一是访问官网npmjs.com

  是存储和分发第三方模块的仓库

使用npm命令行下载第三方模块

   npm是随node一起安装的包管理工具,只要安装了node,就可以使用npm。

   npm的作用:

 1.允许用户从npm服务器下载别人写好的第三方模块到本地使用。

   2.允许用户从npm服务器下载别人写好的命令行程序到本地使用。

 3.允许用户上传自己写好的第三方模块和命令行程序到npm服务器上。

npm 下载模块

npm install 模块名  可以简写为 npm i 模块名

 执行以上命令后,会在当前命令行所在的目录下多一个node_moduls文件夹,下载好的第三方模块就存放在这个文件夹下面。

   npm 卸载模块  命令

   npm uninstall 模块名

   nodemon

  nodemon是一个命令行工具,用以辅助项目开发,每次修改文件都会自动重新执行该文件,不需要再手动执行。

下载三方包

需要使用三方包时,首先得知道有哪些包可用。虽然npmjs.org提供了个搜索框可以根据包名来搜索,但如果连想使用的三方包的名字都不确定的话,就请百度一下吧。知道了包名后,比如上边例子中的argv,就可以在工程目录下打开终端,使用以下命令来下载三方包。

$ npm install argv
...
argv@0.0.2 node_modules\argv

全局安装与本地安装

 本地安装:把模块和命令行按照到当前文件夹下,只能在当前目录下使用。

  第三方包/模块  是安装在本地的

    全局安装:安装完成后,在命令行中任意目录都可以使用。

  全局安装: 在安装模块时,在后面添加 -g

   npm i 模块名 -g

  命令行工具安装在全局,以便随时随地调用。

解决方法:1.window+r 输入powershell

       2.执行:set-ExecutionPolicy RemoteSigned

 使用nrm 源管理器。

  node的服务器是在国外的,下载是非常慢的。

  如果想要下载的快,可以使用国内的镜像库。

  安装:

 输入npm i nrm -g

 查看可用的源

   输入 命令nrm ls

 切换源

 输入 命令 nrm use 地址名称

  错误解决方法:

1.根据错误提示,找到cli.js,一般是路径

     C:\Users\Administrator\AppData\Roaming\npm\node_modules\nrm\cli.js

 .2.将第17行的数据修改为以下代码:    const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc');

 node_modules的问题

     如果我们在项目中下载了很多第三方模块,那么别人拷贝你的项目时就会特别的慢。

   package.json

     每个项目的根目录下,一般都会有一个package.json文件,定义了这个项目需要哪些模块,以及该项目的配置信息(项目名,作者,版本,许可证等)

  1. node_modules目录

    NodeJS定义了一个特殊的node_modules目录用于存放模块。例如某个模块的绝对路径是/home/user/hello.js,在该模块中使用require('foo/bar')方式加载模块时,则NodeJS依次尝试使用以下路径。

     /home/user/node_modules/foo/bar
     /home/node_modules/foo/bar
     /node_modules/foo/bar
  2. 创建package.json文件

   输入 命令npm init    需要填写配置信息。如果不想填写,直接一路回车。

   输入 命令 npm init -y 快速生成

   package-lock.json 用于锁定版本,防止多人开发时,使用不同的第三方包的版本。 

   package.json重要字段

   dependencies    生产环境依赖模块

  devDependencies 开发环境依赖模块 

   scripts:脚本

一些第三方类库只需要在开发时使用,不需要在生产环境上部署,则可以将它安装在开发环境依赖模块下。

 输入 命令npm install 模块名 -D  开发环境

 输入 命令npm install 模块名 -S  生成环境

 {
      "name": "demo", //项目名称
      "version": "1.0.0", //项目版本
      "description": "", //简介
      "main": "index.js", //入口文件
      //脚本
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "", //作者
      "license": "ISC" //开源许可证
    }
script 脚本设置:
"scripts": {
    "key":"value"
}

key 启动的命令名
value  指定的命令

运行:
  npm run key
 */

安装依赖  npm install

C:\Users\Administrator\Desktop\04yarn>npm install
npm WARN 04yarn@1.0.0 No description
npm WARN 04yarn@1.0.0 No repository field.

added 1 package from 1 contributor in 0.812s

yarn也是一个包资源管理器,与npm的功能是一样的。 不过yarn的下载速度更快。

 目标:干掉npm。

 下载使用:

   用npm去下载

  输入 命令 npm i yarn -g

  初始化项目:创建package.json

  输入命令:

    yarn init

    yarn init -y 快速生成

  安装单个依赖

   输入 命令 yarn add 模块名比如jquery

   安装项目中所有的依赖

    输入 命令yarn install

C:\Users\Administrator\Desktop\04yarn>npm install
npm WARN 04yarn@1.0.0 No description
npm WARN 04yarn@1.0.0 No repository field.

added 1 package from 1 contributor in 0.812s

 卸载依赖

 输入 命令 yarn remove 模块名 

 模块加载机制

 

 模块加载机制

 1.模块名有路径,并且有后缀

     通过路径,引入相关的模块。`

 2.当模块有路径,但是没有后缀的时候

  2.1 会先找路径下同名的js文件。

 2.2 再找路径下同名的文件夹,找文件夹下的index.js

 2.3 如果文件夹下有package.json 会找文件中的main字段 入口文件。

 2.4 如果找不到,就报错。

 3.模块没有路径也没有后缀。

 3.1 node会判断它是否为内置模块,是内置就加载

 3.2 不为内置,则去第三方模块中查找,去node_modules中查找。

包(package)

我们已经知道了JS模块的基本单位是单个JS文件,但复杂些的模块往往由多个子模块组成。为了便于管理和使用,我们可以把由多个子模块组成的大模块称做,并把所有子模块放在同一个目录里。

在组成一个包的所有子模块中,需要有一个入口模块,入口模块的导出对象被作为包的导出对象。例如有以下目录结构。

- /home/user/lib/
    - cat/
        head.js
        body.js
        main.js

同步与异步:

   同步:一次执行一个任务,该任务执行完成后,再执行下一个任务。

   异步:一次可以执行多个任务,当前的任务不会阻塞下一个任务的执行。

   在js中,异步任务(API)会在所有的同步任务完成后才会执行。

   异步函数的返回值问题

   同步函数中可以获取返回值


function fn(){
  return "123"
}
console.log(fn());
function fnSync(){
  setTimeout(function(){
    console.log("456");
    return "456";
  },0)
}
// log是一个同步代码,执行fnSync函数时,遇到setTimeout时,setTimeout不会立即执行, fnSync就没有返回值,默认返回undefined。所以,打印的结果是undefined,打印完成后,js中的所有同步代码都执行完了,才会执行setTimeout函数。
console.log(fnSync());

用callback函数(回调函数)来获取异步函数的返回值。

回调函数:将函数作为参数传入执行的函数中,在合适的时候调用。 (执行完)回(来)调(用)

unction getMsg(callbank){
  setTimeout(function(){
    callbank("hello world")//调用
  },1000)
}
// 1.先执行15行的代码
// 2.进入getMsg函数中
// 3.执行setTimeout定时器
// 4.等待1秒后
// 5.执行12行的代码进行调用。
// 6.callback就是我们在第15行传入的匿名函数。
getMsg((data)=>{
  // 在这里对函数的结果进行处理
  console.log(data);
});

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值