Node.js(3)
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是一个命令行工具,只要安装了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 install 包名
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
3npm config set registry https://registry.npm.taobao.org
查看是否配置成功,不成功就重新运行
npm config list 或者 npm config get registry
package.json
和package-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
这个文件的另一个作用就是锁定版本号
- 比如你的项目依赖了某个包的某个版本