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 注意对应关系

关于node中 require 和 ES6中export 、export default的总结的更多相关文章

  1. ES6中常用新特性讲解

    1.不一样的变量声明:const和let ES6推荐使用let声明局部变量,相比之前的var(无论声明在何处,都会被视为声明在函数的最顶部) let和var声明的区别: var x = '全局变量'; ...

  2. es6中的类及es5类的实现

    目录 类的特点 类的特点 1.类只能通过new得到 在es6中类的使用只能是通过new,如果你将它作为一个函数执行,将会报错. //es6的写法 class Child { constructor() ...

  3. ES6中的export以及import的使用多样性

    模块功能主要由两个命令构成:export和import.export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能. 一.export导出模块使用部分的几种方式 一个模块就是一 ...

  4. ES6中export , export default , import模块系统总结

    最近在学习使用Webpack3的时候发现,它已经可以在不使用babel的情况下使用ES6的模块加载功能了. 说到ES6的模块加载功能,我们先复习一下CommonJS规范吧: 一  . CommonJS ...

  5. ES6中的export和import

    1.ES6中的模块加载 ES6 模块是编译时加载,编译时就能确定模块的依赖关系,以及输入和输出的变量,相比于CommonJS 和 AMD 模块都只能在运行时确定输入输出变量的加载效率要高. 1.1.严 ...

  6. JavaScript ES6中export及export default的区别

    相信很多人都使用过export.export default.import,然而它们到底有什么区别呢? 在JavaScript ES6中,export与export default均可用于导出常量.函 ...

  7. ES6中export及export default的区别

    相信很多人都使用过export.export default.import,然而它们到底有什么区别呢? 在JavaScript ES6中,export与export default均可用于导出常量.函 ...

  8. ES6中export与export default的区别

    首先要知道export,import ,export default是什么 ES6模块主要有两个功能:export和importexport用于对外输出本模块(一个文件可以理解为一个模块)变量的接口i ...

  9. ES5和ES6中关于import & export的书写方式的区别

    ES6中输出变量的写法 情景1:单个变量 输出 export const less = 'less' 引用 import {less} from '../index.js' 情景2:多个变量 输出: ...

随机推荐

  1. idea设置编码格式utf-8

    settings  >> File Encodings >>如下

  2. UMP系统功能 资源隔离

  3. Android 开发 MediaRecorder视频录制入门

    前言 MediaRecorder是Android SDK提供用于录制音视频,关于音频的录制在我另一篇博客里已经介绍.传送门: https://www.cnblogs.com/guanxinjing/p ...

  4. c++ static关键字的作用

    1.被申明的函数或值无法被其他源文件使用 2.static的第二个作用是保持变量内容的持久.(static变量中的记忆功能和全局生存期) 存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯 ...

  5. git 命令行(四)-推送分支到远程

    在本地新建一个分支: git branch newBranch 切换到你的新分支: git checkout newBranch 创建并切换到新分支: git checkout -b newBranc ...

  6. windows环境下,svn未备份情况下重新恢复

    公司有个同事在未打招呼的情况下把公司服务器进行重新装系统,崩溃啊.SVN之前未备份,还好SVN的库(Repositories)还在,如下图: 恢复办法如下: 由于之前安装的就是VisualSVN-Se ...

  7. MS-coco数据集下载及使用(转)

    先做个标记,改天研究下. 几个链接: MS coco数据集介绍及下载 Microsoft COCO 数据集 COCO Dataset 数据特点 COCO 数据集的使用

  8. 浅谈response和request方法

    一:概述 Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. 按这个理解的话一次请求生成一个request和res ...

  9. SpringBoot学习笔记(八):SpringBoot启动端口+访问路、SpringBoot配置文件yml、SpringBoot多环境区分、SpringBoot打包发布

    SpringBoot启动端口+访问路径 配置文件: server.port=9090 server.context-path=/springboot 现在只能用http://127.0.0.1:909 ...

  10. 用JS把数组内的日期转换为星期

    核心代码 给定日期是星期几,应把字符串转为Date: new.Date('2017-12-30').getDay(); // 返回0,表示星期天,1:星期一…… 案例: 需求: 调用此方法 funct ...