1.模块系统
1.1核心模块
node官方为我们提供了很多的模块,可通过 var 变量名 = require(‘模块名称’)的方式直接加载核心模块
1.2第三方模块
第三方模块例如像art-template模块,需要我们手动下载包。在js文件中引用时,与核心模块的加载的形式是一样的,加载的模块名称就是我们下载包的名称,就好像下载时的命令npm install --save jquery,包名是什么,模块名称就是什么
1.3自建的模块
有时候,我们会自己建立一个模块,来供后期开发使用。当我们在加载自己写的东西时,只需要在require中添加路径,例如require(‘./文件夹名/文件名’),./就是当前目录,而../就是上一级目录,这个就不做解释了。
2.加载与导出
2.1 require和exports
加载的话,就是通过require(‘包名或者路径’)引用各种模块。而导出的话,则是通过exports对象来传递方法属性等,默认情况下,exports不传值的时候,是一个{}空对象。具体exports如何传值呢,在之前也是有上传过小例子。例如:
文件a.js
var foo = 'hello'
var method = function () {
console.log('hello world')
}
//在这里只需要通过exports.变量名的形式就可以传递
exports.foo = foo
exports.method = method
文件b.js
//这是通过路径加载自己的写的模块
var Bexports = require('路径/a.js')
console.log(Bexports.foo)
2.2 exports与module.exports的区别
其实说白了,exports就是引用的module.exports。就是可以看成exports = module.exports。我们可以exports=foo,同样的,也可以用module.exports=foo,两者是一样的。当两者都用时,给exports的引用如果转向其他的地方了,那么文件最终显示的是module.exports的,而非exports,除非exports重新引用到module.exports
2.3 require缓存加载
require在加载的时候,会优先从缓存中加载文件。例如有a,b,c三个文件,b加载了c文件,a去加载b之后,又多加载了一次c。由于a文件中加载的b文件已经加载过c文件了,所以a文件加载c文件的时候,默认就会先从缓冲中加载c文件
3 包文件解释
当我们通过node install 包名,下载完第三方模块后,require是如何去加载该模块的呢。首先,会找到require加载的包名的那个文件夹,其次会去找到package.json描述文件,在该文件中,找到main:所指向的文件,如果没有,默认直接找到index.js
那么package.json文件都什么意思呢,首先package.json是对包的一个描述,用来记录依赖什么包,作者,版本等信息,通常在下载第三方模块时,都会用npm install --save 包名的命令,来为下载的包建立描述到package.json文件中。如果哪天误删除某个包,同过package.json文件中的依赖描述,用npm install就可以重新下载了。
4 npm的常用命令
网上有太多关于npm常用的命令,就不多说了。简单记录几个。
4.1 npm install 包名 --save :用来下载模块的同时,为package.json记录包的依赖关系。也可以写成npm i -S 包名,i 就是install的缩写,而-S则是--save的缩写,-S是大写。
4.2 npm uninstall 包名 :不解释,就是删除包
4.3 npm init -y :就是生成package.json文件用的,当然得是要有下载好的模块才能生成,-y则是直接跳过npm init创建package.json文件时的向导。
4.4 npm help :通常傻瓜才会去死记硬背那么多东西,很多东西都是在实际运用中,潜移默化的记住的,说白了,就是熟能生巧,写多了也就记住了,如果不记得了,可以通过npm help的命令来查看关于npm的相关一些常用命令。
5 npm翻墙
由于npm是国外的大牛开发出来的,所以我们在通过npm下载第三方包时,会比较慢。那么我们就可以通过淘宝开发的那些大牛开发的关于npm的镜像文件来下载第三方包。有两种方法:
第一种:就是安装淘宝的cnpm,可以直接通过该npm install --global cnpm的命令来下载安装,稍微有点慢
第二种:就是在配置文件中进行设置,直接命令npm config set registry http://registry.npm.taobao.org就可以,以后凡是npm的命令,默认都是cnpm的命令,从淘宝镜像下载。