commonjs

引入文件 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变量。
  1. 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)
image.png

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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载自:https://www.cnblogs.com/chenguangliang/p/5856701.html...
    小豆soybean阅读 725评论 0 2
  • 1 个人理解;有错希望大家指出;稍后更新拖拽上传文件; 2、commonJS commonjs的目标是制定一个js...
    吴高亮阅读 1,588评论 0 2
  • 随着前端业务复杂度的增加,模块化成为一个大的趋势。而在ES6还未被浏览器所支持的情况下,commonjs作为ES6...
    吴高亮阅读 1,066评论 0 3
  • 本文参考:阮一峰大大原文的 http://javascript.ruanyifeng.com/nodejs/mod...
    孙雪冬阅读 677评论 0 1
  • Node采用的CommonJS 由于CommonJS具有同步执行的特性,也就是说浏览器需要等待加载的文件从服务器拿...
    Jolyne_Cujoh阅读 136评论 0 0