模块化-CommonJS-module.exports-require()

1.为什么需要模块化?

当一个文件下代码写多了之后,会越来越难以掌控,会出现以下的问题

1. 全局变量污染(假如a.js里提供一个getRandom这个工具函数给其他js使用,这个很正常没问题,但是如果其他同事也写了一个名字叫做getRandom函数在其他的b.js里面,刚好有一个c.js需要引用a.js和b.js,这样子势必会造成变量污染)
2. 依赖混乱(一个项目js多的时候,当a.js需要b.js、b.js又需要c.js、c.js又需要a.js,这样子引用的顺序就无法确定,很混乱 )

2.CommonJS如何实现模块化

node天生支持CommonJS模块化标准(CMJ社区标准),并且只有nodejs环境支持CommonJS规范
CMJ规范:

1. node中的每个js文件都是一个CMJ模块,通过node命令运行的模块,叫做入口模块
2. 模块中的所有全局定义的变量、函数,都不会污染到其他模块
3. 模块可以暴露(导出)一些内容给其他模块使用,需要暴露什么内容,就在模块中给module.exports赋值
4. 一个模块可以导入其他模块,使用函数require(“要导入的模块路径”)即可完成,该函数返回目标模块的导出结果
1. 导入模块时,可以省略.js
2. 导入模块时,必须以./或../开头
5.一个模块在被导入时会运行一次,然后它的导出结果会被node缓存起来,后续对该模块导入时,不会重新运行,直接使用缓存结果

☆ 3.使用代码示例 ☆

1.直接导出及导入使用
文件路径:COMMONJS/information.js(导出)
module.exports = {
  name: "小灿同学",
  age: 22,
};
文件路径:COMMONJS/index.js(导入)
const info = require("./information");
console.log(info.name);
console.log(info.age);
// 上述三行代码或者下述三行代码(直接解构)
const { name, age } = require("./information");
console.log(name);
console.log(age);

2.单个导出及导入使用
文件路径:COMMONJS/util.js(导出)
function getRandom() {
  return Math.random();
}

module.exports = getRandom;
文件路径:COMMONJS/index.js(导入)
const getRandom = require("./util");
console.log(getRandom());

3.多个导出及导入使用
文件路径:COMMONJS/util.js(导出)
function getRandom() {
  return Math.random();
}

function sum(a, b) {
  return a + b;
}

module.exports = { getRandom, sum };
文件路径:COMMONJS/index.js(导入)
const util = require("./util");
console.log(util.getRandom());
console.log(util.sum(1, 2));
// 上述三行代码或者下述三行代码(直接解构)
const { getRandom, sum } = require("./util");
console.log(getRandom());
console.log(sum(1, 2));
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
(function (root, factory, undef) { if (typeof exports === "object") { // CommonJS module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./enc-base64url"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy")); } else if (typeof define === "function" && define.amd) { // AMD define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./enc-base64url", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory); } else { // Global (browser) root.CryptoJS = factory(root.CryptoJS); } }(this, function (CryptoJS) { return CryptoJS; }));解释这段代码
06-03

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TANGYC_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值