引入文件 require
- 如果有路径就在路径中查找
- 如果没有路径,就在node_modules中查找
- 在没有路径,且没有node_modules的时候,会在node的安装目录中查找
(1)如果参数字符串以“/”开头,则表示加载的是一个位于绝对路径的模块文件。比如,require('/home/marco/foo.js')将加载/home/marco/foo.js。
(2)如果参数字符串以“./”开头,则表示加载的是一个位于相对路径(跟当前执行脚本的位置相比)的模块文件。比如,require('./circle')将加载当前脚本同一目录的circle.js。
(3)如果参数字符串不以“./“或”/“开头,则表示加载的是一个默认提供的核心模块(位于Node的系统安装目录中),或者一个位于各级node_modules目录的已安装模块(全局安装或局部安装)。
(4)如果参数字符串不以“./“或”/“开头,而且是一个路径,比如require('example-module/path/to/file'),则将先找到example-module的位置,然后再以它为参数,找到后续路径。
(5)如果指定的模块文件没有发现,Node会尝试为文件名添加.js、.json、.node后,再去搜索。.js件会以文本格式的JavaScript脚本文件解析,.json文件会以JSON格式的文本文件解析,.node文件会以编译后的二进制文件解析。
(6)如果想得到require命令加载的确切文件名,使用require.resolve()方法。// 该方法使用,可参考https://www.jianshu.com/p/e4edf4b08d9e
module对象
-
module.exports
属性。属性表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取module.exports变量。
- a.js中声明了add函数,并使用module.exports导出。
//a.js中声明了add函数,并使用module.exports导出。
function add(a,b){
return a +b;
}
module.exports = add;
在b.js中,引入a.js,这里是使用常量接收,然后就可以使用a.js中导出的
// 在b.js中,引入a.js,这里是使用常量接收,然后就可以使用a.js中导出的函数
const add = require('./a');
const sum = add(10,20);
console.log(sum)
2.若是导出多个,可以选择导出一个对象,例:
// a.js
function add(a,b){
return a +b;
}
function mul(a,b){
return a*b;
}
module.exports = {
add,
mul
};
导入有以下两种方式:
注意:对象形式的导入导出,方法名(也就是add、mul这些导入导出时,名称要保持一致)
// 第一种:
const obj = require('./a');
const sum = obj.add(8,20);
console.log(sum)
// 第二种:
const {add,mul} = require('./a');
const sum = mul(8,20);
console.log(sum)