nodejs基础教程--require 、module和exports
2017-10-11 15:55
405 查看
一 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是globalnodejs的作用域分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
注意不能改变这两者的指向引用
相关文章推荐
- 【前端学习笔记】2015-09-09~~~~nodejs中的require()和module.exports
- nodejs中require、exports与module.exports的区分
- NodeJs:module.filename、__filename、__dirname、process.cwd()和require.main.filename 解惑
- nodejs中exports与module.exports的区别详细介绍
- nodejs中的exports和module.exports
- nodejs中exports与module.exports的区别
- nodeJs--模块module.exports与实例化方法
- 通过Anuglar Material串串学客户端开发 - NodeJS模块机制之Module.Exports
- NodeJS基础教程之一
- js基础module.exports、exports、prototype说明
- nodejs的module.exports 与 exports
- NodeJS基础教程
- 深入理解nodejs 中 exports与module.exports
- 笑谈Nodejs系列--Module exports Vs exports
- nodejs中的exports和module.exports
- nodejs开发——require与exports的使用
- module.exports、exports、require、export、import的关系
- module.exports,exports,export和export default,import与require相同点与不同点
- nodejs中exports与module.exports的实践
- nodejs中exports与module.exports的区别详细介绍