nodejs基础教程--require 、module和exports

13 篇文章 0 订阅

一 require

1 a是内置模块(优先级0)

require('a') //返回该模块

2(以 “./” 或者 “/” 或者 “../” 开头 )(优先级1)


require('./a.js')
//或
require('./a')

node的搜索顺序是这样的。
在“a”父文件的路径下搜索
将 a 当成文件,依次查找下面文件,只要其中有一个存在,就返回该文件,不再继续执行。

//
a 
a.js
a.json
a.node
//即 文件名称- > .js -> .json -> .node
//如果都搜索不到 返回 Cannot find module './a'

3 a为文件夹时(优先级2)。。。

//当前文件根目录假设为 E:\nodejsTest\test0\hello.js
require('./a')
//新建index.js 目录:E:\nodejsTest\test0\a\index.js
console.log("我是 a文件夹的 index.js")

//如果(优先级1)找不到,将a当做目录搜索,如下。

a/package.json(main字段)
a/index.js
a/index.json
a/index.node

4 a不带路径(优先级3)

require('a')

node 从当前模块的父目录+/node_modules 这个位置尝试加载。
如果还是没有找到,那么它跳到上层目录并依此类推,直到找到模块,或者达到根目录为止。

如果在文件 ‘/xxxx/xx/test/bb.js’ 中调用 require(‘a.js’),那么 node 将在下列位置查找,顺序如下:

•/xxxx/xx/test/node_modules/a
•/xxxx/xx/node_modules/a
•/xxxx/node_modules/a
•/node_modules/a

总结:搜索优先级 内置模块 -> 文件名 -> 目录名 -> node_modules目录->not found


二module

module 保存提供和当前模块的一些信息

//当前文件目录 E:\nodejsTest\test0\hello.js
console.log(module)

输出

Module {
  id: '.',
  exports: {},//这个等下exports中会提到
  parent: null,          //父模块 ,为null说明没有父模块
  filename: 'E:\\nodejsTest\\test0\\hello.js',      //模块的绝对路径,
                                                //console.log(__filename) 可以得到。
  loaded: false,   //输出这些内容时,模块还没有全部加载,所以 loaded 属性为 false
  children: [],//子模块 
  paths:  //模块可能的位置
   [ 'E:\\nodejsTest\\test0\\node_modules',
     'E:\\nodejsTest\\node_modules',
     'E:\\node_modules' ] }
require('./1.js')
console.log(module)
//输出

Module {
  id: '.',
  exports: {},
  parent: null,
  filename: 'E:\\nodejsTest\\test0\\hello.js',
  loaded: false,
  children: //子模块 
   [ Module { 
       id: 'E:\\nodejsTest\\test0\\1.js',  //子模块的id
       exports: {},
       parent: [Circular],
       filename: 'E:\\nodejsTest\\test0\\1.js',
       loaded: true,
       children: [],
       paths: [Object] }
    ],
  paths: 
   [ 'E:\\nodejsTest\\test0\\node_modules',
     'E:\\nodejsTest\\node_modules',
     'E:\\node_modules' ] }

三exports

nodejs和js的一个不同点就是作用域。比如说js的顶级对象是Windows,而nodejs是global
nodejs的作用域分3种
局部变量,作用域:定义该变量的函数内
局部全局变量,作用域:定义该变量的JS文件
公共全局变量,作用域:程序内可访问global对象的任何一个地方

var a=100
global.a=200;
console.log(a)//输出 100
console.log(global.a)//输出 200

在项目中我们时常会用到公共变量。并不推荐global。

a.js
var a=100;
在 b.js
require('./a.js')

console.log(a);//抛 a is not defined

b.js并不能访问a中的变量。
我们有两种方法能使他访问到。
1这里写图片描述
开发中并不推荐使用global。

2 exports

a.js
var a=100;
module.exports.a=a
在 b.js
var mya=require('./a.js')//这个方法的返回值,其实就是该模块中的module.exports对象。

console.log(mya);//输出{a:100}

3 module.exports 和exports
这里写图片描述
输出 true
注意不能改变这两者的指向引用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值