模块系统和npm

什么是模块化:

加载 & 导出

加载:require

var 自定义变量名 = require (‘模块’)

导出:exports

commontJs 模块规范

在node中JavaScript还有一个重要的概念:模块系统

模块作用域

如果一个模块需要直接导出某个成员,而不是以挂载的方式导出,则需要使用下面这种方式:

module.exports = add 

exports 和 module.exports 区别:

原理:在node中,在每个模块代码中,都有一个自己的module对象,在module对象中,又有一个exports对象,在每个模块代码的最后面,默认有一个return module.exports

var module = {
    exports ={

}
}
.....
return module.exports

如果想要导出多个元素,需要module.exports.foo,module.exports.add,太麻烦看,于是在模块文件中就有了这样的一行代码:

var exports = module.exports

因为module.exports 是一个对象,所以exports也是一个对象。

但是为什么exports.foo = ‘adkjhkas’ 不行呢?

因为对象重新赋值,那么此对象会指向另一片新开辟的空间。而模块文件下面还是module.exports ,所以不行

使用 require 加载页面

模块查找机制:

  • 1.优先从缓存加载
  • 2.核心模块
  • 3.路径形式的模块
  • 4.第三方模块:
    所有的第三方模块,都必须通过NPM进行下载
    使用的时候就可以通过require(‘包名’)的方式来加载使用:例如:require(‘art-template’)

    既不是核心模块,也是路径形式的模块,先找到当前文件所属目录中的node_modules目录,

    然后找到node_modules /art-template,

    再去找node_modules /art-template/package.json 文件,

    再去找node_modules /art-template/package.json/main属性

    main中就记录了art-template的入口模块

    如果main是错的,或者package 根本不存在,则会自动去寻找默认备选项:index.js

    如果以上都不成立,就会继续往上一级进行寻找(node_modules),如果还找不到,就会再上一级进行寻找,直到磁盘根目录,然后报错

    注意:我们实际的项目中只有一个,放在网站的根目录中

使用 exports 接口来导出模块中的成员

模块标识中的’/ ‘和文件操作路径中的’/’

文件操作中的路径,可以省略’./’,但是不能只省略‘/‘,就剩’/’,’/’表示文件的根目录(C,D,E….盘)

[我们所有使用的文件操纵API都是异步的]:

在模块加载中,’./’可以省略

npm

node package manage

package.json

我们建议每一个项目都要有一个package.json文件,被称为包描述文件。

这个文件的创建方式可以通过,npm init 方式自动创建出来

使用npm安装第三方包的时候,最好都使用–save来保存这个第三方包的依赖信息

如果node_modules丢失或者删除,我们只需要npm install,就可以把所有的denpendcies里所有的依赖项都下载回来

npm网站

npmjs.com

npm命令行工具

npm是一个命令行工具,只要安装了node ,就自动有了npm

npm也有版本这个概念

可以通过在命令行中输入 npm --version

升级npm

npm install --global npm

npm常用命令

npm init

npm init-y 可以跳过向导,快速生成 package.json

npm install ‘包名’ :下载

npm install ‘包名’ –save :下载并且保存依赖项

npm intall :一次性把 package.json 中的 denpendencies 中的依赖项全部下载

猜你喜欢

转载自blog.csdn.net/weixin_42194583/article/details/80681032
今日推荐