关于node中 require 和 ES6中export 、export default的总结

时间:2021-12-04 11:20:21

nodejs中 require 方法的加载规则

方法的加载规则

1. 优先从缓存中加载
2. 核心模块
3. 路径形式的模块
4. 第三方模块

一、优先从缓存中加载

main.js:执行加载a.js模块

require ('./a')

a.js:输出a被加载了 执行加载b.js模块

console.log('a.js被加载了')

let abd = require('./b')
console.log(abd)

b.js:

console.log('b.js被加载了')
module.exports = {
a: '小明'
}

结果

C:\Users\Administrator\Desktop\test>node ./main.js
a.js被加载了
b.js被加载了
{ a: '小明' }

二、node 中模块的加载顺序

以 var template = require(‘art-template’) 为例:

1. 先找到当前文件所处目录中的 node_modules 目录

2. 然后根据以下方式找到文件中的 main 属性

3. main 属性中就记录了 art-template 的入口模块

4. 然后加载使用这个第三方包,但是实际上最终加载的还是文件

5. 如果 package.json 文件不存在或者 main 指定的入口模块是也没有

6. 则 node 会自动找该目录下的 index.js,也就是说 index.js 会作为一个默认备选项

7. 如果以上所有任何一个条件都不成立,则会进入上一级目录中的 node_modules 目录查找

8. 如果上一级还没有,则继续往上上一级查找

9. 如果直到当前磁盘根目录还找不到,最后报错: can not find module xxx
第三方模块寻找顺序:  node_modules/art-template	  >    package.json 文件   >   main 属性 >   index.js

export default 和 export 区别

注意:

1. export与export default均可用于导出常量、函数、文件、模块等

2. 在一个文件或模块中,export可以有多个,export default仅有一个

4、在一个模块中,可以同时使用export default 和export 向外暴露成员

5、使用export向外暴露的成员,只能使用{  }的形式来import,这种形式,叫做【按需导出】,不需要,可以不在{ }中定义

3、export default 向外暴露的成员,可以使用任意变量来接收

7、使用export导出的成员,必须严格按照导出时候的名称,来使用{ }按需接收

8、使用export导出的成员,如果想换个变量名称接收,可以使用as来起别名

例如

// test.js
let info = {
name: 'zs',
age: 20
}
export default info export let title = '小星星' export let content = '哈哈哈'

在main.js中接收,test.js使用export default 和 export 向外暴露的成员

import person, {title, content as content1} from './test.js'
console.log(person) // 其实就是test.js 中的 info
console.log(title) // 其实就是test.js 中的 title
console.log(content1) // 其实就是test.js 中的content 注意对应关系