require方法的加载规则,了解npm的常用命令和如何切换到淘宝npm镜像

require方法的加载规则

如果想了解更多底层的细节,可参考: 朴灵写的《深入浅出node.js》
深入浅出 Node.js(三):深入 Node.js 的模块机制

  • require(‘模块标识’)
  • 优先从缓存加载
  • 判断模块标识
    • 核心模块
    • 第三方模块
    • 自己写的模块

路径形式的模块标识

  • ./ 当前目录,不可省略
  • ../ 上一级目录,不可省略
  • / 在这里表示的是当前文件模块所属磁盘根路径
    • .js后缀名可以省略,eg:加载main.js可以写成 require(‘./main’)
  • 核心模块的本质也是文件,核心模块文件已经被编译到了二进制文件中,只需要按名字加载就行了
    • eg: require(‘http’)

第三方模块

  • 凡是第三方模块都必须通过 npm 来下载
  • 通过 require(‘包名’) 的方式来加载才可以使用 eg: require(‘art-template’)
  • 既不是核心模块、也不是路径形式的模块

    • 先找到当前文件所处目录中的 node_modules 目录

    • node_modules/art-template/package.json 文件

    • package.json 文件中的 main 属性 (main 属性中就记录了 art-template 的入口模块)

    • 然后加载第三方包,实际上加载的还是文件

    • 如果 package.json 文件不存在或者 main 指定的入口模块是也没有 node 会自动找该目录下的 index.js

    • 如果以上所有任何一个条件都不成立,则会进入上一级目录中的 node_modules 目录查找

    • 如果上一级还没有,则继续往上上一级查找,如果直到当前磁盘根目录还找不到,最后报错:

      • can not find module xxx
  • 一个项目有且只有一个 node_modules,放在项目根目录中,这样项目中所有的子目录中的 代码都可以加载到第三方包

npm (node package manager)

npm官网

npm命令行工具

  • npm是一个命令行工具,只要安装了node就安装了npm
  • 查看npm版本
1
npm --version
  • 升级npm
1
npm install --global npm

npm常用命令

  • npm init

    • npm init -y 直接生成,跳过向导
  • npm install

    • npm install 包名
      • 只下载
    • npm install 包名 –save
      • 下载并保存依赖项(package.json文件中的dependencies选项)
      • npm i -S 包名
  • npm uninstall 包名

    • 只删除,不删除依赖项
    • npm un
  • npm uninstall 包名 –save

    • 删除包和依赖项
    • npm un -S
  • npm –help

    • 查看使用命令
    • eg:查看uninstall的简写 npm uninstall –help

npm切换到淘宝

  • 安装淘宝cnpm

    1
    2
    #在任意目录下都可执行,--global是全局安装,不可省略
    npm install --global cnpm
  • 接下来安装包的时候将npm变成cnpm就行了,举个栗子:

    1
    2
    3
    4
    #使用npm,速度较慢
    npm install jquery
    #使用淘宝镜像
    cnpm install jquery
  • 不想安装cnpm又想通过淘宝镜像下载

    1
    npm install jquery --registry https://registry.npm.taobao.org
  • 可以把这个选型配置到文件中,这样不用每一次都很麻烦

    1
    2
    3
    npm config set registry https://registry.npm.taobao.org
    #查看是否配置成功,不成功就重新运行
    npm config list 或者 npm config get registry

package.jsonpackage-lock.json

  • npm 5之后才加入package-lock.json 这个文件,之前的版本没有
  • 当你安装包的时候,npm都会生成或更新package-lock.json 这个文件
    • npm 5以后的版本安装包不需要加--save参数,会自动保存依赖信息
    • package-lock.json 这个文件会保存node_modules中的所有信息(版本,下载地址),这样做可以提升npm install时候的下载速度
    • lock这个“锁”就是用来锁定安装包版本的
      • 比如你的项目依赖了某个包的某个版本1.11.1,重新install的时候会下载最新版本
      • package-lock.json 这个文件的另一个作用就是锁定版本号