【JS笔记】CommonJS规范

require的三种参数格式

'pages/index/index.js'这是我假定的一个地址
  • ‘/pages/index/index.js’ 绝对路径形式
  • ‘./pages/index/index.js’ 相对路径形式
    js文件的文件后缀名可以省略,即‘pages/index/index.js’可以写为‘pages/index/index’

模块module输出的变量不受module内部方法而改变

举个例子
下面是一个模块文件lib.js。

// lib.js
var counter = 3;
function incCounter() {
  counter++;
}
module.exports = {
  counter: counter,
  incCounter: incCounter,
};
	//输出内部变量counter和改写这个变量的内部方法incCounter。

然后,加载上面的模块。

// main.js
var counter = require('./lib').counter;
var incCounter = require('./lib').incCounter;

console.log(counter);  // 3
incCounter();
console.log(counter); // 3

上面代码说明,counter输出以后,lib.js模块内部的变化就影响不到counter了。counter还是3,没有因为加1而变为4

module.exports和exports

为了方便,node为每一个module提供一个变量,指向module.exports。

//这等同在每个模块头部,有一行这样的命令。
    var exports = module.exports;

因此可以认为module.exports等同于exports

需要注意
要输出的变量不能直接赋值给exports

//无效写法
exports = function(x) {console.log(x)};

因为exports被重新赋值,不再指向moudle.exports。

补充:
模块module对外开放的变量都是module.exports的属性

//example.js
var x = 5;
var addX = function (value) {
  return value + x;
};
module.exports.x = x;
module.exports.addX = addX;
//上面代码通过module.exports输出变量x和函数addX。

require方法用于加载模块。

var example = require('./example.js');

console.log(example.x); // 5
console.log(example.addX(1)); // 6

所以说require得到的变量都是module.exports的属性。换句话说就是,模块通过module.exports的属性 对外开放 模块的变量

至此,总结结束

内容远无法概括完所有知识,欲了解更多,可参考原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值